laravel5.5 sendCloud 发送邮件(sendCloud Api and naux/sendcloud )

田俊爽
2023-12-01
laravel5.5 推荐邮件驱动 MailGun  SparkPost SES 都有限制(向一个邮箱发送邮件,必须要让邮件供应商和被发送人确认后才可以)

 所以实际生产中没有办法使用默认驱动, 国内最常用的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);
    }
}

 类似资料: