PHP : mb_send_mail を使用した自家用メール送信 API では、レンタルサーバー上利用する事を想定していましたが、fake sendmail for windows を使用すると、windows 上で同じ事ができます。
fake sendmail は、XAMPP に同梱されているらしい情報を多くインターネット上で得る事ができますが、何故か単独で Windows で利用する上では全く無名(日本)に近いソフトウェアのようです。
メールサーバは、フリーメールで可能で、簡単な設定で利用できます。以下のサンプルは、Gmail で動作確認しました。( 但し、Gmail では、Gmail 側で安全性の低いアプリの許可を『有効』にする必要があります )
▼ 手順
ダウンロード
配布元より、sendmail.zip をダウンロードして、解凍します。
( XAMPP には sendmail フォルダがあり、.php と .bat 以外が同梱されていると思います )
【C:\tools\sendmail】
sendmail.exe の動作テスト
まず、sendmail.ini をエディタで開いて、四つのエントリを指定します
▼ Gmail の場合
smtp_server=smtp.gmail.com
smtp_port=465
auth_username=ユーザ@gmail.com
auth_password=パスワード
▼ さくらインターネットの場合
smtp_server=初期ドメイン
smtp_port=587
auth_username=ユーザ@初期ドメイン
auth_password=パスワード
※ smtp_ssl=auto となっており、デフォルトで ssl で実行され、使え無い場合は TLS を使おうとします
そして、作者のオリジナルのテスト方法ですが、send_test.bat を作成して以下のように記述します
@ECHO OFF
REM send email from command line via SMTP with sendmail
ECHO From: ユーザ@gmail.com > %TEMP%\temp.mail
ECHO To: ユーザ@宛先ドメイン >> %TEMP%\temp.mail
ECHO Subject: this is a test >> %TEMP%\temp.mail
ECHO.>> %TEMP%\temp.mail
ECHO testing. >> %TEMP%\temp.mail
ECHO blah blah.. >> %TEMP%\temp.mail
ECHO. >> %TEMP%\temp.mail
ECHO blah. >> %TEMP%\temp.mail
sendmail -t < %TEMP%\temp.mail
REM DEL %TEMP%\temp.mail
これをコマンドプロンプトより実行して、メールが届く事を確認します。最後の行を REM でコメントにしているのは、送信で使われたテキストファイルを残す為です。sendmail.exe に -t が指定されているのは、標準入力より送信データを取得する為のもので、PHP で実行する場合特に必要はありませんでした。
temp.mail の内容
From: ユーザ@gmail.com
To: ユーザ@送り先ドメイン
Subject: this is a test
testing.
blah blah..
blah.
これは、コマンドプロンプトから実行できる事を意味しますが、PHP で使用するには、php.ini で以下のように指定するだけです。
php.ini の設定
sendmail_path = "C:\tools\sendmail\sendmail.exe"
実際の sendmail.exe のパスを "" で囲んで指定します。
※ この場合、エラーログは "C:\tools\sendmail\error.log" です( デフォルト )
PHP のコード ( UTF8 BOM なしで記述します )
HTML の input 要素で type="text" name="fld_to"、name="fld_subject"、name="fld_body"、を form 要素の中に記述し、form 要素に method="post" action="以下の PHP のファイルのパス" を指定し、form 要素の中に input 要素で type="submit" を指定したボタンを記述します。
mb_language("Japanese");
mb_internal_encoding("UTF-8");
$from_header = "From: " . mb_encode_mimeheader( mb_convert_encoding("差出人","iso-2022-jp") );
$from_header .= " <{$GLOBALS["mail"]}>";
$result = mb_send_mail($_POST["fld_to"], $_POST["fld_subject"], $_POST["fld_body"], $from_header);
if ( $result ) {
$error = "OK";
}
else {
$error = "ERROR";
}
print mb_language() . "
";
print $error;
$GLOBALS["mail"] は、メール形式であれば良いですが、通常ならば利用しているメールアドレスを記述します。
PHP の mb_send_mail の使用方法の全体のサンプルは、こちらを参照して下さい。
このページの PDF