swift邮件发送【推荐】

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/