所以实际生产中没有办法使用默认驱动, 国内最常用的SendCloud
也可以使用 naux/sendcloud 实现无缝使用laravel Mail 语法, 但是需要注意版本:
注意:
1. Laravel 5.5 以下请使用 1.1.3 版本
2. 部署:
composer require naux/sendcloud
config/app.php 添加 \Naux\Mail\SendCloudServiceProvider::class,
.env
MAIL_DRIVER=sendcloud
SEND_CLOUD_USER= # 创建的 api_user
SEND_CLOUD_KEY= # 分配的 api_key
下面是Api操作模板的实例
注意: 1. xsmtpapi 是X-SMTP扩展字段, base64编码封装过的json字符串, 但是json条用的时候 传入json字符串就可以了
2. X-SMTP 每一个key对用的是数组(在json_encode之前)
<?php namespace App\SendCloud; use App\User; class SendCloud { // 模板发送邮件Api private $url = 'http://api.sendcloud.net/apiv2/mail/sendtemplate'; /** * @param User $user 用户对象 * @param string $template 模板名称 * @param string $subject 主题 * @param array $params 希望传递的变量 eg: ['%name%' => [$user->name], '%confirm_code%' => [$user->confirm_code]] * @return bool|string */ public function sendCloud(User $user, $template, $subject, $params = []) { // $params = ['%name%' => [$object_user->name], '%route%' => ['verify/' . $object_user->confirm_code]]; // (new SendCloud())->sendCloud($object_user, 'register', '用户激活账号邮件', $params); $x_smtpapi = json_encode(['to' => [$user->email], 'sub' => $params]); $param = [ 'apiUser' => env('SENDCLOUD_API_USER'), 'apiKey' => env('SENDCLOUD_API_KEY'), 'from' => env('SENDCLOUD_FORM'), 'fromName' => env('SENDCLOUD_FORM_NAME'), 'subject' => $subject, 'templateInvokeName' => $template, 'respEmailId' => 'true', 'xsmtpapi' => $x_smtpapi ]; $data = http_build_query($param); $options = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-Type: application/x-www-form-urlencoded', 'content' => $data )); $context = stream_context_create($options); return file_get_contents($this->url, false, $context); } }