Laravel 发送邮件
简单使用
配置
以阿里企业邮为例,修改.env文件
MAIL_MAILER=smtp
MAIL_HOST=smtp.mxhichina.com
MAIL_PORT=25
MAIL_USERNAME=notifications-noreply@a.com
MAIL_PASSWORD=123
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=notifications-noreply@a.com
MAIL_FROM_NAME=notifications-noreply
关于
MAIL_ENCRYPTION参数,我查看了源码,它的值只有tls和其他,tls即ssl加密,源码如下:
    public function setEncryption($encryption)
    {
        $encryption = strtolower($encryption ?? '');
        if ('tls' == $encryption) {
            $this->params['protocol'] = 'tcp';
            $this->params['tls'] = true;
        } else {
            $this->params['protocol'] = $encryption;
            $this->params['tls'] = false;
        }
        return $this;
    }
发送邮件
发送文本邮件
        Mail::raw('邮件内容。。', function (\Illuminate\Mail\Message $message){
//            $message->to('1@qq.com');//无主题
            $message->subject('测试一下。。')->to('1@qq.com');
        });
发送富文本邮件
        Mail::send('emails.test',['name'=>'张三'],function (\Illuminate\Mail\Message $message){
            $message->subject('测试一下。。')->to('1@qq.com');
        })
视图文件 resources/views/emails/test.blade.php
生成Mailables
Laravel 更推荐使用mailable类来发送邮件
创建RegisterSuccess
root@php-fpm:/var/www/laravel-demo# php artisan make:mail RegisterSuccess
如上,生成了一个mailable 类app/Mail/RegisterSuccess.php,请注意所有可邮寄类的配置都是在 build 方法中完成的。
配置视图
    public function build()
    {
        return $this->view('emails.register_success');
    }
视图文件resources/views/emails/register_success.blade.php
纯文本邮件
你可以使用 text 方法来定义一个纯文本格式的邮件。和 view 方法一样, 该 text 方法接受一个模板名,模板名指定了在渲染邮件内容时你想使用的模板。你既可以定义纯文本格式亦可定义 HTML 格式:
/**
 * 构建消息.
 *
 * @return $this
 */
public function build()
{
    return $this->view('emails.register_success')
                ->text('emails.register_success_plain');
}
视图数据
有两种方法传递数据到视图中。
第一种,通过 Public 属性
你在 mailable 类中定义的所有 public 的属性都将自动传递到视图中。
    public User $user;
    public function __construct(User $user)
    {
        //
        $this->user=$user;
    }
    public function build()
    {
        return $this->view('emails.register_success')->with(['name' => 'abc']);
    }
//视图文件
<body>
test2..<?=$name?>
--
<?=$user->name?>
</body>
</html>
第二种,通过 with 方法
    public function build()
    {
        return $this->view('emails.register_success')->with(['name' => 'abc']);
    }
Markdown 格式邮件
Markdown 格式邮件允许你可以使用 mailable 中的预构建模板和 邮件通知 组件。由于消息是用 Markdown 编写,Laravel 能够渲染出美观的、响应式的 HTML 模板消息,同时还能自动生成纯文本副本。
生成 Markdown 邮件
root@php-fpm:/var/www/laravel-demo# php artisan make:mail RegisterSuccess2 --markdown=emails.register_success2
//
    public function build()
    {
        return $this->markdown('mail.register-success2', [
                    'url' => $this->orderUrl,
                ]);
    }
Markdown mailable 类整合了 Markdown 语法和 Blade 组件,让你能够非常方便的使用 Laravel 预置的 UI 组件来构建邮件消息
常用组件:按钮组件,面板组件,表格组件,当然你也可以自定义组件
可以将所有 Markdown 邮件组件导出到自己的应用,用作自定义组件的模板。若要导出组件,使用 laravel-mail 资产标签的 vendor:publish Artisan 命令:
php artisan vendor:publish --tag=laravel-mail
发送邮件
若要发送邮件,使用 Mail 门面 的方法。该 to 方法接受 邮件地址、用户实例或用户集合。如果传递一个对象或者对象集合,mailer 在设置收件人时将自动使用它们的 email 和 name 属性,因此请确保对象的这些属性可用。一旦指定了收件人,就可以将 mailable 类实例传递给 send 方法:
$user=User::query()->first();
//Mail::to('1@qq.com')->send(new RegisterSuccess($user));
Mail::to($user)->send(new RegisterSuccess($user));
渲染邮件
有时您可能希望捕获邮件的 HTML 内容而不发送它。为此,可以调用邮件类的 render 方法。此方法将以字符串形式返回邮件类的渲染内容:
use App\Mail\InvoicePaid;
use App\Models\Invoice;
$invoice = Invoice::find(1);
return (new InvoicePaid($invoice))->render();
在浏览器中预览邮件
Route::get('/mailable', function () {
    $invoice = App\Models\Invoice::find(1);
    return new App\Mail\InvoicePaid($invoice);
});
