sprintcube/cakephp-sendgrid

CakePHP 4 的 SendGrid 插件 - 使用 SendGrid API 发送电子邮件

安装数: 28,790

依赖项: 0

建议者: 0

安全性: 0

星标: 5

关注者: 4

分支: 6

开放问题: 5

类型:cakephp-plugin

4.0.1 2022-04-20 05:40 UTC

This package is auto-updated.

Last update: 2024-09-04 07:11:30 UTC


README

CI codecov Software License Latest Stable Version Total Downloads

本插件提供使用 SendGrid 进行电子邮件发送的功能。

此分支适用于 CakePHP 4.0 及以上版本。对于 CakePHP 3,请使用 cake-3.x 分支。

需求

此插件有以下需求

  • CakePHP 4.0 或更高版本。
  • PHP 7.2 或更高版本。

安装

您可以使用 composer 将此插件安装到您的 CakePHP 应用程序中。

composer require sprintcube/cakephp-sendgrid

安装后,加载插件

Plugin::load('SendGrid');

或者,您可以使用 shell 命令来加载插件

$ bin/cake plugin load SendGrid

配置

在 app.php 中将您的 SendGrid API 密钥设置在 EmailTransport 设置中

'EmailTransport' => [
...
  'sendgrid' => [
      'className' => 'SendGrid.SendGrid',
      'apiKey' => 'your-api-key' // your api key
  ]
]

并在 Email 设置中创建新的交付配置文件。

'Email' => [
    'default' => [
        'transport' => 'default',
        'from' => 'you@localhost',
        //'charset' => 'utf-8',
        //'headerCharset' => 'utf-8',
    ],
    'sendgrid' => [
        'transport' => 'sendgrid'
    ]
]

使用方法

现在,您可以使用 CakePHP 的 Email 简单地通过 SendGrid 发送电子邮件。

$email = new SendGridMailer();
$email->setFrom(['you@yourdomain.com' => 'CakePHP SendGrid'])
    ->setTo('foo@example.com.com')
    ->addTo('bar@example.com')
    ->addCc('john@example.com')
    ->setSubject('Email from CakePHP SendGrid plugin')
    ->deliver('Message from CakePHP SendGrid plugin');

就这么多。

高级使用

您还可以使用一些更多选项通过 SendGrid API 发送电子邮件。为此,只需在发送电子邮件之前调用相应的方法即可。

自定义头

您可以通过传递自己的头信息。它必须以 "X-" 前缀。像使用默认的 Email::setHeaders 方法一样使用它,

$email = new SendGridMailer();
$email->setFrom(['you@yourdomain.com' => 'CakePHP SendGrid'])
    ->setTo('foo@example.com.com')
    ->setHeaders([
        'X-Custom' => 'headervalue',
        'X-MyHeader' => 'myvalue'
    ])
    ->setSubject('Email from CakePHP SendGrid plugin')
    ->deliver('Message from CakePHP SendGrid plugin');

在发送请求时,将从头部名称中删除 X-,例如,X-MyHeader 将变为 MyHeader

附件

使用 Email::setAttachments 方法设置您的附件。

$email = new SendGridMailer();
$email->setFrom(['you@yourdomain.com' => 'CakePHP SendGrid'])
    ->setTo('foo@example.com.com')
    ->setSubject('Email from CakePHP SendGrid plugin')
    ->setAttachments([
        'cake_icon1.png' => Configure::read('App.imageBaseUrl') . 'cake.icon.png',
        'cake_icon2.png' => ['file' => Configure::read('App.imageBaseUrl') . 'cake.icon.png'],
        WWW_ROOT . 'favicon.ico'
    ])
    ->deliver('Message from CakePHP SendGrid plugin');

要发送内联附件,在设置附件时使用 contentId 参数。

模板

您可以使用在 SendGrid 后端创建的模板。通过使用他们的 API 或从 URL 获取模板 ID。使用 setTemplate 方法设置模板 ID。

$email = new SendGridMailer();
$email->setTo('foo@example.com.com')
    ->setTemplate('d-xxxxxx')
    ->deliver();

计划

您可以将电子邮件计划在未来的日期发送。根据 SendGrid 文档,您可以将时间设置最多 72 小时。您需要传递一个 Unix 时间戳值。

$email = new SendGridMailer();
$email->setTo('foo@example.com.com')
    ->setSendAt(1649500630)
    ->deliver();

报告问题

如果您对此插件或任何错误有问题,请在 GitHub 上提交问题。