项目准备

首先,我们要实现PHP的邮件发送,我们要准备一下邮件发送的插件,php的邮件插件现在市面上一共有三种常用,PhpMailer、SwiftMailer、ZendMail

我们本次使用SwiftMailer,下面是本次项目实现代码分享

链接:https://pan.baidu.com/s/1tDSV_8hJdrReNa851Y5ZNQ

提取码:famt

SwiftMailer官方github地址:https://github.com/swiftmailer/swiftmailer.git

简要谈论SwiftMailer的使用

Swiftmailer是一个类似PHPMailer邮件发送组件,它也支持HTML格式、附件发送,但它发送效率相当高,成功率也非常高,很多PHP框架都集成了Swiftmailer。

基本使用

只需填写邮箱服务器相关配置,然后填写邮件标题、发送对象和邮件内容,运行即可完成发送邮件任务:

require_once '/path/to/vendor/autoload.php';

$transport = (new Swift_SmtpTransport('smtp.163.com', 25)) // 邮箱服务器
->setUsername('your username')  // 邮箱用户名
->setPassword('your password')   // 邮箱密码,有的邮件服务器是授权码
;

$mailer = new Swift_Mailer($transport);

$message = (new Swift_Message('Wonderful Subject')) // 邮件标题
->setFrom(['john@doe.com' => 'John Doe']) // 发送者
->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) //发送对象,数组形式支持多个
->setBody('Here is the message itself') //邮件内容
;

$result = $mailer->send($message);

如果发送成功,会返回$result的值为1,即true。

高级应用

发送邮件时最关键的是创建消息体,在Swift Mailer中创建消息是通过使用库提供的各种MIME实体完成的,因此我们不需要花太多时间去了解如何处理MIME实体,只需拿来使用即可。

Swift Mailer提供了创建邮件消息的一系列方法,下面列举我们常用到的一些方法:

setSubject():邮件主题

setFrom():发件人地址,数组形式,可以是多个发件人

setTo():收件人地址,数组形式,可以是多个收件人

setBody():邮件内容

addPart():邮件内容指定输出类型,支持html内容输出

attach():添加附件

setCc():抄送,支持多个邮箱地址

setBcc():密送,支持多个邮箱地址

项目实战

包含所需要文件

<?php
header('content-type:text/html;charset=utf-8');
//1.包含所需文件
require_once 'swiftmailer-master/lib/swift_required.php';
require_once 'PdoMySQL.class.php';
require_once 'config.php';
require_once 'pwd.ph

接收前端传递的信息

//2.接收信息
$act=$_GET['act'];
$username=addslashes($_POST['username']);//过滤用户输入内容
$password=md5($_POST['password']);
$email=$_POST['email'];
$table='user';

得到PDO连接对象并完成注册

