絵文字メール送信(Perl+Encode::JP::Mobile)
方針
- 3キャリア対応した絵文字メール送信処理を作る。
- ドコモとAUはSJISで、ソフトバンクはUTF8で本文をエンコーディングする。
- 絵文字はドコモのSJISコードを使って指定する。
- Encode::JP::Mobileで絵文字を含めた文字列のエンコーディングを相互変換する。
- Mail::Address::MobileJpを使って、メールアドレスからキャリアを判別する。
サンプルコード
#!/usr/local/bin/perl
use strict;
use warnings;
use utf8;
use Encode;
use Encode::JP::Mobile;
use Mail::Address::MobileJp;
use MIME::Lite;
use Jcode;
my $email_from = 'taro@example.net';
my $email_to = 'hanako@ezweb.ne.jp';
my $text = "こんにちは:";
my $emoji_bytes = "\xF8\x9F"; # ドコモのSJISコード「太陽」
my $emoji_chars = decode( 'x-sjis-imode', $emoji_bytes );
my $mail_encoding =
( is_imode($email_to) ) ? 'x-sjis-docomo'
: ( is_softbank($email_to) ) ? 'x-utf8-softbank'
: ( is_ezweb($email_to) ) ? 'x-sjis-kddi-auto'
: 'x-sjis-docomo';
my $msg = MIME::Lite->new(
From => $email_from,
To => $email_to,
Subject => 'HELLO!',
Data => encode( $mail_encoding, $text.$emoji_chars),
Encoding => '8bit',
);
$msg->attr( 'content-type' => 'text/plain' );
$msg->attr( 'content-type.charset' => $mail_encoding =~ /utf8/ ? 'UTF-8' : 'Shift_JIS' );
$msg->send;