はじめに
若い世代の女性を中心にデコメールが注目されています。
デコメールとはNTTドコモのFOMA900iシリーズから導入された簡易HTMLメール機能で、HTMLメールならではの文字修飾、画像の埋め込みなどが可能です。これらの機能を使えば、ただのテキストのメールよりも個性的でかわいいメールを送ることができるので、それが人気につながっているようです。
デコメールの仕様は下記で公開されています。
- NTTドコモ 『作ろうiモードコンテンツ:デコメール』
本稿ではCPANモジュールのMIME::Liteを使ったサンプルを用いて、デコメールの基本的な仕様について解説します。
※CPANについては、第1回を参照してください。
対象読者
- PerlでCGIアプリケーションを作成したことのある方。
- CPANモジュールを使用したことのある方。
- 携帯サイトでデコメールを配信しようとされている方。
必要な環境
Perl 5.8以上が動作し、メールを送信することができるサーバ。
デコメールのパターン
大きく分けてデコメールには、以下の4つのパターンがあります。
- HTMLのみ
HTMLのみを送信するパターンです。
- HTML+画像添付
HTMLに併せて画像を添付するパターンです。
- HTML+インライン画像
HTML内に画像をインライン表示させるパターンです。
- デコメールテンプレート
デコメールテンプレートと呼ばれるデコメールの雛形を扱うパターンです。ユーザーは、このテンプレートを編集して送信することができます。
それでは、これら4つのパターンについて、サンプルと併せて見ていきましょう。
HTMLのみ
HTMLのみのMIMEフォーマットは下記のようになります。
Content-Typeをmultipart/alternativeとして、TEXTパートとHTMLパートを送信します。デコメール非対応端末には、TEXTパートのみ送信されることになりますので、必ずTEXTパートをつけるようにしましょう。
#!/usr/local/bin/perl use strict; use MIME::Lite; use Jcode; my $text = 'お誕生日おめでとう'; my $html = <<''; <html> <body> <font color="#FF0000">お誕生日おめでとう</font> </body> </html> my $msg = MIME::Lite->new( Type => 'multipart/alternative', Subject => 'Happy Birthday!!', From => '送信元アドレス', To => '送信先アドレス', Encoding => '8bit', ); # HTMLパート(対応端末に送信される部分) $msg->attach( Type => 'text/html', Data => Jcode->new($html)->sjis, Encoding => '8bit', ); # TEXTパート(非対応端末に送信される部分) $msg->attach( Type => 'text/plain', Data => $text, Encoding => '8bit', ); $msg->send;
HTML+画像添付
画像を添付する場合は、下記のようなMIMEフォーマットになります(GIFファイルを添付した例です)。
Content-Typeはmultipart/mixedで送信します。添付ファイルは、GIF・JPG・SWFファイルが利用できます。
#!/usr/local/bin/perl use strict; use MIME::Lite; use Jcode; use Path::Class; my $text = 'お誕生日おめでとう'; my $html = <<''; <html> <body> <font color="#FF0000">お誕生日おめでとう</font> </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', ); # 添付する画像ファイル(base64でエンコード) my $image = MIME::Lite->new( Type => 'image/gif; name="cake"', Data => scalar file('.', 'cake.gif')->slurp, Encoding => 'base64', ); my $msg = MIME::Lite->new( Type => 'multipart/mixed', Subject => 'Happy Birthday!!', From => '送信元アドレス', To => '送信先アドレス', Encoding => '8bit', ); $msg->attach($body); $msg->attach($image); $msg->send;