Androidのアプリからメール機能を使う場合、一般的にはintentを使って既存のメールアプリを呼び出す方法が一般的です。

ただ、単にメーラーを呼び出すだけとか、宛先(単一・CCなど)や標題、本文をセットして呼び出す場合と、画像などの添付ファイル を付けて呼び出すのではコードの書き方が違ってきます。

2つのやり方でメーラーを呼び出してみます。




添付ファイルなしで呼び出す

コードは以下のとおりです。

宛先は必ずセットしてください。このコードが無いとアプリが落ちます。

宛先を入れない場合は、
intent.setData(Uri.parse("mailto:"));
としておきます。


import android.content.Intent;
import android.net.Uri;


// インテントのインスタンス生成

Intent intent = new Intent();

intent.setAction(Intent.ACTION_SENDTO);

//宛先をセット

intent.setData(Uri.parse("mailto:xxx@gmail.com"));

//標題をセット
intent.putExtra(Intent.EXTRA_SUBJECT, "XXX");

//本文をセット

intent.putExtra(Intent.EXTRA_TEXT, "本文");

// メール起動

startActivity(intent);





添付ファイルありで呼び出す

GMailなどを使う場合を考慮して、添付ファイルはSDカードに保存されたものを使います。

setActionでは、「ACTION_SENDTO」ではなく「ACTION_SEND」を使います。前者の場合、ファイルは添付されません。

AndroisManifest.xmlに以下を追加しておきます。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_PROVIDER"/>
<uses-permission android:name="android.permission.READ_ATTACHMENT"/>


コードは以下のとおりです。

// インテントのインスタンス生成
Intent intent = new Intent();

intent.setAction(Intent.ACTION_SEND);

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);// ファイルを読み込む権限を与える

intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"xxx@example.com"});

//EXTRA_SUBJECT,EXTRA_TEXTの文言はダミーです

intent.putExtra(Intent.EXTRA_SUBJECT, "ミクさんとプリクラだよ");

intent.putExtra(Intent.EXTRA_TEXT, "添付画像を見てね!");


// ファイルの添付
File externalSD = new File(System.getenv("EXTERNAL_STORAGE"));

String file_path = "/Satch_priclumiku3.jpg";

Uri attachments = Uri.parse("file://" + externalSD.getAbsolutePath() + file_path);

intent.putExtra(Intent.EXTRA_STREAM, attachments);

//intent.setType("message/rfc822");
intent.setType("image/jpeg");

try {
    startActivity(Intent.createChooser(intent, "Choose Email Client"));
} catch (android.content.ActivityNotFoundException ex) {
    Toast.makeText(this, "client not found", Toast.LENGTH_LONG).show();
}


intent.setTypeは、"message/rfc822"が一般的ですが、メーラーでdocomoのspモードメールを使う場合は、"image/jpeg"としておかないとspモードメールがリストに出てこないようです。

spモードメールの場合



GMailの場合