//3.得到连接对象
$PdoMySQL=new PdoMySQL();
if($act==='reg'){
   $regtime=time();
   //完成注册的功能
   $token=md5($username.$password.$regtime);
   $token_exptime=$regtime+24*3600;//过期时间
   $data=compact('username','password','email','token','token_exptime','regtime');
   $res=$PdoMySQL->add($data, $table);
   $lastInsertId=$PdoMySQL->getLastInsertId();

准备发送激活邮件信息

if($res){
      //发送邮件,以QQ邮箱为例
      //配置邮件服务器,得到传输对象
      $transport=Swift_SmtpTransport::newInstance('smtp.qq.com',25);
      //设置登陆帐号和密码
      $transport->setUsername('490222113@qq.com');
      $transport->setPassword($emailPassword);
      //得到发送邮件对象Swift_Mailer对象
      $mailer=Swift_Mailer::newInstance($transport);
      //得到邮件信息对象
      $message=Swift_Message::newInstance();
      //设置管理员的信息
      $message->setFrom(array('490222113@qq.com'=>'King'));
      //将邮件发给谁
      $message->setTo(array($email=>'imooc'));
      //设置邮件主题
      $message->setSubject('激活邮件');
      $url="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?act=active&token={$token}";
      $urlencode=urlencode($url);
      $str=<<<EOF
      亲爱的{$username}您好~!感谢您注册我们网站<br/>
      请点击此链接激活帐号即可登陆!<br/>
      <a href="{$url}">{$urlencode}</a>
      <br/>
      如果点此链接无反映,可以将其复制到浏览器中来执行,链接的有效时间为24小时。    
EOF;
      $message->setBody("{$str}",'text/html','utf-8');

发送邮件

try{
   if($mailer->send($message)){
      echo "恭喜您{$username}注册成功,请到邮箱激活之后登陆<br/>";
      echo '3秒钟后跳转到登陆页面';
      echo '<meta http-equiv="refresh" content="3;url=index.php#tologin"/>';
   }else{
      $PdoMySQL->delete($table,'id='.$lastInsertId);
      echo '注册失败,请重新注册';
      echo '3秒钟后跳转到注册页面';
      echo '<meta http-equiv="refresh" content="3;url=index.php#toregister"/>';
   }
}catch(Swift_ConnectionException $e){
   echo '邮件发送错误'.$e->getMessage();
}

完成激活操作

}elseif($act==='active'){
   $token=addslashes($_GET['token']);
   $row=$PdoMySQL->find($table,"token='{$token}' AND status=0",array('id','token_exptime'));
   $now=time();
   if($now>$row['token_exptime']){
      echo '激活时间过期,请重新登陆激活';
   }else{
      $res=$PdoMySQL->update(array('status'=>1),$table,'id='.$row['id']);
      if($res){
         echo '激活成功,3秒钟后跳转到登陆页面';
         echo '<meta http-equiv="refresh" content="3;url=index.php#tologin"/>';
      }else{
         echo '激活失败,请重新激活';
         echo '<meta http-equiv="refresh" content="3;url=index.php"/>';
      }
   }

完成登录操作

}elseif($act==='login'){
   //完成登陆的功能
   $row=$PdoMySQL->find($table,"username='{$username}' AND password='{$password}'",'status');
   if($row['status']==0){
      echo '请先激活在登陆';
      echo '<meta http-equiv="refresh" content="3;url=index.php#tologin"/>';
   }else{
      echo '登陆成功,3秒钟后跳转到首页';
      echo '<meta http-equiv="refresh" content="3;url=http://www.imooc.com"/>';
   }

注意,你的发件邮箱请务必开启该服务,否则可能发送失败

以QQ邮箱为例,路径在邮箱设置->账号下

PHP复习_PDO实战之实现注册邮件发送相关推荐

  1. 网站注册邮件发送功能实现

    摘抄自狂神笔记 电子邮件 要在网络上实现邮件功能,必须要有专门的邮件服务器. 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中. SMTP服 ...

  2. (Java每日一谈:第五日——破除抑郁症的小窗户)实战小技巧:邮件发送

    今天小编会给大家讲解几个比较实用的编程常用技巧,邮件发送就是其中的一个,邮件发送的使用场景在日常的生活中也是非常常用,对于这一块的知识点不是很难以理解,大家可以学习完了之后,得到需要的时候,再找一找相 ...

  3. 【狂神说】JavaWeb笔记整理 | SMBMS项目 | 文件上传和邮件发送

    目录 JavaWeb 1.基本概念 1.1 概念 1.2 web应用程序: 1.3 静态web 1.4 动态web 2.web服务器 2.1 技术讲解 2.2 web 服务器 3. Tomcat 3. ...

  4. Servlet邮件发送

    邮件发送 发送邮件:SMTP 协议 接收邮件:POP3 协议 需要准备 JavaMail API 和 Java Activation Framework mail.jar 和 activation.j ...

  5. 【node】nodemailer 实现邮件发送

    nodemailer 邮件发送功能可用于用户注册等业务场景,高效.低成本. 我们这里使用腾讯的邮件服务.登录QQ邮箱,点击设置-帐户,开启SMTP服务并生成制授权码,复制授权码,后面要用.这个授权码要 ...

  6. python进行邮件发送以及django中利用邮件注册激活功能

    协议 SMTP协议 SMTP的全称是"Simple Mail Transfer Protocol",即简单邮件传输协议.它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮 ...

  7. JavaWeb--邮件发送(web注册邮件,纯文本邮件,带图片邮件,带附件邮件)

    邮件服务器与传输协议 发送邮件:SMTP协议 通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器). 接收邮件:POP3协议 通常把处理用户pop3请求(邮件接收请 ...

  8. 【微信测试号实战——01】注册一个属于你自己的微信测试号

    系列文章目录 微信测试号系列文章,快速进入 [微信测试号实战--01]注册一个属于你自己的微信测试号 文章目录 系列文章目录 前言 一.打开微信测试号官网 二.使用步骤 1.打开手机端微信 2.扫码登 ...

  9. Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例...

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 平阳歌舞新承宠,帘外春寒赐锦袍. ...

最新文章

  1. 天池供应链大赛来了!
  2. emacs命令速查 摘
  3. WCFAppFabric :异常消息: 内存入口检查失败
  4. 从 Word2Vec 到 BERT
  5. 20150309+Linux+LAMP安装-02
  6. node-red教程 7dashboard简介与输入型仪表板控件的使用
  7. python模块之configparser
  8. shell脚本面试题
  9. 【英语学习】【Daily English】U05 Places L03 I'd like to open an account
  10. SpringGateway与Zookeeper的Maven冲突
  11. 软件静态测试qac,Helix QAC — 软件静态测试工具
  12. web安全day40:最新版OpenVAS的安装配置
  13. HDU 1861 游船出租(模拟)
  14. linux上sh工具如何使用,怎样用 Bash 编程:语法和工具 | Linux 中国
  15. C++ File:\dd\vctools\vc7libs\..\..\afxwin1.inl Line24
  16. c语言城市交通灯优化,城市智能交通灯系毕业设计论文.doc
  17. 16QAM调制解调步骤
  18. matlab语法归纳
  19. 线性同余发生器与伪随机数
  20. cerebro 通过https访问ES docker集群

热门文章

  1. 普渡机器人服务北京大学
  2. mysql 把表名改成大写_mysql将表名改成大写的实例
  3. 微信代码错误:40164,加入白名单仍不起作用。
  4. 生最困难的不是努力,而是做出正确的抉择
  5. java写一个文件浏览器_【Java】 实现一个简单文件浏览器(2)
  6. 矩阵的Kronecker积的相关结论
  7. useCallback包裹函数,但是使用到的外部变量一直是最开始的值
  8. 通信原理及系统系列33——无线信道(快衰落)
  9. 自动控制原理02 数学模型
  10. 36氪专访融云CEO董晗:8年企服,6年出海,现计划成为「沙特最大科技企业」