<?php
set_include_path( "C:\php\PEAR" );
include('Mail.php');
include('Mail/mime.php');
# 内部コード指定
mb_language( "ja" );
mb_internal_encoding("UTF-8");
# メール送信環境
$mailServer = "localhost";
$mailPort = 25;
$mailFrom = "lightbox@localhost";
$mailTo = "lightbox@localhost";
$mailUser = "lightbox";
$mailAuth = true; // true 認証有り、false 認証無し
$mailPass = "password";
print "<PRE>";
# **********************************************************
# 本文( テキスト )
# 30 文字程度で改行を入れて下さい
# **********************************************************
$text = mb_convert_encoding("日本語\n日本語", "JIS", "SJIS" );
# **********************************************************
# 本文( HTML )
# **********************************************************
$html = "<html><body><pre>$text</pre></body></html>";
# **********************************************************
# 添付ファイル( 必要ならば、$file にセットする )
# **********************************************************
#$file = './Book1.xls';
$crlf = "\n";
# **********************************************************
# FROM と TO を設定
# **********************************************************
$from = mb_convert_encoding( "送信者", "JIS", "SJIS" );
$from = "=?ISO-2022-JP?B?" . base64_encode($from) . "?= <$mailFrom>";
$to = mb_convert_encoding( "宛先", "JIS", "SJIS" );
$to = "=?ISO-2022-JP?B?" . base64_encode($to) . "?= <$mailTo>";
# **********************************************************
# ● 長い件名の処理
# **********************************************************
$subject = "改行する必要のある長い日本語を";
$subject .= "件名にセットしてテストしてみましょう。";
$subject .= "件名に「AあBいC」のように半角が交互に含まれると";
$subject .= "エンコード後の長さが増加するので、";
$subject .= "改行長は短めに設定しています。";
// SJIS として文字数を取得
$len = mb_strlen( $subject, "SJIS" );
// 10 文字以下ならそのまま処理
if ( $len <= 10 ) {
$subject = mb_convert_encoding( $subject, "JIS", "SJIS" );
// mime encode
$sub_str = "=?ISO-2022-JP?B?" . base64_encode($subject) . "?=";
}
// 10 文字以上なら分解して処理
else {
// 先頭から10文字取得
$sub_str = mb_substr( $subject, 0, 10, "SJIS" );
// JIS に変更
$sub_str = mb_convert_encoding( $sub_str, "JIS", "SJIS" );
// mime encode
$sub_str = "=?ISO-2022-JP?B?" . base64_encode($sub_str) . "?=";
// 次の処理の為に処理済みの文字列を削除
$sub_work = mb_substr(
$subject, 10, mb_strlen( $subject,"SJIS" ) - 10, "SJIS" );
// 処理文字列が存在する間続ける
while( 1 ) {
// 改行とスペース
$sub_str .= "\r\n ";
// まだ 10 文字より長い場合
if ( mb_strlen( $sub_work, "SJIS" ) > 10 ) {
// 先頭から10文字取得
$sub_left = mb_substr( $sub_work, 0, 10, "SJIS" );
// JIS に変更
$sub_left = mb_convert_encoding( $sub_left, "JIS", "SJIS" );
// mime encode して追加
$sub_str .=
"=?ISO-2022-JP?B?" .
base64_encode($sub_left) .
"?=";
// 次の処理の為に処理済みの文字列を削除
$sub_work = mb_substr(
$sub_work,
10,
mb_strlen( $sub_work, "SJIS" ) - 10,
"SJIS"
);
}
// 10 文字以内の場合
else {
// JIS に変更
$sub_work = mb_convert_encoding( $sub_work, "JIS", "SJIS" );
// mime encode
$sub_str .=
"=?ISO-2022-JP?B?" .
base64_encode($sub_work) .
"?=";
// 終了
break;
}
}
}
// 出来上がった文字列を件名として使用する
$subject = $sub_str;
# **********************************************************
# ● 準備された情報を元に、SMTP に渡す MIME 情報を
# 作成する
# **********************************************************
$mime = new Mail_mime($crlf);
# 本文( テキスト )
$mime->setTXTBody($text);
# 本文( HTML )
$mime->setHTMLBody($html);
# 添付ファイル
if ( $file != "" ) {
$mime->addAttachment($file, 'application/octet-stream');
}
# パーツ別のキャラクタセット指定
$param =
array(
'text_charset' => 'ISO-2022-JP',
'html_charset' => 'ISO-2022-JP'
);
# **********************************************************
# ヘッダと本文の作成
# **********************************************************
// ヘッダ情報の整理
$hdrs =
array(
'Date' => date("r"),
'From' => $from,
'To' => $to,
'Subject' => $subject
);
$body = $mime->get( $param );
$hdrs = $mime->headers($hdrs);
# **********************************************************
# SMTP 環境の情報
# **********************************************************
if ( $mailAuth ) {
$smtp =
array(
'host' => $mailServer,
'port' => $mailPort,
'auth' => TRUE,
'username' => $mailUser,
'password' => $mailPass,
);
}
else {
# 以下は認証なし
$smtp =
array(
'host' => $mailServer,
'port' => $mailPort,
'auth' => FALSE,
'username' => '',
'password' => '',
);
}
# メールオブジェクトを作成
$mail =& Mail::factory('smtp', $smtp );
# **********************************************************
# ● メール送信( ヘッダと本文 を引数として渡す )
# **********************************************************
$ret = $mail->send($mailTo, $hdrs, $body);
if ( $ret !== true ) {
print $ret->getMessage() . "<br>";
}
print "</PRE>";
?>
Done