Perl で携帯電話に絵文字入りメールを送る方法

メールを送る場合の方法

perl で絵文字入りメールを送信する場合の具体的なコーディングとしては色々な選択肢があると思いますが、基本的な手順としては、以下のようにするのが確実だと思います。

1. 絵文字を入れる部分には何かASCII文字列のキーワードを仕込み、サブジェクトと本文を作成する
2. サブジェクトと本文を JIS に変換する。
3. キーワード部分を、pack 関数で作成した文字列と置換する
4. 送信する

以下の各キャリアの対処方法は、この方法を前提として解説しています。

以下の要件がポイントです。
・置換用のキーワードはASCII(いわゆる半角英数字記号)で構成する
・JISへの変換は、絵文字コードを置換する前に行う

サンプルコード

use Jcode;
use Mail::Sender; #送信方法は何でもよい
use MIME::Base64; #サブジェクトを生JIS(またはASCII)で送信するなら不要

sub packcode($$){
    my @code = @_;
    return pack("c*", hex($code[0]), hex($code[1]));
}

my $sender = new Mail::Sender{
    smtp => '127.0.0.1',
    from => 'me@example.com',
    ctype => 'text/plain',
};

my $subject = '今日のお天気';
my $body = '今日のお天気は%_emoji_sunny_%です。';

#まず、JISに変換。
$body = Jcode->new($body, 'euc')->jis;
$subject = Jcode->new($subject, 'euc')->jis;

#Shift_JIS でプログラムを書いている場合なら、上の2行の代わりに以下の2行
#$body = Jcode->new($body, 'sjis')->jis;
#$subject = Jcode->new($subject, 'sjis')->jis;

#キーワードを絵文字に変換
$body =~ s/%_emoji_sunny_%/&packcode('f9','8b')/eg; #太陽を表示するVodafone用コードは f98b

#サブジェクトは生JISでなくエンコード(おまけ)
$subject = "=?ISO-2022-JP?B?".encode_base64($subject, '')."?=";

$sender->MailMsg({
    to => 'someonewhousevodafone@t.vodafone.ne.jp',
    subject => $subject,
    msg => $body,
});

上記では、Vodafone 端末に送信する事を例にしていますが、指定する絵文字コードさえ分っていれば、まったく同じ処理で(例えばメールアドレスの @ 以降を自動で判別するなどして)3キャリアにメールを送信することができます。

各キャリアの対処方法

各キャリア向けに送信する場合、それぞれのキャリアが使用している文字コード体系を調べる必要があります。

EZ Web の場合

KDDI のサイトにかなり体系だった情報が掲載されています。(2004-11 現在)
http://www.au.kddi.com/ezfactory/tec/spec/3.html

上記URLページからリンクのある「EZweb絵文字一覧【タイプD】」というファイル内の「KDDI絵文字用Shift-JISコード」欄のコードを使用すると、メール内に絵文字を表示することができます。

上記のKDDIが提供しているファイルはPDFで、かなりデータとして使用しにくいので、テキストデータだけをCSV形式にしたファイルを作成しました。
文字コードはShift_JIS、改行コードは CR+LF になっています。
[KDDI絵文字データ CSV ダウンロード]

「Eメール送出用JISコード」は使用しない

2004-11 のこのページの初出段階では「Eメール送出用JISコード」という欄のコードを使用すればよいと予想していたのですが、実機検証してみたら予想が外れました。

これは、「先にJISに変換してからキーワードを絵文字コードに置換する」という本文作成方法に理由があります。

Vodafoneの場合

Vodafone の場合、キャリアが使用する文字コードを公開していません。

使用できる絵文字自体は以下のページに一覧がありますが、コードはウェブページに表示するものしか掲載されていません。(2005-04 現在)
http://developers.vodafone.jp/dp/tool_dl/web/picword_top.php

絵文字コード検索ツール

独自調査した 文字コード検索ツールで対応コードが検索できます(2005-04-15公開)。
※実機検証した端末は限られていますので、自己責任でご利用ください。

キャリアの欄で「Vodafone」を選択し、検索キーに「p1」など、上記公式サイトのページ数を入力して検索すると、対応の文字コードが一覧できます。
[絵文字コード検索ツール]

i-modeの場合

Shift_JIS 体系でのコードをキャリアが公開しています。(2004-11 現在)

http://www.nttdocomo.co.jp/p_s/imode/make/emoji/index.html より
=>「iモード対応絵文字とは」のリンク
=>「2.1.1. Shift-JISのバイナリコード入力」のセクション内のリンク

この Shift_JIS のコード体系のまま(JISに変換した後の)メールに挿入すると、絵文字が表示されます。

この「Shift_JIS」のコードをJIS本文のメールに挿入するとうまくいく、というのも、EZ Webの場合と同様、本文作成の手順に理由があります。