PHPでメール送信

(2/2)

サンプル・プログラムの解説:エンコードと送信

0008: mb_language('ja');                    //mb_send_mailが参照するため
0009: $InternalEncoding = 'EUC-JP';
0010: mb_internal_encoding($InternalEncoding);
0011: $MySelf = basename($_SERVER['SCRIPT_NAME']);

0083: else {
0084:     mb_internal_encoding('EUC-JP');
0085:     $subject = stripslashes($_POST['subject']);
0086:     $message = stripslashes($_POST['message']);
0087: 
0088:     $subject = mb_convert_encoding($subject, 'EUC-JP', 'SJIS,EUC-JP,UTF-8');
0089:     $message = puts_format($message, 80);        //本文は80桁で自動改行
0090: 
0091:     $res = mb_send_mail($MailTo$subject$message);    //メール送信
0092:     $msg = ($res == FALSE) ? '送信失敗' : '送信成功';
0093: 

入力フォームから受け取った件名 $subject と本文 $message を、 mb_send_mail  関数に渡して、メールを送信する。
space
このプログラムでは入力フォームは EUC-JP だが、関数  mb_send_mail  渡った後に、関数  mb_send_mail  の設定に基づいて自動的にエンコードが行われる。
なお、関数  mb_send_mail  が正しくエンコード処理を行うことができるよう、関数  mb_send_mail 、 mb_send_mail  を正しく設定しておく必要がある。
space
関数  mb_send_mail  では送信元を指定することもできる。第4 引数に
mb_send_mail($MailTo, $subject, $message, "From: hogehoge@pahoo.org");
のように追加ヘッダ情報として与えてやればよい。

サンプル・プログラムの解説:本文の整形

受信者が読みやすいように、本文は 80 桁(半角換算)で折り返すようにした。これを行うのがユーザー定義関数 puts_format である。この関数の中で、折り返すと同時に EUC-JP への変換も行っている。

0020: /**
0021:  * 文字列を整形して返す(1行分)
0022:  * @param string $str  追加する文字列(SJIS,EUC-JP,UTF-8)
0023:  * @param int $width   折り返す桁数(半角1文字を1桁とする、0なら折り返さない)
0024:  * @return string 整形後の文字列(EUC-JP、最後に改行文字を付加)
0025: */
0026: function puts_format($str$width) {
0027:     mb_internal_encoding('EUC-JP');
0028:     $str = mb_convert_encoding($str, 'EUC-JP', 'SJIS,EUC-JP,UTF-8');
0029: 
0030:     //折り返さない
0031:     if ($width <= 0) {
0032:         $dest = $str . "\n";
0033:     //折り返す
0034:     } else {
0035:         $dest = '';
0036:         $w = 0;
0037:         $l = mb_strlen($str);
0038:         for ($i = 0$i < $l$i++) {
0039:             $ch = mb_substr($str$i, 1, 'EUC-JP');       //文字コード変換
0040:             $dest = $dest . $ch;
0041:             if ($ch == "\n")   $w = 0;      //改行なら桁数リセット
0042:             else                $w += mb_strwidth($ch);
0043:             if ($w > $width) {
0044:                 $w = 0;
0045:                 $dest = $dest . "\n";
0046:             }
0047:         }
0048:         $dest = $dest . "\n";
0049:     }
0050:     return $dest;
0051: }

参考サイト

参考書籍

(この項おわり)
header