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
以上となります。