PHPでMailgunを使ってherokuでメール送信する

herokuのphp環境でMailgunを使ってメール送信をしてみました。
ただし、日本語環境は入れなかったので、英語環境のみ。

まず、herokuにプラグインをインストールするためには、
クレジットカードの登録が必要なので、登録しておく。
(無料範囲内でのみでの利用でも必要)

Mail/SNSアドオン一覧

Mailgunの場合は、無料だと300通/日送れるよう。

Mailgun

で、インストールすると、環境変数に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の場合はなぜか本文は正しく表示出来た。件名は文字化けする)

   このエントリーをはてなブックマークに追加