ブログ内検索
最近の記事
プロフィール

N-devel

Author:N-devel
ふわふわプログラマー。

カテゴリー
RSSフィード
リンク

Ads by Google

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PEARのMail_mimeを使って携帯にHTMLメールを送るスクリプト

PHPスクリプトで携帯にデコメールを送る方法についてはこのサイトに詳しい情報とサンプルスクリプトが置かれている。
携帯:デコメール:MIMEフォーマットの違い

しかし、このサイトのサンプルスクリプトではDoCoMoとSoftBankには問題なくデコメールを送信することが可能であるが、au端末に送信した場合、インライン画像が正しく表示されない問題がある。

原因は携帯にHTMLメールを送信するときの注意点に書いたように画像のContent-IDに@を含める必要があるとうことだ。
上記スクリプトではContent-IDの生成をMail_mimeに任せているが、Mail_mimeが自動生成するContent-IDには@が含まれていない。

そこで、上記スクリプトを改良して自由にContent-IDを指定できるようにした。
Mail_mime_Decomail.php(改)

これを使ってデコメールを送るには
<?PHP
$this_dir = dirname(__FILE__);
require_once('Mail_mime_Decomail.php');
$mime = new Mail_Mime_Decomail();
mb_language('ja');
mb_internal_encoding('UTF-8');//このスクリプトの文字コード(適宜変更して下さい)

//HTML本文
$html_body = '<html><body>福岡のモバイル開発会社エニセンスの開発者ブログです。<img src="cid:001@any-sense"></body></html>';
//テキスト本文
$text_body = '福岡のモバイル開発会社エニセンスの開発者ブログです。';

//文字エンコーディングをJISに変更(スクリプトの文字コードがUTF-8でなければ適宜変更)
$html_body = mb_convert_encoding($html_body, 'JIS', 'UTF-8');
$text_body = mb_convert_encoding($text_body, 'JIS', 'UTF-8');
$mime->setTXTBody($text_body);
$mime->setHTMLBody($html_body);


//インライン画像(画像の数だけ繰り返す。cidは毎回変える必要あり)
$img_file = 'hogehoge.gif';
$content_type = 'image/gif';
$img_name = basename($img_file);
$cid = '001@any-sense'; //Content-IDを指定(@マークを含ませる)
$mime->addHTMLImage($img_file, $content_type, $img_name, true, $cid);

//Subject
$subject = '件名';
$subject = mb_encode_mimeheader($subject, 'JIS');

//From
$from = 'from@hoge.hoge';
$mime->setFrom($from);

//To
$to =  'to@hoge.hoge';

$buid_params = array(
	'head_encoding' => 'base64',
	'text_encoding' => '7bit',
	'html_encoding' => 'quoted-printable',
	'7bit_wrap'     => 998,
	'html_charset'  => 'ISO-2022-JP',
	'text_charset'  => 'ISO-2022-JP',
	'head_charset'  => 'ISO-2022-JP'
);

$body = $mime->get($buid_params);
$hdrs = $mime->headers($hdrs);
$header = '';
foreach($hdrs as $name => $value){
	$header .= $name.': '.$value."\r\n";
}
mail($to  , $subject , $body, $header);
?>
こんな感じで使えばよい。
要はデコメに埋め込むインライン画像をセットするときに使うaddHTMLImage()の5番目の引数として@を含むcidを渡してあげればいい。

comment

管理者にだけメッセージを送る

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

ご指摘有難うございます!

確かにご指摘の通り同じコードを2回ペーストしちゃってました!ご指摘有難うございます!

あれれ?

上のサンプルの途中にhtmlspecialchars(ENT_QUOTES):が入ってて、同じphpコードが2回繰り返している気がします。