NAME Email::Address::JP::Mobile - Japanese carrier email class SYNOPSIS use Email::Address::JP::Mobile; my $carrier = Email::Address::JP::Mobile->new('docomo.taro.@docomo.ne.jp'); $carrier->is_mobile; # => true $carrier->name; # => "DoCoMo" $carrier->carrier_letter; # => "I" $body = $carrier->send_encoding->encode($body); $subject = $carrier->mime_encoding->encode($subject); or, via Email::Address object use Email::Address; use Email::Address::Loose -override; use Email::Address::JP::Mobile; my ($email) = Email::Address->parse('docomo.taro.@docomo.ne.jp'); my $carrier = $email->carrier; $carrier->is_mobile; # => true DESCRIPTION Email::Address::JP::Mobile is for Japanese web developers. このモジュールは要するに HTTP::MobileAgent のメール版です。 メールアドレスから、それがどのキャリアで発行されたメールアドレスかを判別します。 同様のことができるモジュールに Mail::Address::MobileJp があります。 Email::Address::JP::Mobile は Email::Address オブジェクトを拡張する点や、 "is_mobile($email)" ではなく "$carrier->is_mobile()" というインターフェースである点が違います。 USAGE $carrier = Email::Address::JP::Mobile->new( $address ) メールアドレスから、Email::Address::JP::Mobile::* の対応したクラスを返します。 my $carrier = Email::Address::JP::Mobile->new('docomo.taro.@docomo.ne.jp'); # $carrier is a Email::Address::JP::Mobile::DoCoMo $carrier->is_mobile; # => true $carrier->name; # => "DoCoMo" $carrier->carrier_letter; # => "I" 携帯のメールアドレスではないと判断した場合は Email::Address::JP::Mobile::NonMobile クラスを返します。 $carrier = $email->carrier() Email::Address::JP::Mobile は Email::Address オブジェクトに、対応したクラスを返す "carrier()" というメソッドを拡張します。 use Email::Address; use Email::Address::Loose -override; use Email::Address::JP::Mobile; my ($email) = Email::Address->parse('docomo.taro@docomo.ne.jp'); $email->carrier->carrier_letter; # "I" ご存知のように日本の携帯は変なアドレスが許可されている期間が長かったので、 携帯アドレスをパースする可能性があるのであれば Email::Address::Loose を 併用した方がよいです。 CARRIER CLASS METHODS $carrier->is_mobile() $carrier->name() $carrier->carrier_letter() 各メソッドが返す値は以下のとおりです。 is_mobile name carrier_letter ------------------------------------------------- DoCoMo true "DoCoMo" "I" au true "EZweb" "E" SoftBank true "SoftBank" "V" WILLCOM true "AirH" "H" NonMobile false "NonMobile" "N" "carrier_letter()" が返す値は HTTP::MobileAgent の "carrier()" が返す値と同じです。ただし、このモジュールが返す "name()" の値は HTTP::MobileAgent の "carrier_longname()" が返す値とは少し異なりますので注意してください。 $carrier->mime_encoding() $subject = $carrier->mime_encoding->encode($subject); $subject = $carrier->mime_encoding->decode($subject); そのキャリア向けにメールを送信する際、絵文字を含んだ Subject を MIME encode するためのエンコーディングを返します。何を返すかは "ENCODINGS" を参照してください。 携帯の場合は、そのキャリアの端末から受信したメールの Subject を MIME decode するためにも利用できます。ただし DoCoMo や SoftBank からの場合絵文字は最初からゲタになっているため取れないでしょう。 NonMobile の場合には "MIME-Header-ISO_2022_JP" エンコーディングを返しますが、これは現状 decode に対応していません。代わりに "MIME-Header" というエンコーディングで decode する必要があるので注意してください。 $carrier->send_encoding() $body = $carrier->send_encoding->encode($body); そのキャリア向けにメールを送信する際、絵文字を含んだメール本文を encode するためのエンコーディングを返します。何を返すかは "ENCODINGS" を参照してください。 $carrier->parse_encoding() $body = $carrier->parse_encoding->decode($body); そのキャリアから受信したメールの絵文字を含んだメール本文を decode するためのエンコーディングを返します。が、これはメール本文の "Content-Type" をチェックしているわけではなく、そのキャリアの場合このエンコーディングで送ってくるだろうというものを返しているだけである点に留意してくだ さい。また、DoCoMo や SoftBank からの場合絵文字は最初からゲタになり取れないため、"iso-2022-jp" を返します。 そのため、受信の場合は絵文字のことは忘れて Email::MIME の "header()" や "body_str()" を使って decode すると良いでしょう。 ENCODINGS 上記の各メソッドが返すエンコーディングは以下のとおりです。(返すのは文字列ではなく Encode::Encoding です) mime_encoding send_encoding parse_encoding ------------------------------------------------------------------------------------ DoCoMo MIME-Header-JP-Mobile-DoCoMo x-sjis-docomo iso-2022-jp au MIME-Header-JP-Mobile-KDDI x-sjis-kddi-auto x-iso-2022-jp-kddi-auto SoftBank MIME-Header-JP-Mobile-SoftBank x-utf8-softbank iso-2022-jp WILLCOM MIME-Header-JP-Mobile-AirH x-sjis-airh x-iso-2022-jp-airh NonMobile MIME-Header-ISO_2022_JP iso-2022-jp iso-2022-jp MIME-Header-JP-Mobile-* や x-* のエンコーディングは Encode::JP::Mobile が提供するエンコーディングです。 $Email::Address::JP::Mobile::NonMobile::Encoding local $Email::Address::JP::Mobile::NonMobile::Encoding = 'utf-8'; my $carrier = Email::Address::JP::Mobile->new('tomita@example.com'); $carrier->mime_encoding; # MIME-Header encoding $carrier->send_encoding; # utf-8 encoding $carrier->parse_encoding; # utf-8 encoding NonMobile の場合のデフォルトエンコーディングは "iso-2022-jp" ですが、この変数で "utf-8" を指定すると上記のようなエンコーディングを返します。 SEE ALSO Email::Address::Loose, Encode::JP::Mobile Email::MIME::MobileJP - 具体的な利用例 #mobilejp on irc.freenode.net (I've joined as "tomi-ru") AUTHOR Naoki Tomita LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.