メールを送る場合の方法
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の場合と同様、本文作成の手順に理由があります。