例えばxamppなどを利用してローカルでメールフォームなどを開発する場合、その動作を確認できなくて困ることがあります。
原因は、単純にローカルマシン自身がSMTPサーバではないからです。
xamppにはその問題を解消するために「Mercury」というソフトが同胞されています。これまで、幾度となく何度もチャレンジしたのですが、うまくメールを送信できませんでした。
しかし、今回、設定に成功したのでメモとして残しておきます。
ローカル開発環境の詳細について
今回、ローカル開発環境におけるメール送信環境を実現したのは以下の環境です。
OS | Windows7 64bit |
---|---|
XAMPP | 1.7.7 |
Apache | 2.0 |
PHP | 5.3.8 |
Mercury | 4.62 |
もちろんApache、PHP、Mercuryはxamppにデフォルトで同胞されているものを使用しますが、参考までに。
メールが送信されるしくみ
PHPの関数mb_send_mailなどでメールを送信すると、コマンドsendmailなどを使ってメールが送信されるのが通常です。
今回のMercuryを使う場合は、PHPでメールが送信されるとMercuryを経由して、Mercuryで設定したSMTPサーバにメールが投げられます。
つまり、Mercuryはローカルプログラムから受け取ったメールを、メーラーソフトと同じようにしてメールを送信しているわけです。
したがって、この環境を実装するためには、SMTPサーバが必要です。もちろん、今利用しているISPのSMTPサーバで問題ありません。その他メールサービスを受けていれば、そちらでもいいです。
PHPの設定
まず、PHPの設定を変更して、Mercuryにメールが流れるようにします。
ファイル「php.ini」を開いて、以下の項目を設定するだけです。
[mail function] ; For Win32 only. ; http://php.net/smtp SMTP = localhost ; http://php.net/smtp-port smtp_port = 25 ; For Win32 only. ; http://php.net/sendmail-from sendmail_from = (送信元として利用するメールアドレス)
設定を有効にするには、Apacheを再起動します。
Mercuryの設定
Mercuryを起動し、メニューの「Configuration」から「Protocol modules…」を選択して、利用するプロトコルをチェックします。今回利用するのは「MercuryS SMTP server」と「MercuryC SMTP relaying client」の2つです。
次に、メニューの「Configuration」から「MercuryS SMTP Server」を選択して、タブ「Connection control」の「Do not permit SMTP relaying of non-local mail」のチェックを外します。
さらに、メニューの「Configuration」から「MercuryC SMTP Client」を選択して、「SMTP “Smart” Host details」の「Smart host name」と「Connection port/type」を設定します。これは、メーラーのSMTPの設定で、サーバ名とポート番号を設定しますが、それと同じでいいです。
同じ設定画面で「Credentials for SMTP Authentication, if required」の「Login username」と「Password」を設定します。これも、メーラーのSMTPの設定で、SMTP接続に必要なユーザ名とパスワードを設定します。
以上、これらの設定を有効にすることで、ローカル開発環境からPHPプログラムなど利用して外部にメールを送信することができます。