メール送信
   ASP イントラネット   C言語 マテリアル   Web アプリケーションクラス  データベースアクセス  Class Stylist  C 言語問題  SQL 問題 

  Windows 環境の mb_send_mail


  
日本語のメール送信は、マルチバイト文字列関数が利用可能でなければなりません。
php.ini で以下のようにして下さい

extension=php_mbstring.dll

また、プログラム中で以下のようにしてもかまいません。
if ( !extension_loaded( "mbstring" ) ) {
	dl("php_mbstring.dll");
}

※ 拡張モジュールの名前リストを得るには、php.ini で使用可能にして
※ コマンドラインより php.exe -m を実行します
  

PHP でのメール送信は、マルチバイト文字列関数の mb_send_mail を使用する事によって、subject での
内部エンコーディング → JIS → base64 といったエンコードを自動的に行なってくれます

もちろん、本文の JIS 変換も行なわれます。
但し、SHIFT_JIS のデータを扱う場合いくつかの注意事項があります。

mb_send_mail の日本語エンコーディングは、内部エンコーディングに基づいていますので、
subject と 本文は、いったん内部エンコーディングに変換する必要があります。
また、SHIFT_JIS は内部エンコーディングとして使用できないので EUC-JP 等を使用します。

以下は、SHIFT_JIS でメール送信するコードです


  
<?
	mb_language( "ja" );
	mb_internal_encoding("EUC-JP");

	$send = mb_convert_encoding( "表示", mb_internal_encoding(), "SJIS" );

	$to = "lightbox@sdc";

	$from = "lightbox@sdc";
	ini_set( "SMTP", "localhost" );
	ini_set( "sendmail_from", $from );

	mb_send_mail( $to, $send, $send );

	print "OK";
?>
  

上記コードは、localhost でメールサーバーが稼動しているという前提です。

※ ini_set( "smtp_port", ポート番号 );  は、PHP 4.3.0以降でのみ利用可能です。

メールサーバーは ウィズ98 メールサーバ でテストしています

  
ウィズ98 メールサーバ は設定が簡単でローカル環境でテストするのに適していますが、
PHP のせいなのかどうか解りませんが、送信元と送信先に User <lightbox@sdc> という形式が使えません。
  

  Windows 環境では無い mb_send_mail

mbstring が使用可能という前提で以下のようなコードで送信可能です。
また、テスト環境では sendmail_path に /usr/sbin/sendmail -t -i が設定されています


  
<?
mb_language( "ja" );
mb_internal_encoding("EUC-JP");

$send = mb_convert_encoding( "表示", mb_internal_encoding(), "SJIS" );

$to = mb_convert_encoding( "漢字表示", "JIS", "SJIS" );
$to = "=?ISO-2022-JP?B?" . base64_encode($to) . "?= <送信先メールアドレス>";

$from = mb_convert_encoding( "漢字表示", "JIS", "SJIS" );
$from = "From: =?ISO-2022-JP?B?" . base64_encode($from) . "?= <送信元メールアドレス>";

mb_send_mail( $to, $send, $send, $from );

print "OK";
?>
  

sendmail_path は、Windows 環境でも動作します。
指定された場合は smtp および smtp_port・ sendmail_from の値は無視され、
ここで指定した コマンドが実行されます。

よって、Windows 環境で 宛先や送信元に日本語を使用したい場合は sendmail 互換のメール送信アプリケーション
を使用する必要がありそうです。

しかし、いずれにせよ Outbound Port25 Blocking の為の ポート 587 + SMTP AUTH
に対応するには PEAR の Net_SMTP を使用する必要があるようです。
ですが、PHP が存在するサーバにメールサーバが稼動しているという通常の環境では
考える必要は無いと思われます。