使用阿里云的邮件推送(DirectMail)发送邮件。
需要 Laravel 5.5+ ,目前仅支持单一发信接口,后续会支持批量发信接口。
优点是非常简洁,没有引入阿里云全家桶,使用 laravel mailables 发送邮件。
邮件推送(DirectMail)是一款简单高效的电子邮件发送服务,它构建在可靠稳定的阿里云基础之上,帮助您快速、精准地实现事务邮件、通知邮件和批量邮件的发送。邮件推送历经两年双11考验,在发送速度、系统稳定性和到达率上表现优异;提供丰富的接口和灵活的使用方式,为企业和开发者解决邮件投递的难题,用户无需自建邮件服务器,开通服务即可享受阿里云优质的邮件服务,获得邮件投递的最佳实践。
DirectMail 官网: https://www.aliyun.com/product/directmail
在项目目录下执行
composer require wang_yan/directmail:dev-master修改 config/app.php,添加服务提供者
<?php'providers' => [
// 添加这行WangYan\DirectMail\DirectMailTransportProvider::class,
];在 .env 中配置你的密钥, 并修改邮件驱动为 directmail
MAIL_DRIVER=directmail
DIRECT_MAIL_KEY= # AccessKeyId
DIRECT_MAIL_SECRET= # AccessSecret详细用法请参考 laravel 文档:
使用演示:
<?php// routes\web.php
Route::get('/email', function(){
$data = [
'url' => 'https://laravel.com',
'name' => 'laravel'
];
Mail::send('emails.register', $data, function ($message) {
$message->from('us@example.com', 'Laravel');
$message->to('foo@example.com');
$message->subject('Hello World');
});
});演示怎样发送注册验证邮件,首先初始化
php artisan make:auth
php artisan migrate修改 RegisterController 控制器
<?php // app\Http\Controllers\Auth\RegisterController.php
use Illuminate\Support\Facades\Mail;
protected functioncreate(array$data)
{
$user = User::create([
'name'=>$data['name'],
'email'=>$data['email'],
// 数据库 users 表要有 token 字段
'token'=> str_random(30), 'password'=> bcrypt($data['password']),
]);$this->sendVerifyEmail($user);return$user;
}
private functionsendVerifyEmail($user)
{
$data = [
'name'=>$user->name,
'url'=> Route('email.verify',['token'=>$user->token])
];
Mail::send('emails.register', $data, function($message) use ($user) {
$message->from('service@dm.mail.wangyan.org', env('APP_NAME','Laravel'));$message->to($user->email);$message->subject('请验证您的 Email 地址');
});
}修改 User 模型
<?php // app\User.php
protected $fillable = [
'name', 'email', 'password','token'
];增加邮件模板
vim resources\views\emails\register.blade.php增加路由
<?php// routes\web.php
Route::get('/email/verify/{token}', 'EmailController@verify')->name('email.verify');增加控制器
php artisan make:controller EmailController编辑控制器
<?phpclass EmailController extends Controller
{
/** * @param $token * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector */functionverify($token)
{
$user = User::where('token',$token)->first();
if(is_null($user)){
returnredirect('/');
}
$user->is_active = 1;
$user->token= str_random(30);
$user->save();
returnredirect('/home');
}
}