PHPでMailgunを使ってherokuでメール送信する
herokuのphp環境でMailgunを使ってメール送信をしてみました。
ただし、日本語環境は入れなかったので、英語環境のみ。
まず、herokuにプラグインをインストールするためには、
クレジットカードの登録が必要なので、登録しておく。
(無料範囲内でのみでの利用でも必要)
Mailgunの場合は、無料だと300通/日
送れるよう。
で、インストールすると、環境変数にSMTP情報が格納されるので、
そちらを利用して、メールを送れるようになる。
(sendmail
関数は使えない。)
$_ENV['MAILGUN_SMTP_SERVER'] = host
$_ENV['MAILGUN_SMTP_PORT'] = port
$_ENV['MAILGUN_SMTP_LOGIN'] = user
$_ENV['MAILGUN_SMTP_PASSWORD'] = password
$_ENV['MAILGUN_API_KEY'] = key
日本語環境だと、Qdmail
というものが有名だそう。
参考:php から確実にメール送信(Qdmail使用、SMTP経由)
ただし、今回はmbstring
環境を入れてないので、エラーが出てしまった。
なので、英語の解説ページを参考に、phpmailer
を使ってみた。
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = $_ENV\['MAILGUN_SMTP_SERVER'\];
$mail->SMTPAuth = true;
$mail->Username = $_ENV\['MAILGUN_SMTP_LOGIN'\];
$mail->Password = $_ENV\['MAILGUN_SMTP_PASSWORD'\];
$mail->Port = $_ENV\['MAILGUN_SMTP_PORT'\];
$mail->SMTPSecure = 'tls';
$mail->From = MAIL_FROM;
$mail->FromName = MAIL_FROM_NAME;
$mail->addAddress("hoge@exsample.jp");
$mail->addAddress("huga@exsample.com");
$mail->Subject = MAIL_SUBJECT;
$mail->Body = MAIL_MSG1 . $body . MAIL_MSG2;
if(!$mail->send()){
//falseが返ってくる場合はエラー。
//送信完了の場合は、1が返ってくる。
}
ただし、もちろんだけど、日本語で送信すると文字化けする。
(Gmailの場合はなぜか本文は正しく表示出来た。件名は文字化けする)