jorisvaesen/cakephp-sendgrid

Sendgrid wrapper for CakePHP

Installs: 257

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

Type:cakephp-plugin

0.3.3 2019-09-14 18:47 UTC

This package is auto-updated.

Last update: 2024-04-15 05:07:50 UTC


README

Installation

You can install this plugin into your CakePHP application using composer.

The recommended way to install composer packages is:

composer require jorisvaesen/cakephp-sendgrid

Load the plugin in config/bootstrap.php:

Plugin::load('JorisVaesen/Sendgrid', ['bootstrap' => true]);

Configuration

Method 1 (using ENV)

The plugin loads from dotenv the following:

SENDGRID_API_KEY="your_sendgrid_api_key"

Method 2 (using app.php)

Set the sendgrid api key in app.php:

'Sendgrid' => [
    'apiKey' => 'your_sendgrid_api_key',
],

Method 3 (hardcoded)

Add in your app.php file, in the EmailTransport item

'EmailTransport' => [
        ...
        'sendgrid' => [
            'className' => '\JorisVaesen\Sendgrid\Mailer\Transport\SendgridTransport',
            'password' => 'your_sendgrid_api_key',
        ],
        ...
    ],

To use it by default, set your default transport to sendgrid in app.php:

'Email' => [
    'default' => [
        'transport' => 'sendgrid',
    ],
],

Callback

If you want to use Sendgrid API methods which do not have a CakePHP equivalent, you can make use of the callback configuration:

'EmailTransport' => [
        ...
        'sendgrid' => [
            'className' => '\JorisVaesen\Sendgrid\Mailer\Transport\SendgridTransport',
            'password' => 'your_sendgrid_api_key',
            'callback' => function (\SendGrid\Mail\Mail $sendgridEmail, \Cake\Mailer\Email $cakephpEmail) {
                if ($cakephpEmail->getSubject() === 'If you open this mail...') {
                    $sendgridEmail->setOpenTracking(true);
                }
                
                return $sendgridEmail;
            },
        ],
        ...
    ],

Usage

$email = new Email('default');
$email->viewBuilder()->setLayout('default);
/* @var \Sendgrid\Response $response */
$response = $email
    ->setProfile('sendgrid')    // optional when you've set sendgrid as the default transport in configuration
    ->setEmailFormat('html')
    ->setSender('noreply@example.com', 'Example sender')
    ->setFrom('from@example.com', 'Example From')
    ->setReplyTo('replyTo@example.com', 'Example ReplyTo')
    ->setTo('to@example.com', 'Example To')
    ->setSubject('Sample email')
    ->setTemplate('default')
    ->setViewVars([])
    ->send();
    
return $response->statusCode() === 202;

www.datrix.be