- 追加された行はこの色です。
- 削除された行はこの色です。
* デコメール送信 [#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