phpGrace 基于 swiftmailer 封装了 SMTP 模式的邮件发送工具类 ,推荐使用此类;比phpmailer效率更高更好用。请按照下面的步骤使用邮件发送功能。
1、安装swiftmailer
1.1 进入 /phpGrace/ 1.2 可以使用阿里云composer镜像为国内composer加速(此步骤也可忽略,切换后安装速度更快) 命令:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 1.3 执行 composer 命令 : composer require swiftmailer/swiftmailer
注意:需要PHP版本>=7.0.0
2、修改全局配置
// phpGrace/config.php // 邮件服务器配置 [ 基于 smtp 服务 ] 'mailConfig' => array( 'Host' => 'smtp.qq.com', //smtp 服务器地址 'Port' => 465, //smtp 端口 'FromName' => 'xxxxx', //发件人昵称 'Username' => 'xxxxx@***.com', //邮件账户 'Password' => '******' //对应密码或者授权码 ),
3、使用工具类发送邮件
3.1 页面引用 composer 对应的 autolaod.php ( 实现类库自动加载 );
require_once PG_IN.'vendor'.PG_DS.'autoload.php';
3.2 实例化工具类,并使用
下面是比较简单的使用演示,也可以自己根据自己业务需求封装或者调用
// 基础配置赋值 $swiftMail_host = sc('mailConfig','Host'); //读取配置的主机,并赋值 $siftMail_port = sc('mailConfig','Port'); //读取配置的端口,并赋值 $swiftMail_username = sc('mailConfig','Username'); //读取配置的邮件账户,并赋值 $swiftMail_uname = sc('mailConfig','FromName'); //读取配置的发件人昵称,并赋值 $swiftMail_password = sc('mailConfig','Password'); //读取配置的邮箱密码或者授权码,并赋值 $swiftMail_title = ''; // 发件的标题 $swiftMail_tomail = ''; // 收件人的邮箱 $swiftMail_body = ''; // 发件的邮箱内容 // 基本配置 $transport = (new Swift_SmtpTransport($swiftMail_host, $swiftMail_port,'ssl')) //smtp服务器和端口和ssl协议--ssl协议必须有不然布置到服务器会异常 ->setUsername($swiftMail_username) // 配置用户名 ->setPassword($swiftMail_password) // 配置密码或者授权码; // 创建mailer对象 $mailer = new Swift_Mailer($transport); // 创建消息对象 $message = (new Swift_Message($swiftMail_title)) // 发件标题 ->setFrom([$swiftMail_username => $swiftMail_uname])//自定义发件人的名称 ->setTo($swiftMail_tomail) //收件人邮箱 ->setBody($swiftMail_body,'text/html') // 发件内容; $result = $mailer->send($message); // 如果发送成功,会返回$result的值为1,即true。
4、高级应用
发送邮件时最关键的是创建消息体,在Swift Mailer中创建消息是通过使用库提供的各种MIME实体完成的,因此我们不需要花太多时间去了解如何处理MIME实体,只需拿来使用即可。
Swift Mailer提供了创建邮件消息的一系列方法,下面列举我们常用到的一些方法:
setSubject():邮件主题
setFrom():发件人地址,数组形式,可以是多个发件人
setTo():收件人地址,数组形式,可以是多个收件人
setBody():邮件内容
addPart():邮件内容指定输出类型,支持html内容输出
attach():添加附件
setCc():抄送,支持多个邮箱地址
setBcc():密送,支持多个邮箱地址
5、常见问题
5.1 报错信息:Fatal error: Uncaught Swift_TransportException: Failed to authenticate on SMTP server with username xxx... 很显然是邮件服务的账号密码不正确导致验证不能通过。
解决:目前163免费邮和QQ邮箱等提供给第三方客户端使用的SMTP/POP等服务需要设置一个授权码,具体可以到邮箱里设置。然后将正确的邮箱账号和授权码配置到Swift Mailer中即可。
5.2 报错信息:PHP Fatal error: Uncaught Swift_TransportException: Connection could not be established with host smtp.163.com 不能连接上邮件服务器。
解决:如果出现这个情况,建议尝试改成ssl协议和端口465。这样就避免放到公网服务器上就提示如上错误信息了
6、更多相关
更多有关Swift Mailer的使用请参考官网:https://swiftmailer.symfony.com/