【2025年4月】PHP8 SendGridでメール送信( ライブラリ未使用)

2025年4月現在、SendGridのPHP公式ライブラリがPHP8環境で動作しなかったため、ライブラリを使用せず直接APIを叩いて送信しました。

目次

SendGrid公式PHPライブラリで送信できない?

以下の環境で、エラーがでてメール送信ができませんでした。

・PHP 8.3.10
sendgrid/sengrid-php 8.1.11

いちおうエラー原因らしき個所はわかったのですが、ライブラリのソースを編集するのではなく直接 SendGrid Web API V3を叩く方針としましたので、動作したコードをご紹介します。

公式PHPライブラリ

https://sendgrid.kke.co.jp/docs/Integrate/Code_Examples/v3_Mail/php.html

curlで直接API通信をする

ソースコード

処理の説明は、コード上のコメントをご覧ください。

PHP
//APIキーの設定
define('SENDGRID_API_KEY','SG.XXXXXXXXXX');

// エンドポイントを設定
$url = 'https://api.sendgrid.com/v3/mail/send';

// ヘッダーに認証情報を含める
$header = [
	'Authorization: Bearer '.SENDGRID_API_KEY,
	'Content-Type: application/json',
];

//送信データ作成
$data = array();
$data['personalizations'] = array();
$personal = array();
$personal['to'] = array();
//宛先は複数設定可能
$to = array();
$to['email'] = 'to@mail.address';
$to['name'] = '宛先の名前';
$personal['to'][] = $to;
$personal['subject'] = 'メール件名';
$data['personalizations'][] = $personal;
$data['from'] = array();
//送信者認証をされたメールアドレスでないとエラーとなります
$data['from']['email'] = 'from@mail.address';
$data['from']['name'] = '送信者の名前';
$data['content'] = array();
$content = array();
$content['type'] = 'text/plain';
$content['value'] = "メール本文\nメール本文\nメール本文";
$data['content'][] = $content;

// ここからcurl通信開始
$curl = curl_init($url);

// リクエストのオプション
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
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);

// curl通信
$response_raw = curl_exec($curl);

// curl終了
curl_close($curl);

//レスポンス解析
$response_array = explode("\r\n", $response_raw, 2);
$response_http = explode(' ',$response_array[0]);
$response_status = (int)$response_http[1];
$response_header = iconv_mime_decode_headers($response_array[1]);

if(200 <= $response_status && $response_status < 300){
    //ステータスコード200番台なら成功
    echo '送信成功';
}else{
    echo '送信失敗 ステータスコード:'.$response_status;
}

V3 Mail Send API 公式ドキュメント(日本語)

https://sendgrid.kke.co.jp/docs/API_Reference/Web_API_v3/Mail/index.html

送信者認証について

ステータスコード一覧

https://sendgrid.kke.co.jp/docs/API_Reference/Web_API_v3/Mail/errors.html

以上となります。