CodeZine(コードジン)

特集ページ一覧

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

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2006/09/06 00:00

目次

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メールが当たり前になるのかもしれませんね。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

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

もっと読む

著者プロフィール

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5