我用163和qq已经实现了
很狗血的是我头一天搞了半天总是发送失败,说连接不上服务,第二天到公司一发送就成功了,不知道是不是应该重新访问以下项目或者重启服务
我推测是因为 .env文件修改了没有生效,我在子系统做的项目,所以需要结束项目重新运行命令:php artisan serve , 每次修改了 .env 文件都要
进入正题
需要注意的是:需要开启POP3和SMTP服务。开启方式如下:
网页登录邮箱,点击进入设置就会看到
当开启成功会生成密钥,这个东西会在配置中用到(注意这个授权码只能看一次,以后要看只能修改,先拿小本本记下来)
给出.env中的配置
MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=25
MAIL_USERNAME=xxx@163.com
MAIL_PASSWORD=授权码
MAIL_ENCRYPTION=
MAIL_FROM_ADDRESS=xxx@163.com
MAIL_FROM_NAME=
这些是在 config 中mail.php 用到的
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命令路径。
下边是控制器代码:
首先引入类
use Mail;
使用方法:
$res = ['email'=>$data['email'],'name'=>$data['email'],'token'=>$token];
Mail::send('emails.test',$res,function($message)use($res) {
$to = $res['email'];
$message ->to($to)->subject('欢迎注册本网站,请尽快激活您的账号!');
});
在resources/view中新建末班文件 emails/test.blade.php
{{$name}}你好,这是一封测试文件。
目前就只是发送普通文本携带变量,其他的比如附件当然也可以。