使用Laravel的Email API发送邮件给注册用户,这里使用的是mailtrap。
发送邮件
注:发送邮件这个功能在Laravel的各个版本中的使用方法不同,这里介绍的是5.1版本的方法,5.4以后的版本可以直接使用php artisan make:mail mailObject来创建。
首先需要在.env中配置mail的环境,这里使用的是Laracasts中推荐的mailtrap,还有其他的方法,可以参考手册:Laravel——Mail。
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
上面的是env文件中关于mail的配置信息,使用了smtp服务,主机是mailtrap,所以首先到mailtrap中注册一个账号,可以使用Github来授权登录,之后会有50条免费信息的发送数量,进入Demo inbox的SMTP Setting中,可以看到邮箱的配置信息。
然后根据上面的配置信息,更改.env中相应的信息即可:
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=927f5a9b452b16
MAIL_PASSWORD=f56e934796663d
MAIL_ENCRYPTION=tls
配置好文件之后,创建一个email的视图:view/emails/welcome.blade.php,然后在里面随便写点HTML的内容,到Tinker中测试一下:
>>> $user = App\User::first()
=> App\User {#670
id: 1,
name: "Gijera",
email: "Gijera@example.com",
created_at: "2017-12-08 05:20:05",
updated_at: "2017-12-08 05:51:58",
}
>>> Mail::send('emails.welcome', ['user' => $user], function($m)use($user){
... $m->from('blog@example.com', 'Blog');
... $m->to($user->email, $user->name)->subject('Your Blog!');
... });
=> 1
首先将User中的第一条用户信息赋给$user,然后使用Mail::send()来发送相应的邮件,最后返回了1代表发送成功,之后可以在mailtrap中看到刚刚发送的邮件。
最后可以把这段代码添加到RegistrationController的store方法中,因为是在这里创建用户的,在创建用户后可以发送一条邮件来表示欢迎或是其他信息,当然由于上面的代码中传递了$user参数,所以可以在视图中显示参数。
如果在发送邮件的过程中遇到了错误Swift_TransportException with message ‘Connection could not be established with host mailtrap.io [php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known #0]’,emmmmmmm…这是因为网络原因,多试几次就行了。