SendGridを使ってメールサーバを構築せずにPHPからメールを送信する方法
2021/08/17
メールサーバを構築せずに独自ドメインのメールアドレスにてメール送信を行いたい。過去にGmailのSTPTサーバ経由でメール送信する方法をメモしたが、この方法だと送信元メールアドレスは当然Gmailアドレスになる。何か方法は無いか調べてみるとSendGridというサービスを利用する方法が簡単に実装できた。以下に対応方法をメモ。
SendGrid
SendGridとは
SendGridとはクラウドベースのメール配信サービスであり、メールサーバを構築せずともAPIやSMTP経由でメール送信が可能。また、迷惑メール判定されにくいっぽい(過去に通常のメール送信だと迷惑メール判定されたのにSendGrid経由だと迷惑メール判定されないというケースがあった)。
尚、12,000通/月までは無料で利用できる。
アカウント登録
新規登録ページよりアカウントを登録する。尚、アカウントは即時発行ではなく、翌営業日等に発行される点に注意する。
SMTP用パスワードの発行
ログインページよりログインし、左側のメニューの「Email API→Integration Guide→SMTP RelayのChoose」に進み「API Key Name」を入力し、「Create Key」をクリックするとパスワードが発行される。
尚、ホストは「smtp.sendgrid.net」、ユーザ名は「apikey」になる。
PHPMailerの準備
以下よりダウンロードし展開する。
https://github.com/PHPMailer/PHPMailer
srcディレクトリ内の「PHPMailer.php」「Exception.php」「SMTP.php」をアップロードする。もしくはsrcディレクトリごとアップロードでも良い。
ソースコード
<?php require('./PHPMailer.php'); require('./Exception.php'); require('./SMTP.php'); // 文字エンコードを指定 mb_language('uni'); mb_internal_encoding('UTF-8'); // インスタンスを生成(true指定で例外を有効化) $mail = new PHPMailer\PHPMailer\PHPMailer(); try { $host = 'smtp.sendgrid.net'; $username = 'apikey'; $password = 'パスワード'; //差出人 $from = '差出人のメールアドレス'; $fromname = '差出人名'; //宛先 $to = '宛先のメールアドレス'; $toname = $to; //件名・本文 $subject = 'subject'; $body = 'body'; //メール設定 $mail->SMTPDebug = 0; //デバッグ用 $mail->isSMTP(); $mail->SMTPAuth = true; $mail->Host = $host; $mail->Username = $username; $mail->Password = $password; $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->CharSet = "utf-8"; $mail->Encoding = "base64"; $mail->setFrom($from, $fromname); $mail->addAddress($to, $toname); $mail->Subject = $subject; $mail->Body = $body; //メール送信 $mail->send(); //送信成功時の処理 } catch (Exception $e) { //送信失敗時の処理 }
各種メールアドレスやパスワード部分は適宜変更する。尚、送信元アドレスであるドメインのSPFレコードやMXレコードを設定しなくても送信が確認できた。
所感
私的にサーバ関連の中でもメールサーバに関しては苦手意識があった為、今回のような送信方法を知れたのは良かった。
関連記事
-
-
Laravelのディレクトリ構造・バージョン・DB接続情報確認
Laravelで作成されているシステムに携わることがあった。しかしながら当方La ...
-
-
PHPで指定日から曜日を割り出す
曜日ってどうやって割り出すの? となったのでメモ。 ■リファレンス http:/ ...
-
-
独自タグを変換して画像を表示させる
やりたい事↓↓ ----- {$IMG1}~{$IMG5}までの独自タグがある。 ...
-
-
PHPの配列をファイルに保存してPHPやJSで呼び出す
PHPの配列をファイルとして保存し、別のページからPHPやJavaScriptで ...
-
-
pdfからjpg/jpegへ出来るだけ劣化させずに変換
やりたかった事はpdfからjpg画像への変換。 imagemagick使えばすぐ ...
-
-
PHPにて自動でファイルを呼び出す(auto_prepend_file)
設定ファイルとかをinclude('config.php')みたいに、 いちいち ...
-
-
PHPでExcelシートを出力する方法(PhpSpreadsheet)
PHPでエクセルシートを出力させたい。以前はPHPExcelを利用していたが現在 ...
-
-
同一サーバの別ディレクトリでセッション振り分け
同じサーバ内にmemberとownerの別ディレクトリがあり、それぞれにsess ...
-
-
PHPでログファイルから指定行数表示させる
エラーログを最新分から指定行数表示させる プログラムがあって、どういった作りにな ...
-
-
curlでPOSTデータ送信
ここで使ったcurlだけど補足とか諸々。 ■curlでPOST 並列処理する際に ...