SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Perlで作るモバイルサイトのコツ

Perlで作るモバイルサイトのコツ:第2回

CPANモジュールでデコメールを作成する


HTML+インライン画像

 添付画像をインラインで表示させる場合は、下記のようなMIMEフォーマットになります。

図3:HTMLに添付画像をインラインで表示させる場合
図3:HTMLに添付画像をインラインで表示させる場合

 先ほどの画像添付と異なるのは、cid でインライン表示する画像を指定しているところです。表示される画像の Content-ID は< >で括られていなければなりません。また、Content-Typeはmultipart/relatedになります。

sample3.pl
#!/usr/local/bin/perl

use strict;
use MIME::Lite;
use Jcode;
use Path::Class;

my $text = 'お誕生日おめでとう';
my $html = <<'';
<html>
<body>
<font color="#FF0000">お誕生日おめでとう</font>
<img src="cid:cake">
</body>
</html>

my $body = MIME::Lite->new(
    Type => 'multipart/alternative',
);

$body->attach(
    Type => 'text/plain',
    Data => $text,
    Encoding => '8bit',
);

$body->attach(
    Type => 'text/html',
    Data => Jcode->new($html)->sjis,
    Encoding => '8bit',
);

# インラインで表示する画像
my $image = MIME::Lite->new(
    Type => 'image/gif; name="cake"',
    Id   => '<cake>',
    Data => scalar file('.', 'cake.gif')->slurp,
    Encoding => 'base64',
);

my $msg = MIME::Lite->new(
    Type     => 'multipart/related',
    Subject  => 'Happy Birthday!!',
    From     => '送信元アドレス',
    To       => '送信先アドレス',
    Encoding => '8bit',
);

$msg->attach($body);
$msg->attach($image);
$msg->send;

デコメールテンプレート

 デコメールテンプレートのMIMEフォーマットは下記のようになります。

図4:デコメールテンプレートを利用する場合
図4:デコメールテンプレートを利用する場合

 MIMEフォーマットの1行目は、Decomail-Templateで始まり、Content-Typeはmultipart/relatedになります。テンプレートを端末に送信する場合のContent-Typeは、application/x-decomail-templateです。また、テンプレートの改行コードは「CR+LF」でなければならないので注意が必要です。

sample.cgi
#!/usr/local/bin/perl

use strict;
use MIME::Lite;
use Path::Class;
use CGI;
use Jcode;

my @field_order = qw(
mime-version
content-type
content-transfer-encoding
);

my $html = <<'';
<html>
<body>
<font color="#FF0000">お誕生日おめでとう</font>
<img src="cid:cake">
</body>
</html>

my $image = MIME::Lite->new(
    Type => 'image/gif; name="cake"',
    Id   => '<cake>',
    Data => scalar file('.', 'cake.gif')->slurp,
    Encoding  => 'base64',
    Datestamp => '',
);

$image->field_order(@field_order);
$image->preamble('');
$image->delete('x-mailer');

my $msg = MIME::Lite->new(
    Type => 'multipart/related',
    Datestamp => '',
);

$msg->field_order(@field_order);
$msg->preamble('');
$msg->delete('x-mailer');

$msg->attach(
    Type => 'text/html',
    Data => Jcode->new($html)->sjis,
    Encoding => '8bit',
);

$msg->attach($image);

# 1行目に Decomail-Template を付加
my $dmt = "Decomail-Template\r\n". $msg->as_string;

# 改行コードを CR+LF に変換
$dmt =~ s/\r\n|\r|\n/\r\n/g;

# Content-Type は application/x-decomail-template
my $q = CGI->new;
print $q->header('application/x-decomail-template');
print $dmt;

まとめ

 今回はNTTドコモのデコメールに限定してHTMLメールを紹介してきましたが、先日、auでも「デコレーションメール」というHTMLメールサービスが開始されるという発表がありました。これからもっとHTMLメールを使用するユーザーが増え、サイトからのメール配信もHTMLメールが当たり前になるのかもしれませんね。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Perlで作るモバイルサイトのコツ連載記事一覧

もっと読む

この記事の著者

村上 洋一郎(ムラカミ ヨウイチロウ)

株式会社ライブドア メディア事業部 モバイルメディア部所属。占いサイトやコミュニティサイトなど、様々なエンタメ系サイトの開発を担当しています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/550 2008/08/26 13:51

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー