解:本教程中使用到的是SMTP(Simple Message Transfer Protocol)简单邮件传输协议,通常理解为邮件发送服务器。实验使用邮箱的163,QQ邮箱。
首先注册163邮箱
注册完需要 =>设置=>开启163邮箱的POP3和SMTP服务。=>设置授权码(配置要用到)
laravel配置
修改邮件发送配置。laravel4.2 在 app/config/mail.php,laravel 5上 在config/mail.php,修改以下配置:
`'driver' => 'smtp',
'host' => 'smtp.163.com',
'port' => 25,
'from' => array('address' => '账号@163.com', 'name' => '发件人名称'),
'username' => '账号@163.com', // 注意,这里必须和上一行配置里面的邮件地址一致
'password' => '授权码',`
配置说明:
1.driver:用于配置默认的邮件发送驱动,Laravel支持多种邮件驱动方式,包括smtp、Mailgun、
Maildrill、Amazon SES、mail和sendmail,Mailgun和Amazon SES都是收费的Maildrill目
前不支持中国区用户,这三个都是第三方邮件服务。mail驱动使用PHP提供的mail函数发送,sendmail
驱动通过Sendmail/Postfix(Linux)提供的命令发送邮件,smtp驱动通过支持ESMTP的SMTP发
送邮件。就目前状况来看,使用smtp是最明智的选择,mail不安全,sendmail需要安装配置Sendmail/Postfix,
其他要么付费要么不能用。
2.host:是邮箱所在主机,比如我们使用163邮箱,对应值是smtp.163.com,使用QQ邮箱的话,对应值是smtp.qq.com。
3.port:用于配置邮箱发送服务端口号,比如一般默认值是25,但如果设置SMTP使用SSL加密,该值为465。
4.from:配置项包含address和name,前者表示发送邮箱,后者表示发送邮件使用的用户名。
5.encryption:表示加密类型,可以设置为null表示不使用任何加密,也可以设置为tls或ssl。
6.username:表示邮箱账号,比如yaojinbu@163.com
7.password:表示上述邮箱登录对应登录密码。注意QQ邮箱的话应该开启POP3|SMTP服务时给的密钥。
8.sendmail:是在设置driver为sendmail时使用,用于指定sendmail命令路径
模板 views/emails/test.blade.php:
{{$name}} 你好,这是一封测试文件。//发送的邮件内容
生成控制器
php artisan make::controller MailController;(也可以手动创建)
use Illuminate \Support \Facades \Mail ;
class MailController {
public function send ()
{
$name = '收件人称呼' ;
$flag = Mail::send('emails.test' ,['name' =>$name ],function ($message ) {
$to = '*****@qq.com' ;
$message ->to($to )->subject('邮件测试' );
});
}
}
发送纯文本邮件
Mail::raw ('你好' , function ($message ) {
$to = '******@qq.com' ;
$message -> to ($to )-> subject('纯文本信息邮件测试' );
});
邮件中发送附件
//网络图片
# test.blade.php
{{$name }} 你好,这是一封测试文件。
<br >
<img src =' {{$message- >embed ($image )}} ' >
public function send ()
{
$name = 'asdf' ;
$image = 'http://11632a6.jpg' ;
$flag = Mail::send('emails.test' ,['name' =>$name ,'image' =>$image ],function ($message ) {
$to = '******@qq.com' ;
$message ->to($to )->subject('主题' );
});
}
//本地图片引用需要使用到Storage类,模板方法略有不同,在Storage/images文件夹中有一张图片。
//embedData()两个参数,第一个为图片,第二个为自定义图片名称。
<img src =" {{$message- >embedData ($image ,'我的自拍照.jpg ')}} " >
public function send () {
$image = Storage::get('images/1.jpg' );
$flag = Mail::send('emails.test' ,['image' =>$image ],function ($message ) {
$to = '********@qq.com' ;
$message ->to($to )->subject('[本地图片测试]' );
});
}
邮件附件
public function sendFile () {
$name = 'sdf' ;
$flag = Mail::send('emails.test' ,['name' =>$name ],function ($message ) {
$to = '******@qq.com' ;
$message ->to($to )->subject('邮件主题' );
$attachment = storage_path('app/files/test.txt' );
$message ->attach($attachment ,['as' =>'中文文档.txt' ]);
});
}
错误解决
1.Expected response code 250 but got code "553", with message "553 Mail from must equal authorized user
邮件服务器要求from和username必须一致;
2.文件名乱码的话:$message->attach($attachment,['as'=>"=?UTF-8?B?".base64_encode('中文文档')."?=.txt"]);