yii2中官方为了解决邮件发送问题,提供了swiftMailer扩展。
我们先来了解下什么是swiftMailer。
Swift是一个完全采用面向对象编码用于发送e-mail的PHP函数库。Swift不依赖于PHP的mail()函数,因为用它发送多封邮件时会占用较高的服务器资源。Swift通过直接连到SMTP服务器或MTA能够更快,更高效地发送邮件。
1、配置
<?php
return [
'components' => [
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
// send all mails to a file by default. You have to set
// 'useFileTransport' to false and configure a transport
// for the mailer to send real emails.
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.126.com', //每种邮箱的host配置不一样
'username' => '****@126.com',
'password' => '****', //授权码
'port' => '25',
'encryption' => 'tls',
],
'messageConfig'=>[
'charset'=>'UTF-8',
'from'=>['****@126.com'=>'Buernnm']
],
],
],
];
2、简单使用
$mail= Yii::$app->mailer->compose();
$mail->setTo('****@126.com'); //要发送给那个人的邮箱
$mail->setSubject("邮件主题"); //邮件主题
$mail->setTextBody('测试'); //发布纯文字文本
var_dump($mail->send());
3、多邮件发送
$users = ['@qq.com', '@126.com','@163.com'];
$messages = [];
foreach ($users as $user)
{
$messages[] = Yii::$app->mailer->compose()
->setTo($user)
->setSubject('测试主题')
->setHtmlBody('测试内容');
}
Yii::$app->mailer->sendMultiple($messages);
4、发送带附件的邮件(简单举例发送邮件并以附件形式带上一张图片和一个txt文本)
$message = Yii::$app->mailer->compose();
$message->attach('图片的地址');
$message->attachContent('Content', ['fileName' => 'name.txt', 'contentType' => 'text/plain']);
$message->setTo('***@126.com'); 收件人的邮箱
$message->setSubject('CSDN--不知于代码');
$message->send();
5、测试邮件发送
有小伙伴急躁了,天哪!没道理啊、不应该啊,下面我们来看看怎么进行邮件测试。
我们在common的配置文件添加的mail配置项中,
useFileTransport 为false的时候,我们会发送邮件直接到你的服务器,
useFileTransport为true的时候,邮件真实发送到你的邮箱,但是会以文件的形式保存在默认目录@runtime/mail。该路径可通过配置fileTransportPath进行配置
还有就是发送邮件成功如果收件箱内没有看到邮件,那么就去垃圾箱里去看看,因为你发送的内容可能会被当成垃圾邮件,