アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

sendgridのAPIv3でメール送信(PHP・ライブラリ不使用)

v3 Mail Send API概要 - ドキュメント | SendGrid
リファレンスはこちら。

普通に送信

あるアドレスからあるアドレスへ、プレーンテキストなメールを一通送信。
これがベースの書き方。

<?
function mailtest()
{
    $url = 'https://api.sendgrid.com/v3/mail/send'; // ★APIのURL
    $apikey = '********'; // ★発行したAPIkey
    $mail_to = 'hoge@example.com'; // ★送信先メールアドレス
    $mail_from = 'fuga@example.com'; // ★送信元メールアドレス
    $subject = 'subject'; // ★件名
    $body = 'body'; // ★本文
    $body_type = 'text/plain';

    $header = array(
        'Authorization: Bearer '.$apikey,
        'Content-Type: application/json',
    );
    $content = array(
        'personalizations' => array(
            array(
                'to' => array(
                    array(
                        'email' => $mail_to,
                    ),
                ),
                'subject' => $subject,
            ),
        ),
        'from' => array(
            'email' => $mail_from,
        ),
        'content' => array(
            array(
                'type' => $body_type,
                'value' => $body,
            ),
        ),
    );

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($content));
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HEADER, true);
    $response = curl_exec($curl);
    curl_close($curl);
}

HTMLメールにする

$body_type = 'text/plain';

$body_type = 'text/html';

に変更。以上。

もっと丁寧にやるなら、

'content' => array(
    array(
        'type' => $body_type,
        'value' => $body,
    ),
),

'content' => array(
    array(
        'type' => 'text/plain',
        'value' => 'プレーンテキスト用本文',
    ),
    array(
        'type' => 'text/html',
        'value' => 'HTML用本文',
    ),
),

こうやって分ける。
(text/htmlで受信できないメーラーへの配慮)

ファイルを添付する

content等と同じ階層に以下をくっつける。

'attachments' => array(
    array(
        'content' => base64_encode(file_get_contents('ファイルパス')),
        'type' => "application/text", //非必須
        'filename' => "test.txt",
    ),
),

cc,bcc

toと同じ階層に以下をくっつける。

<追記 20200916>
to,cc,bccにまたがって同じアドレスが含まれてるとエラーになるので、
アプリ側で重複をクリアしておく必要がある。
</追記>

'cc' => array(
    array(
        'email' => 'cc@example.com',
    ),
),
'bcc' => array(
    array(
        'email' => bcc@example.com',
    ),
),