メール送信の巻
本章では、XAMPPの環境下において、CGIプログラムからメール送信を行います。
フォームメールのプログラム等の動作テストには、メール送信機能は必須です。
通常、UNIX系サーバ(LinuxやFreeBSD等)には、sendmailというメール送信のためのソフトウェアが設置されていて、CGIプログラムからメール送信を行う場合には、このsendmailを介してメール送信を行います。
ところが、Windows系のサーバには、sendmailがないため、CGIプログラムからメール送信を行う場合には、直接メールサーバとソケット通信をして送るか、sendまね〜る等の擬似ソフトを利用するしか方法はありませんでした。
XAMPPの場合、sendmailの代替用として、Mercury Mailfake sendmail for windows という2種類のメールプログラムが同梱されています (*1)。
今回は、fake sendmail for windows を利用したPerlからのメール送信方法について、ご紹介をすることにします。

3-1. メールサーバの設定

fake sendmailは、XAMPPの以下のフォルダに既にインストールされています。
C:\xampp\sendmail\sendmail.exe
設定ファイルは、以下にあります。
C:\xampp\sendmail\sendmail.ini
テキストエディタで、sendmail.iniを編集しましょう。 なお、念のため、sendmail.iniファイルは、バックアップを取っておいたほうがいいでしょう。
主な編集箇所は、次の4点です。
(1) お使いのメール送信サーバ(SMTPサーバ)名を指定します。
smtp_server=smtp.server.xx.jp
(2) メール送信サーバのポート番号を指定します。
以前は25番ポートが主流でしたが、最近はOP25B (*2) の普及で、587番等が多いようです。 正確なポート番号を確認し、指定します。
smtp_port=587
(3) 認証のためのユーザーIDとパスワードを指定します。
auth_username=user_id
auth_password=user_password
(4) pop3 before smtpサーバ(受信前にPOP3認証を行う)の場合には、受信サーバ(POP3サーバ)のサーバ名、ユーザーIDとパスワードを指定します。
pop3_server=pop.server.xx.jp
pop3_username=user_id
pop3_password=user_password
設定箇所は以上です。 最後のpop3 before smtpについては、仕様が不明であっても、念のため受信サーバ(POP3)の接続情報を記述しておいても構いません。
pagetop

3-2. フォームメールの設置

動作確認のために、フォームメールのCGIプログラムを入手します。
今回は、KentWebで一般配布するPOST-MAILを使用することにします。
以下からダウンロードしましょう。

ZIP形式 ダウンロード (postmail.zip)

ダウンロードが完了したら、解凍します。
設置先は、次のフォルダです。
C:\xampp\htdocs\postmail
C:\xampp
     |
     +-- htdocs /
           |
           +-- postmail / postmail.html
                  |       postmail.cgi
                  |       init.cgi
                  |       check.cgi
                  |
                  +-- lib / *.*
                  +-- data / *.*
                  +-- tmpl / *.*
修正するファイルは、init.cgi のみで、次の2箇所です。
(1) 送信先メールアドレスは、あなたの送信先のアドレスを正確に記述します。
(2) sendmailのパスは、fake sendmail のパスを記述します。例のとおりでいいはずです。
# 送信先メールアドレス
$cf{mailto} = 'xxx@xxx.xx';

# sendmailのパス【サーバパス】
# → プロバイダの指定を確認のこと
$cf{sendmail} = 'C:\xampp\sendmail\sendmail.exe';
POST-MAILへの設定作業については、以上です。
pagetop

3-3. 動作テスト

送信テストを行いましょう。
ブラウザを起動して、以下のURLへアクセスします。
http://localhost/postmail/postmail.html
フォームへの入力 → 確認画面 → 送信完了
と進みます。メールは正常に届きましたでしょうか?
もし、メールがうまく届かないようであれば、以下の内容を確認してみましょう。
(1) 送信までは正常に完了しているのに、受信サーバ側がスパム扱いして受信拒否したり、スパムフォルダへ入ってしまっていることが多いです。
(2) 3-1. の「設定内容」を見直してみてください。
(3) 以下にエラーログが蓄積されますので、ログ情報をヒントに解決を図ってください。
C:\xampp\sendmail\error.log
(4) ご本家の troubleshooting をチェックしてください。英文ですが、ChromeやIEの自動翻訳等を利用しましょう。
http://glob.com.au/sendmail/
pagetop
【脚注】
*1 : 送受信までサービス可能なメールサーバ用に Mercury Mail、sendmailの代替用に fake sendmailという位置付けのようです。
*2 : Outbound Port 25 Blockingのことで、迷惑メール対策用に、25番ポートの通信を禁止にすることをいいます。