PHP のメール送信


  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 が存在するサーバにメールサーバが稼動しているという通常の環境では
考える必要は無いと思われます。

  Outbound Port 25 Blocking 用テスト

SMTP.php、PEAR.php、Socket.php が必要です

  

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

require_once 'SMTP.php';

if (! ($smtp = new Net_SMTP("サーバー", "587", "localhost"))) {
	die("Unable to instantiate Net_SMTP object\n");
}

if (PEAR::isError($e = $smtp->connect())) {
	die($e->getMessage() . "\n");
}

PEAR::isError($e = $smtp->auth("メールアカウント", "パスワード"));

$from = "自メールアドレス";
if (PEAR::isError($smtp->mailFrom($from))) {
	die("Unable to set sender to $from");
}

$rcpt = '他メールアドレス';
if (PEAR::isError($res = $smtp->rcptTo($rcpt))) {
	die('Unable to add recipient ' . $rcpt . ': ' .
		$res->getMessage() . "\n");
}

$from = mb_convert_encoding( "送A信B者", "JIS", "SJIS" );
$from = "From: =?ISO-2022-JP?B?" . base64_encode($from) . "?= <自メールアドレス>\r\n";

$to = mb_convert_encoding( "宛A先", "JIS", "SJIS" );
$to = "To: =?ISO-2022-JP?B?" . base64_encode($to) . "?= <他メールアドレス>\r\n";

$subject = mb_convert_encoding( "件B名", "JIS", "SJIS" );
$subject = "Subject: =?ISO-2022-JP?B?" . base64_encode($subject) . "?=\r\n";

$text = mb_convert_encoding( "漢字--表示", "JIS", "SJIS" );

if (PEAR::isError($smtp->data( "$subject$from$to$text"))) {
	die("Unable to send data\n");
}

$smtp->disconnect();

?>

Done.
  




yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[phpVarious]
claudebot
24/03/29 16:25:27
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube