• 追加された行はこの色です。
  • 削除された行はこの色です。
* デコメール送信 [#vf590ab8]
* デコメール送信(Perl) [#vf590ab8]

** 資料 [#dfc76b95]
*** キャリア公式 [#w4a8571d]
-ドコモ
-- http://www.nttdocomo.co.jp/service/imode/make/content/deco_mail/index.html
-- MIMEフォーマットについて http://www.nttdocomo.co.jp/service/imode/make/content/deco_mail/mechanism/internet/
- AU
-- http://www.au.kddi.com/ezfactory/tec/spec/decorations/index.html
- ソフトバンク
-- http://mb.softbank.jp/mb/service/3G/mail/arrange/
** マルチパートの構成 [#bc4ec4fb]
*** ドコモ [#ic37c710]
 multipart/mixed
 ├ multipart/related
 │├ multipart/alternative
 ││├ text/plain
 ││└ text/html
 │└ image/gif  # インライン画像
 └ image/gif    # 添付画像
*** AU [#w6a91401]
 multipart/mixed
 ├ multipart/alternative
 │├ text/plain
 │└ text/html
 └ image/gif
- 添付画像は不可?
*** ソフトバンク [#v6f9ada7]
 multipart/related
 ├ multipart/alternative
 │├ text/plain
 │└ text/html
 └ image/gif   # インライン画像兼添付画像?
- デコメール携帯4社MIMEマルチパート比較 http://www.cpa-lab.com/tech/0126 を参考のこと。

***  デコメール携帯4社MIMEマルチパート比較 [#zdc9e19b]
- http://www.cpa-lab.com/tech/0126

*** 開封率の高いデコメールでメルマガ配信! [#of2eb33a]
- http://thinkit.jp/article/757/3/

*** Perlを使ったドコモデコメールの実例 [#dbec1449]
- http://codezine.jp/article/detail/550

*** CPAN [#meae4c2f]
- MIME::Lite http://search.cpan.org/perldoc?MIME::Lite

** サンプルコード [#hffe2c38]

*** AU [#a39d0e27]
 #!/usr/local/bin/perl
 
 use strict;
 use utf8;
 use Encode;
 use Encode::JP::Mobile;
 use Mail::Address::MobileJp;
 use MIME::Lite;
 use HTML::Scrubber;
 use Jcode;
 use MIME::Base64;
 use Path::Class;
 
 my $html = <<'END';
 my $email_from  = 'taro@example.net';
 my $email_to    = 'hanako@ezweb.ne.jp';
 
 my $emoji_bytes = "\xF8\x9F";  # ドコモのSJISコード「太陽」
 my $emoji_chars = decode( 'x-sjis-imode', $emoji_bytes );
 
 my $subject = "件名です";
 my $html = <<"END";
 <html>
 <body>
 <font color="#FF0000">こんにちは</font>
 <img src="cid:my@image">
 <font color="#FF0000"><a href="http://portal.mobile.yahoo.co.jp/">本文です</a></font><br>
 $emoji_chars<br>
 <img src="cid:my\@image">
 </body>
 </html>
 END
 my $scrubber = HTML::Scrubber->new;
 my $text     = $scrubber->scrub($html);
 my $text = HTML::Scrubber->new->scrub($html);
 
 my $subject_encoded =
   is_imode($email_to)
   ? '=?SHIFT-JIS?B?' . MIME::Base64::encode( encode( 'x-sjis-docomo', $subject . $emoji_chars ) ) . '?='
   : is_softbank($email_to)
   ? '=?UTF-8?B?' . MIME::Base64::encode( encode( 'x-utf8-softbank', $subject . $emoji_chars ) ) . '?='
   : is_ezweb($email_to) ? encode( 'x-sjis-kddi-auto', $subject . $emoji_chars )
   :                       '=?ISO-2022-JP?B?' . MIME::Base64::encode( encode( 'iso-2022-jp', $subject ) ) . '?=';
 my $html_encoded =
     is_imode($email_to)    ? encode( 'x-sjis-docomo',    $html )
   : is_softbank($email_to) ? encode( 'x-utf8-softbank',  $html )
   : is_ezweb($email_to)    ? encode( 'x-sjis-kddi-auto', $html )
   :                          encode( 'iso-2022-jp', $html );
 my $text_encoded =
     is_imode($email_to)    ? encode( 'x-sjis-docomo',    $text )
   : is_softbank($email_to) ? encode( 'x-utf8-softbank',  $text )
   : is_ezweb($email_to)    ? encode( 'x-sjis-kddi-auto', $text )
   :                          encode( 'iso-2022-jp', $text );
 
 my $alternative = MIME::Lite->new( Type => 'multipart/alternative', );
 $alternative->attach(
     Type => 'text/html',
     Data => Jcode->new($html)->jis,
     Type     => 'text/html',
     Data     => $html_encoded,
     Encoding => '8bit',
 );
 $alternative->attach(
     Type => 'text/plain',
     Data => $text,
     Type     => 'text/plain',
     Data     => $text_encoded,
     Encoding => '8bit',
 );
 my $image = MIME::Lite->new(
     Type     => 'image/gif; name="image.gif"',
     Id       => '<my@image>',
     Data     => scalar file( '.', 'image.gif' )->slurp,
     Encoding => 'base64',
 );
 my $msg = MIME::Lite->new(
     Type    => 'multipart/mixed',
     Subject => 'hello',
     From    => 'taro@example.net',
     To      => 'hanako@ezweb.ne.jp',
 );
 $msg->attach($alternative);
 $msg->attach($image);
 $msg->send;
 if ( is_imode() ) {
     my $related = MIME::Lite->new( Type => 'multipart/related', );
     $related->attach($alternative);
     $related->attach($image);
     my $mixed = MIME::Lite->new(
         Type    => 'multipart/mixed',
         Subject => $subject_encoded,
         From    => $email_from,
         To      => $email_to,
     );
     my $image2 = MIME::Lite->new(
         Type     => 'image/gif; name="image.gif"',
         Data     => scalar file( '.', 'image.gif' )->slurp,
         Encoding => 'base64',
     );
     $mixed->attach($image2);
     $mixed->attach($related);
     $mixed->send;
 }
 elsif (is_ezweb) {
     my $mixed = MIME::Lite->new(
         Type    => 'multipart/mixed',
         Subject => $subject_encoded,
         From    => $email_from,
         To      => $email_to,
     );
     $mixed->attach($alternative);
     $mixed->attach($image);
     $mixed->send;
 }
 elsif (is_softbank || 1) {
     my $related = MIME::Lite->new(
         Type    => 'multipart/related',
         Subject => $subject_encoded,
         From    => $email_from,
         To      => $email_to,
     );
     $related->attach($alternative);
     $related->attach($image);
     $related->send;
 }

Contents-IDは"@"を1つだけ含まなければならない。2個以上含んではならない(とのこと→http://www.cpa-lab.com/tech/0135)。
- AUの場合、Contents-IDは"@"を1つだけ含まなければならない。2個以上含んではならない(とのこと→http://www.cpa-lab.com/tech/0135)。

** 参考 [#dfc76b95]
- デコメール携帯4社MIMEマルチパート比較 http://www.cpa-lab.com/tech/0126
- 開封率の高いデコメールでメルマガ配信! http://thinkit.jp/article/757/3/
- Perlを使ったドコモデコメールの実例 http://codezine.jp/article/detail/550

*** キャリア公式 [#w4a8571d]
-ドコモ http://www.nttdocomo.co.jp/service/imode/make/content/deco_mail/index.html
-- MIMEフォーマットについて http://www.nttdocomo.co.jp/service/imode/make/content/deco_mail/mechanism/internet/
- AU http://www.au.kddi.com/ezfactory/tec/spec/decorations/index.html
- ソフトバンク http://mb.softbank.jp/mb/service/3G/mail/arrange/

*** CPAN [#meae4c2f]
- MIME::Lite http://search.cpan.org/perldoc?MIME::Lite
- Encode::JP::Mobile http://search.cpan.org/perldoc?Encode::JP::Mobile
- Encode::JP::Mobile::Cookbook http://search.cpan.org/perldoc?Encode::JP::Mobile::CookBook


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS