PHPMailerを使ってSMTP送信
PHP
PHPでSMTPを使ってメール送信を行いたい場合、「Qdmail」や「PHPMailer」などのライブラリがあります。
今回は「PHPMailer」の使い方をご紹介。
スポンサーリンク
目次
PHPMailerといえば、、、
このライブラリ、2016年末最後の事件とも言えることがありましたね。
WordPressやDrupal、Joomal!などのCMSに使われており、お正月はこれの連絡対応に終われるかと思いましたが、どのCMSも脆弱性に関わる部分は使用していないので問題ないと発表がありことなきを得ましたね。
脆弱性の修正はVer.5.2.20以降のものを使用すれば問題ないようです。
準備するもの
・使用するSMTPの情報
・PHPMailerのライブラリ
になります。
PHPMailerのライブラリは最新のものを使用することが推奨されております。
ダウンロードはGitHubより。
一応、以下で紹介するコードで使用したライブラリもアップしておきます。
最新版でうまくいかないなどがありましたら、こちらをご使用ください。
プログラム
<?php error_reporting(E_ALL & ~E_NOTICE); ini_set("display_errors", "0"); //エラー表示:1 非表示:0 date_default_timezone_set('Asia/Tokyo'); require_once("./PHPMailer/PHPMailerAutoload.php"); //ライブラリー読込 mb_language("japanese"); mb_internal_encoding("UTF-8"); //認証情報 $host = "smtp.example.com; $smtp_user = "user_name"; $smtp_password = "password"; $from = "from mail address"; $port = 587; $ssl_type = "ssl"; //宛先・件名・本文 //POSTやGETでメールを送信する場合 //$fromname = "送信者名だよ"; //$to = urldecode(htmlspecialchars($_POST["to"], ENT_QUOTES)); //$subject = urldecode(htmlspecialchars($_POST["subject"], ENT_QUOTES)); //$body = urldecode(htmlspecialchars($_POST["body"], ENT_QUOTES)); //固定テキストでテスト用 $fromname = "送信者名だよ"; $to = "info@example.com"; $subject = "十分に長い日本語の題名(subject)を作成しましょう、アイウエオかきくけこサシスセソ"; $body = "ここに本文が入りますよ!ここに本文が入りますよ! ここに本文が入りますよ!ここに本文が入りますよ!ここに本文が入りますよ!ここに本文が入りますよ! 十分に長い日本語の題名(subject)を作成しましょう、アイウエオかきくけこサシスセソ"; //メール送信 $mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPAuth = true; //$mail->SMTPDebug = 2; //デバッグなどを行うときはコメントアウトを解除! $mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, //SSLサーバー証明書の検証を要求するか(デフォルト:true) 'verify_peer_name' => false, //ピア名の検証を要求するか(デフォルト:true) 'allow_self_signed' => true //自己証明の証明書を許可するか(デフォルト:false、trueにする場合は「verify_peer」をfalseに) ) ); $mail->CharSet = "utf-8"; $mail->SMTPSecure = $ssl_type; $mail->Host = $host; $mail->Port = $port; $mail->IsHTML(false); $mail->Username = $smtp_user; $mail->Password = $smtp_password; $mail->SetFrom($smtp_user); $mail->From = $from; $mail->FromName = mb_encode_mimeheader($fromname, "JIS", "UTF-8"); $mail->Subject = mb_encode_mimeheader($subject, "JIS", "UTF-8"); $mail->Body = $body; $mail->AddAddress($to); //送信判定 if ($mail->Send()) { echo "送信が成功したよ!"; } else { echo "送信が失敗したよ、、設定ミスがあるのかもね、、"; }
以上です!
ここで大事な項目は「11〜16行目」の設定項目になります。
筆者は「Lolipop」と「お名前.com(gmo)レンタルサーバ」の2つを試しましたが、「$port」「$ssl_type」がそれぞれ違いました。
Lolipopの設定は
<?php $port = 587; $ssl_type = "CRAM-MD5";
お名前.comレンタルサーバーは
<?php $port = 465; $ssl_type = "ssl";
でした。
使用するサーバによって設定内容が異なるので、お気をつけください。
特に、「$ssl_type」
設定内容が「ssl」「tls」「LOGIN」「XOAUTH2」など多数あり大文字小文字も注意する必要があります。
まとめ
メールフォームをホームページ内で作る際は「mb_send_mail」を使用していましたが、
smtpの情報がある時はPHPMailerを使用してみたいと思います。
smtpから送れば迷惑メールで弾かれることも減るはずなので、、、
スポンサーリンク