2011年3月2日水曜日

Androidでメールを送信する方法

Androidアプリケーションにおいて、メール送信機能を実現するもっともスタンダードな方法はIntentを発行して、メール送信アプリケーションにその処理を移譲してしまうという方法だ。

お作法に従った場合


メールを送信するには、下記のようにIntentを発行するのが正しい。(と思われる)
// Intentインスタンスを生成
Intent intent = new Intent();

// アクションを指定(ACTION_SENDTOではないところがミソ)
intent.setAction(Intent.ACTION_SEND);
// データタイプを指定
intent.setType("message/rfc822");

// 宛先を指定
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"foo@example.com"});
// CCを指定
intent.putExtra(Intent.EXTRA_CC, new String[]{"cc@example.com"});
// BCCを指定
intent.putExtra(Intent.EXTRA_BCC, new String[]{"bcc@example.com"});
// 件名を指定
intent.putExtra(Intent.EXTRA_SUBJECT, "件名");
// 本文を指定
intent.putExtra(Intent.EXTRA_TEXT, "本文の内容");

// Intentを発行
startActivity(intent);
この方法で正常な動作を確認できたのは、下記のメールアプリ
  • GMail
  • K-9Mail
  • AUの標準メーラー(IS03で確認)

逆に下記のメールアプリでは動作しない(Intentに反応しない)
  • Softbankメールアプリ(003SH, 005SHはアプリが微妙に違うので不明)
  • HTC標準メーラー(Desire X06HTで確認)
  • spモードメール(T01-Cで確認)

HTMLでのAタグにmailto:を指定した場合(と同じ動作)


HTMLの場合
メール送信

Javaの場合
// Intentインスタンスを生成
Intent intent = new Intent();

// アクションを指定(ACTION_SENDTOではないところがミソ)
intent.setAction(Intent.ACTION_SENDTO);
// データを指定
intent.setData(Uri.parse("mailto:foo@example.com?subject=件名&body=本文&cc=cc@example.com&bcc=bcc@example.com"));

// Intentを発行
startActivity(intent);
この方法で正常な動作を確認できたのは、下記のメールアプリ
  • GMail
  • K-9Mail
  • AUの標準メーラー(IS03で確認)

下記のメールアプリでは動作しない(CC,BCCが正しく設定されない)
  • HTC標準メーラー(Desire X06HTで確認)

下記のメールアプリでは動作しない(起動はするもののまともではない)
  • Softbankメールアプリ(003SH, 005SHはアプリが微妙に違うので不明)
  • spモードメール(T01-Cで確認)

ACTION_SENDTOとEXTRA_を指定

Intent intent = new Intent();

// アクションを指定
intent.setAction(Intent.ACTION_SENDTO);
// データを指定
intent.setData(Uri.parse("mailto:foo@example.com"));

// CCを指定
intent.putExtra(Intent.EXTRA_CC, new String[]{"cc@example.com"});
// BCCを指定
intent.putExtra(Intent.EXTRA_BCC, new String[]{"bcc@example.com"});
// 件名を指定
intent.putExtra(Intent.EXTRA_SUBJECT, "件名");
// 本文を指定
intent.putExtra(Intent.EXTRA_TEXT, "本文の内容");

// Intentを発行
startActivity(intent);
この方法で正常な動作を確認できたのは、下記のメールアプリ
  • GMail
  • AUの標準メーラー(IS03で確認)
  • spモードメール(T01-Cで確認)

下記のメールアプリでは動作しない(CC,BCCが正しく設定されない)
  • HTC標準メーラー(Desire X06HTで確認)

下記のメールアプリでは動作しない(CC,BCC,件名,本文が正しく設定されない)
  • K-9Mail
  • Softbankメールアプリ(003SH, 005SHはアプリが微妙に違うので不明)

ACTION_SENDTOとEXTRA_の関係


件名、本文が指定できないという現象について、K-9mailでは仕様となっている。ソースコードのコメントには、下記のように記載されている。
Android Open Source Projectのドキュメントに、ACTION_VIEWとACTION_SENDTOでは「EXTRA_」という接頭辞の付いたパラメータを受け取らないように規定されているので無視する。
開発者の皆さんもこれに従うべきです!もしくはAndroid Open Source Projectのドキュメントを変更しましょ。

その他


やっぱり実際問題としては、全てのケースで動作するGMailが最優秀。他にもACTION_SENDとtext/plainの組み合わせでSMSが起動したりと色々あるみたい。現状では挙動が違い過ぎて全てのメーラーで共通に動作するのは宛先と件名を指定したアプリ起動くらいかもしれない。

頑張れキャリアの中の人。

0 件のコメント:

コメントを投稿