PHPMailer と JPHPMailer で SMTP サーバーからのメール送信
前回の続きとして、「PHPMailer」と「JPHPMailer」を使って SMTP サーバー経由でメールを送信するのをやってみました。
「PHPMailer」と「JPHPMailer」のインストールやローカルMTA(Sendmail/Postfix)等を使用した基本的なメール送信については、前回のエントリをご確認ください。
PHPMailer でのSMTP経由のメール送信
「PHPMailer」で SMTP 経由でメール送信するサンプルコードは以下のようになります。
<?php require_once("./phpmailer/class.phpmailer.php"); //ライブラリ読み込み mb_language("japanese"); //言語(日本語) mb_internal_encoding("UTF-8"); //内部エンコーディング(UTF-8) $to = "hogehoge@example.com"; //宛先 $subject = "メールの件名"; //件名 $body = "メールの本文です。"; //本文 $from = "foobar@example.com"; //差出人 $fromname = "ほげほげ 太郎"; //差し出し人名 $mail = new PHPMailer(); //PHPMailerのインスタンス生成 $mail->CharSet = "iso-2022-jp"; //文字コード設定 $mail->Encoding = "7bit"; //エンコーディング $mail->IsSMTP(); //「SMTPサーバーを使うよ」設定 $mail->SMTPAuth = TRUE; //「SMTP認証を使うよ」設定 $mail->Host = 'smtp-server-name:25'; // SMTPサーバーアドレス:ポート番号 $mail->Username = 'smtp-username'; // SMTP認証用のユーザーID $mail->Password = 'smtp-userpassword'; // SMTP認証用のパスワード $mail->AddAddress($to); //宛先(To)をセット $mail->From = $from; //差出人(From)をセット $mail->FromName = mb_encode_mimeheader(mb_convert_encoding($fromname,"JIS","UTF-8")); //差出人(From名)をセット $mail->Subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8")); //件名(Subject)をセット $mail->Body = mb_convert_encoding($body,"JIS","UTF-8"); //本文(Body)をセット //メールを送信 if (!$mail->Send()){ echo("Failed to send mail. Error:".$mail->ErrorInfo); }else{ echo("Send mail OK."); }
上記のコードで言うと、下記の部分が SMTP 認証の設定になりますので、この部分については環境に合わせて変更してください。
<?php $mail->IsSMTP(); //「SMTPサーバーを使うよ」設定 $mail->SMTPAuth = TRUE; //「SMTP認証を使うよ」設定 $mail->Host = 'smtp-server-name:25'; // SMTPサーバーアドレス:ポート番号 $mail->Username = 'smtp-username'; // SMTP認証用のユーザーID $mail->Password = 'smtp-userpassword'; // SMTP認証用のパスワード
JPHPMailer でのSMTP経由のメール送信(メソッド追加してみました)
「JPHPMailer」は「PHPMailer」のラッパークラスなので、基本的にさっきと同じように実装すればメール送信が可能です。
ただ、なんとなく「$mail->IsSMTP();」や「$mail->SMTPAuth = TRUE;」を毎回設定するのが面倒なので、SMTP 認証情報セット用のメソッドを追加してみました。
JPHPMailer に SMTP 認証情報セット用メソッドを追加
追加したメソッドは以下の2つになります。
- setSmtpAuth -> SMTP認証情報を引数で受け取ってセットするメソッド
- setSmtpAuthHash -> SMTP認証情報を連想配列で受け取ってセットするメソッド(内部でsetSmtpAuthを呼び出し)
上記の2つのメソッドを「jphpmailer.php」に追加します。
メソッドのコードは以下のとおりになります。
<?php /** * SMTP認証のセット * * @param string $user SMTPアカウントのユーザーID * @param string $password SMTPアカウントのパスワード * @param string $host SMTPサーバーのアドレス * @param string $port SMTPサーバーのポート番号 */ function setSmtpAuth($user, $password, $host, $port) { $this->IsSMTP(); $this->SMTPAuth = TRUE; $this->Host = $host . ':' . $port; $this->Username = $user; $this->Password = $password; } /** * SMTP認証のセット(連想配列版) * * @param array $hash SMTP認証情報の連想配列 */ function setSmtpAuthHash($hash) { $this->setSmtpAuth( $hash["user"], $hash["password"], $hash["host"], $hash["port"] ); }
追加したメソッドを使ってみる
実際に今回追加してみたメソッドを使って、「JPHPMailer」からSMTP 経由でのメール送信をしてみます。
実装のコードは以下のようになります。
<?php require_once("./jphpmailer/jphpmailer.php"); //ライブラリ読み込み mb_language("japanese"); //言語(日本語) mb_internal_encoding("UTF-8"); //内部エンコーディング(UTF-8) $to = "hogehoge@example.com"; //宛先 $subject = "メールの件名"; //件名 $body = "メールの本文です。"; //本文 $from = "foobar@example.com"; //差出人 $fromname = "ほげほげ 太郎"; //差し出し人名 $mail = new JPHPMailer(); //JPHPMailerのインスタンス生成 $mail->setSmtpAuthHash( array( "user" => "smtp-username", // SMTP認証用のユーザーID "password" => "smtp-userpassword", // SMTP認証用のパスワード "host" => "smtp-server-name", // SMTPサーバーのアドレス "port" => "25" ) // SMTPサーバーのポート番号 ); $mail->addTo($to); //宛先(To)をセット $mail->setFrom($from,$fromname); //差出人(From/From名)をセット $mail->setSubject($subject); //件名(Subject)をセット $mail->setBody($body); //本文(Body)をセット //メールを送信 if (!$mail->Send()){ echo("Failed to send mail. Error:".$mail->ErrorInfo); }else{ echo("Send mail OK."); }
「$mail->IsSMTP();」と「$mail->SMTPAuth = TRUE;」が無いので、少しだけすっきりしたコードに見えます(たぶん)。
今回参考にしたページ
PHPで日本語メールを送る ? 応用編 (添付ファイル、HTMLメール) - EC studio 技術ブログ
http://techblog.ecstudio.jp/tech-tips/mail-japanese-advance.html
PHPMailerでGmailのSMTPを利用する - memo.xight.org
http://memo.xight.org/2009-05-24-2