Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_EMAIL, "[email protected]");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "I'm email body.");
startActivity(Intent.createChooser(intent, "Send Email"));
上記のコードは、次のアプリを表示するダイアログを開きます。 - Bluetooth、Google Docs、Yahoo Mail、Gmail、Orkut、Skypeなど。
実際には、私はこれらのリストオプションをフィルタリングしたいです。メール関連のアプリのみを表示したいGmail、Yahoo Mail。どうやってするの?
私は「Androidマーケット」アプリケーションでそのような例を見ました。
ダイアログにはメールアプリのみが表示されます。 Gmail、Yahoo Mailなど、Bluetooth、Orkutなどは表示されません。このようなダイアログを生成するコードは何ですか?
あなたが以下のようにあなたのintent.setTypeを変えるとき、あなたは得るでしょう
intent.setType("text/plain");
Facebookや他のアプリを使わずに、電子メールクライアントのリストだけを取得するにはAndroid.content.Intent.ACTION_SENDTO
を使用します。メールクライアントだけ。例:
new Intent(Intent.ACTION_SENDTO);
私はあなたが直接メールアプリにアクセスすることをお勧めしません。ユーザーに自分のお気に入りのメールアプリを選択させます。彼を拘束しないでください。
ACTION_SENDTOを使用した場合、putExtraは件名とテキストを意図に追加するようには機能しません。件名と本文を追加するには、Uriを使用します。
編集: MIMEタイプとしてmessage/rfc822
の代わりに"text/plain"
を使うことができます。ただし、それは「電子メールクライアントのみを提供する」という意味ではなく、「message/rfc822データをサポートするものをすべて提供する」という意味です。それは電子メールクライアントではないいくつかのアプリケーションをすぐに含むかもしれません。
message/rfc822
は.mhtml, .mht, .mime
のMIMEタイプをサポートします
承認された回答は4.1.2では機能しません。これはすべてのプラットフォームで動作するはずです。
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto","[email protected]", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Body");
startActivity(Intent.createChooser(emailIntent, "Send email..."));
お役に立てれば。
更新: marcwjj によると、4.3では、メールアドレスを表す文字列の代わりに文字列配列を渡す必要があるようです。もう1行追加する必要があります。
intent.putExtra(Intent.EXTRA_EMAIL, addresses); // String[] addresses
主なアプローチは3つあります。
String email = /* Your email address here */
String subject = /* Your subject here */
String body = /* Your body here */
String chooserTitle = /* Your chooser title here */
1.カスタムUri
:
Uri uri = Uri.parse("mailto:" + email)
.buildUpon()
.appendQueryParameter("subject", subject)
.appendQueryParameter("body", body)
.build();
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(Intent.createChooser(emailIntent, chooserTitle));
2. Intent
エクストラを使用する:
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + email));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
//emailIntent.putExtra(Intent.EXTRA_HTML_TEXT, body); //If you are using HTML in your body text
startActivity(Intent.createChooser(emailIntent, "Chooser Title"));
3.サポートライブラリShareCompat
:
Activity activity = /* Your activity here */
ShareCompat.IntentBuilder.from(activity)
.setType("message/rfc822")
.addEmailTo(email)
.setSubject(subject)
.setText(body)
//.setHtmlText(body) //If you are using HTML in your body text
.setChooserTitle(chooserTitle)
.startChooser();
これはAndroidの公式ドキュメントから引用したものです。Android4.4でテストしたところ、完璧に動作しています。 https://developer.Android.com/guide/components/intents-common.html#Email で他の例を参照してください。
public void composeEmail(String[] addresses, String subject) {
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:")); // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, addresses);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
私は他の人を助けることができる解決策を考え出したけれども、遅い答え、。
Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:[email protected]"));
startActivity(Intent.createChooser(emailIntent, "Send feedback"));
これは私の出力でした(Gmail + Inboxのみ推奨):
私は Android Developers サイトからこの解決策を得ました。
試してください:
intent.setType("message/rfc822");
これは私のために働く:
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
intent.putExtra(Intent.EXTRA_EMAIL , new String[] { "[email protected]" });
intent.putExtra(Intent.EXTRA_SUBJECT, "My subject");
startActivity(Intent.createChooser(intent, "Email via..."));
つまり、ACTION_SENDTO
アクションではなくACTION_SEND
アクションを使用してください。私はいくつかのAndroid 4.4デバイスでそれを試してみました、そしてそれは電子メールアプリケーション(電子メール、Gmail、Yahoo Mailなど)だけを表示するためにチューザポップアップを制限します、そしてそれは正しく電子メールアドレスと件名を挿入します。
これは、 Android Developer Docs に従って次のようにコードを追加する方法です。
Intent intent = new Intent(Intent.ACTION_SEND);//common intent
intent.setData(Uri.parse("mailto:")); // only email apps should handle this
本文と件名を追加したい場合は、これを追加してください。
intent.putExtra(Intent.EXTRA_SUBJECT, "Your Subject Here");
intent.putExtra(Intent.EXTRA_TEXT, "E-mail body" );
メールクライアントだけが欲しいなら、Android.content.Intent.EXTRA_EMAIL
を配列で使うべきです。例を示します。
final Intent result = new Intent(Android.content.Intent.ACTION_SEND);
result.setType("plain/text");
result.putExtra(Android.content.Intent.EXTRA_EMAIL, new String[] { recipient });
result.putExtra(Android.content.Intent.EXTRA_SUBJECT, subject);
result.putExtra(Android.content.Intent.EXTRA_TEXT, body);
やっと最善の方法を思いつく
String to = "[email protected]";
String subject= "Hi I am subject";
String body="Hi I am test body";
String mailTo = "mailto:" + to +
"?&subject=" + Uri.encode(subject) +
"&body=" + Uri.encode(body);
Intent emailIntent = new Intent(Intent.ACTION_VIEW);
emailIntent.setData(Uri.parse(mailTo));
startActivity(emailIntent);
次のコードは私にはうまくいきます。
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"abc@gmailcom"});
Intent mailer = Intent.createChooser(intent, null);
startActivity(mailer);
これが私がその時に見つけた唯一の方法で、どんなキャラクターでも動作するようになりました。
doreamonの答えは、新しいバージョンのGmailのすべての文字で機能するため、今すぐ正しい方法です。
古い答え:
これが私のものです。件名とメッセージ本文をサポートし、UTF-8文字を完全にサポートすることで、すべてのAndroidバージョンで動作するようです。
public static void email(Context context, String to, String subject, String body) {
StringBuilder builder = new StringBuilder("mailto:" + Uri.encode(to));
if (subject != null) {
builder.append("?subject=" + Uri.encode(Uri.encode(subject)));
if (body != null) {
builder.append("&body=" + Uri.encode(Uri.encode(body)));
}
}
String uri = builder.toString();
Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(uri));
context.startActivity(intent);
}
すべてのAndroidのバージョンで動作します:
String[] TO = {"[email protected]"};
Uri uri = Uri.parse("mailto:[email protected]")
.buildUpon()
.appendQueryParameter("subject", "subject")
.appendQueryParameter("body", "body")
.build();
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri);
emailIntent.putExtra(Intent.EXTRA_EMAIL, TO);
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
これらの解決策のどれも私のために働いていませんでした。これがLollipopで動く最小の解決策です。私のデバイスでは、結果の選択リストにはGmailとネイティブのメールアプリだけが表示されます。
Intent emailIntent = new Intent(Intent.ACTION_SENDTO,
Uri.parse("mailto:" + Uri.encode(address)));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
startActivity(Intent.createChooser(emailIntent, "Send email via..."));
これは私にとってはまったく問題ありません。
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("mailto:" + address));
startActivity(Intent.createChooser(intent, "E-mail"));
次のコードは私のために働いた!
import Android.support.v4.app.ShareCompat;
.
.
.
.
final Intent intent = ShareCompat.IntentBuilder
.from(activity)
.setType("application/txt")
.setSubject(subject)
.setText("Hii")
.setChooserTitle("Select One")
.createChooserIntent()
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
activity.startActivity(intent);
あなたの意図がEメールアプリ(そして他のテキストメッセージングやソーシャルアプリではない)によってのみ扱われることを確実にしたいなら、ACTION_SENDTO
アクションを使い、 "mailto:"データスキームを含めてください。例えば:
public void composeEmail(String[] addresses, String subject) {
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:")); // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, addresses);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
私はこれを見つけました https://developer.Android.com/guide/components/intents-common.html#Email
あなたが attachment を送っていないとき、これらの答えのほとんどは単純な場合のためにだけ働きます。私の場合は、添付ファイル(ACTION_SEND)または2つの添付ファイル(ACTION_SEND_MULTIPLE)を送信する必要があります。
だから私はこのスレッドから最良のアプローチを取り、それらを組み合わせました。サポートライブラリのShareCompat.IntentBuilder
を使用していますが、ACTION_SENDTOと "mailto:" uriが一致するアプリケーションのみを示しています。このように私は添付ファイルをサポートしているEメールアプリのリストだけを取得します。
fun Activity.sendEmail(recipients: List<String>, subject: String, file: Uri, text: String? = null, secondFile: Uri? = null) {
val originalIntent = createEmailShareIntent(recipients, subject, file, text, secondFile)
val emailFilterIntent = Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"))
val originalIntentResults = packageManager.queryIntentActivities(originalIntent, 0)
val emailFilterIntentResults = packageManager.queryIntentActivities(emailFilterIntent, 0)
val targetedIntents = originalIntentResults
.filter { originalResult -> emailFilterIntentResults.any { originalResult.activityInfo.packageName == it.activityInfo.packageName } }
.map {
createEmailShareIntent(recipients, subject, file, text, secondFile).apply { `package` = it.activityInfo.packageName }
}
.toMutableList()
val finalIntent = Intent.createChooser(targetedIntents.removeAt(0), R.string.choose_email_app.toText())
finalIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toTypedArray())
startActivity(finalIntent)
}
private fun Activity.createEmailShareIntent(recipients: List<String>, subject: String, file: Uri, text: String? = null, secondFile: Uri? = null): Intent {
val builder = ShareCompat.IntentBuilder.from(this)
.setType("message/rfc822")
.setEmailTo(recipients.toTypedArray())
.setStream(file)
.setSubject(subject)
if (secondFile != null) {
builder.addStream(secondFile)
}
if (text != null) {
builder.setText(text)
}
return builder.intent
}
Gmailをターゲットにしたい場合は、次のようにします。意図は「ACTION_SEND」ではなく「ACTION_SENDTO」であり、追加の意図フィールドはGmailには必要ありません。
String uriText =
"mailto:[email protected]" +
"?subject=" + Uri.encode("your subject line here") +
"&body=" + Uri.encode("message body here");
Uri uri = Uri.parse(uriText);
Intent sendIntent = new Intent(Intent.ACTION_SENDTO);
sendIntent.setData(uri);
if (sendIntent.resolveActivity(getPackageManager()) != null) {
startActivity(Intent.createChooser(sendIntent, "Send message"));
}
このコードは私の端末で機能しています
Intent mIntent = new Intent(Intent.ACTION_SENDTO);
mIntent.setData(Uri.parse("mailto:"));
mIntent.putExtra(Intent.EXTRA_EMAIL , new String[] {"[email protected]"});
mIntent.putExtra(Intent.EXTRA_SUBJECT, "");
startActivity(Intent.createChooser(mIntent, "Send Email Using..."));
KotlinでAdilの答えを更新しています、
val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:") // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, Array(1) { "[email protected]" })
intent.putExtra(Intent.EXTRA_SUBJECT, "subject")
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
} else {
showSnackBar(getString(R.string.no_apps_found_to_send_mail), this)
}
in Kotlin 誰かが探しているなら
val emailArrray:Array<String> = arrayOf("[email protected]")
val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:") // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, emailArrray)
intent.putExtra(Intent.EXTRA_SUBJECT, "Inquire about travel agent")
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
From Android開発者ドキュメント :
public void composeEmail(String[] addresses, String subject) {
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:")); // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, addresses);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
これは私が使用しているものであり、それは私のために働きます:
//variables
String subject = "Whatever subject you want";
String body = "Whatever text you want to put in the body";
String intentType = "text/html";
String mailToParse = "mailto:";
//start Intent
Intent variableName = new Intent(Intent.ACTION_SENDTO);
variableName.setType(intentType);
variableName.setData(Uri.parse(mailToParse));
variableName.putExtra(Intent.EXTRA_SUBJECT, subject);
variableName.putExtra(Intent.EXTRA_TEXT, body);
startActivity(variableName);
これにより、ユーザーは好みの電子メールアプリを選択することもできます。これができない唯一のことは受信者のEメールアドレスを設定することです。
たぶん、あなたはこれを試してみるべきです:intent.setType("plain/text");
私はそれを見つけました ここ 。私は自分のアプリでそれを使用しました、そしてそれはEメールとGmailオプションだけを示しています。
これを使って:
boolean success = EmailIntentBuilder.from(activity)
.to("[email protected]")
.cc("[email protected]")
.subject("Error report")
.body(buildErrorReport())
.start();
build gradleを使用してください。
compile 'de.cketti.mailto:email-intent-builder:1.0.0'
ankoを使う - kotlin
context.email(email, subject, body)
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto", email, null));
if (emailIntent.resolveActivity(context.getPackageManager()) != null) {
context.startActivity(Intent.createChooser(emailIntent, "Send Email..."));
} else {
Toast.makeText(context, "No apps can perform this action.", Toast.LENGTH_SHORT).show();
}
電話のEメールクライアントでEメールを作成します。
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("plain/text");
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
intent.putExtra(Intent.EXTRA_TEXT, "mail body");
startActivity(Intent.createChooser(intent, ""));
intent.setType("message/rfc822");
を使用しても機能しますが、必ずしもEメールを処理するとは限らない追加のアプリケーション(GDriveなど)が表示されます。 setType("text/plain")
とIntent.ACTION_SENDTO
を使用するのが最善ですが、最良の結果を得るにはsetData(Uri.parse("mailto:"))
を追加する必要があります(電子メールアプリのみ)。完全なコードは次のとおりです。
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setType("text/plain");
intent.setData(Uri.parse("mailto:[email protected]"));
intent.putExtra(Intent.EXTRA_SUBJECT, "Email from My app");
intent.putExtra(Intent.EXTRA_TEXT, "Place your email message here ...");
startActivity(Intent.createChooser(intent, "Send Email"));