Enviar intenção de email

588
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"));

O código acima abre uma caixa de diálogo mostrando os seguintes aplicativos: - Bluetooth, Google Docs, Yahoo Mail, Gmail, Orkut, Skype etc.

Na verdade, quero filtrar essas opções de lista. Quero mostrar apenas aplicativos relacionados a e-mail, por exemplo, Gmail, Yahoo Mail. Como fazer isso?

Eu já vi esse exemplo no aplicativo 'Android Market'.

  1. Abra o aplicativo Android Market
  2. Abra qualquer aplicativo em que o desenvolvedor tenha especificado seu endereço de e-mail. (Se você não encontrar esse aplicativo, basta abrir meu aplicativo: - market: // details? Id = com.becomputer06.vehicle.diary.free, OU pesquise por 'Vehicle Diary')
  3. Role para baixo até 'DESENVOLVEDOR'
  4. Clique em 'Enviar email'

A caixa de diálogo mostra apenas aplicativos de e-mail, por exemplo, Gmail, Yahoo Mail etc. Não mostra Bluetooth, Orkut etc. Que código produz essa caixa de diálogo?

dira
fonte
4
Desculpe, isso não é possível com Intent.ACTION_SEND. Talvez funcione diretamente com o aplicativo do Gmail, mas não sei se isso é possível.
Thommy
19
Caso alguém aprenda aqui sobre as intenções de email, EXTRA_MAIL deve corresponder a a String[], não apenas a, Stringcomo mostrado aqui.
Bigstones
possível duplicação de Enviar email via gmail
Sergey Glotov 25/13
Possível duplicado de Usando Intent.ACTION_SEND Android para envio de email
Avi Parshan
Veja aqui alguns bons conselhos: medium.com/@cketti/…
Felix D.

Respostas:

218

quando você alterar seu intent.setType, como abaixo, você receberá

intent.setType("text/plain");

Use android.content.Intent.ACTION_SENDTOpara obter apenas a lista de clientes de email, sem facebook ou outros aplicativos. Apenas os clientes de email. Ex:

new Intent(Intent.ACTION_SENDTO);

Eu não sugeriria que você fosse diretamente ao aplicativo de e-mail. Deixe o usuário escolher seu aplicativo de email favorito. Não o restrinja.

Se você usar ACTION_SENDTO, o putExtra não funcionará para adicionar assunto e texto à intenção. Use Uri para adicionar o assunto e o texto do corpo.

Edição: podemos usar em message/rfc822vez de "text/plain"como o tipo MIME. No entanto, isso não indica "apenas oferecer clientes de email" - indica "oferecer qualquer coisa que suporte dados de mensagem / rfc822". Isso pode facilmente incluir alguns aplicativos que não são clientes de email.

message/rfc822 suporta tipos MIME de .mhtml, .mht, .mime

Padma Kumar
fonte
7
Você pode fornecer algum código para produzir a saída desejada?
dira
9
@ becomputer06 enviamos esta: stackoverflow.com/questions/8284706/send-email-via-gmail
Padma Kumar
76
O seletor de intenção diz no apps installed to perform this intentquando eu uso ACTION_SENDTO. Estou usando o Android 4.1.2 e tenho um aplicativo de e-mail instalado ...
ffleandro 28/11
4
O caminho "correto" é a resposta de Magnus. Eu recomendo o pôster original para alterar a resposta aceita.
jhabbott
8
Usar o tipo MIME para executar uma operação de envio é uma má ideia, porque você basicamente instrui o Android a fornecer uma lista de aplicativos que oferecem suporte ao envio de um arquivo do tipo message/rfc822. Isso não é o mesmo que enviar um email. Use o mailto:protocolo, pois é isso que os clientes de email realmente entendem.
Paul Lammertsma
872

A resposta aceita não funciona no 4.1.2. Isso deve funcionar em todas as plataformas:

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..."));

Espero que isto ajude.

Atualização: de acordo com marcwjj , parece que no 4.3, precisamos passar uma matriz de string em vez de uma string para o endereço de email para fazê-lo funcionar. Talvez seja necessário adicionar mais uma linha:

intent.putExtra(Intent.EXTRA_EMAIL, addresses); // String[] addresses

Link de referência

thanhbinh84
fonte
7
Você está certo, e isso também não acontece no 4.2. Portanto, esta é realmente a única resposta correta, obrigado!
MDroidd 31/03
12
Isto é perfeito. Alguém abaixo mencionou que especificar a parte "mailto" é o que restringe as opções disponíveis aos clientes de email. Usar Uri.fromParts ("mailto", "", null) colocará o cursor no campo do destinatário - perfeito para o que eu precisava.
Shaggy
24
Experimente este emailIntent.putExtra (Intent.EXTRA_TEXT, "Sou o corpo do email.");
thanhbinh84
15
Se você não tiver um destinatário específico, isso também funcionará:Uri.fromParts("mailto", "", null)
Phil:
25
Isso não funciona mais no meu Android 4.3. Por favor, confira o doc Android oficial sobre o envio de e-mail como intenção, que funciona perfeitamente: developer.android.com/guide/components/...
marcwjj
244

Existem três abordagens principais:

String email = /* Your email address here */
String subject = /* Your subject here */
String body = /* Your body here */
String chooserTitle = /* Your chooser title here */

1. Personalizado 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. Usando Intentextras:

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. Biblioteca de Suporte 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();
dira
fonte
1
Isso funcionou muito melhor para mim - as outras opções apareceram algumas coisas diretas (Skype, por exemplo) como possíveis manipuladores.
22813 Chris Rae
1
Se você tiver um %símbolo no buffer, alguns caracteres no email resultante não serão codificados corretamente. Você precisa executar a Uri.encodedança sugerida por @minipif.
Giulio Piancastelli
12
Estas são as melhores respostas aqui, não perca seu tempo tentando outras pessoas, a segunda aqui é a que eu escolhi e funciona perfeitamente, mostrando apenas os aplicativos de email puros, não o gDrive, nem o Bluetooth .. etc. Obrigado @ becomputer06
Hugo
1
Tenha cuidado com o caractere "&". Se você tiver & caractere no corpo do e-mail, esse método cortará o corpo após &. Por exemplo, se você enviar o corpo como "eu sou e um corpo de amostra" você vai ter apenas "eu sou"
Emre Koç
4
O ShareCompat resulta em quase todos os aplicativos, não apenas em clientes de email!
rpattabi
111

Isso é citado no documento oficial do Android, eu testei no Android 4.4 e funciona perfeitamente. Veja mais exemplos em 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);
    }
}
marcwjj
fonte
6
Acordado! Estou surpreso que uma resposta como essa esteja tão longe na lista. Acho que deve ter sido uma mudança relativamente recente no Android Docs.
Mikey
Ótimo! confiável, referiu-se à 'Bíblia' dos desenvolvedores de aplicativos Android.
Dev_android # 19/15
1
O cólon após o mailto fez o truque para mim! Eu estava usando "mailto" em vez de "mailto:"
Nigel Crasto 17/03
1
Trabalhando em 5.1.1. As outras opções não funcionam para mim.
Juanin 02/07/19
1
EXTRA_EMAILnão está funcionando para mim, então eu useiUri.parse("mailto: " + myEmail)
Pratik Butani 27/11
89

Uma resposta tardia, embora eu tenha descoberto uma solução que poderia ajudar outras pessoas:

Versão Java

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:[email protected]"));
startActivity(Intent.createChooser(emailIntent, "Send feedback"));


Versão Kotlin

val emailIntent = Intent(Intent.ACTION_SENDTO).apply { 
    data = Uri.parse("mailto:[email protected]")
}
startActivity(Intent.createChooser(emailIntent, "Send feedback"))


Esta foi a minha saída (apenas o Gmail + a Caixa de entrada sugerida):

minha saída

Eu obtive essa solução no site Android Developers .

capt.swag
fonte
2
Para mim, era importante que não houvesse espaço entre mailtoe o e-mail:mailto:[email protected]
AlvaroSantisteban
Está é a resposta correta.
nibbana
36

Isso funciona para mim:

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..."));

ou seja, use a ACTION_SENDTOação em vez da ACTION_SENDação. Eu tentei em alguns dispositivos Android 4.4 e limita o pop-up do seletor a exibir apenas aplicativos de e-mail (E-mail, Gmail, Yahoo Mail etc.) e ele insere corretamente o endereço de e-mail e o assunto no e-mail.

Adil Hussain
fonte
35

Tentar:

intent.setType("message/rfc822");
Magnus
fonte
Ele está certo, eu tentei e ofertas [Drive, E-mail, Gmail, Skype], esta deve ser a "resposta correta"
gurbieta
18
Usar o tipo MIME para executar uma operação de envio é uma má ideia, porque você basicamente instrui o Android a fornecer uma lista de aplicativos que oferecem suporte ao envio de um arquivo do tipo message/rfc822. Isso não é o mesmo que enviar um email. Use o mailto:protocolo, pois é isso que os clientes de email realmente entendem.
Paul Lammertsma
34

Essa é a maneira correta de enviar a intenção de e-mail de acordo com a documentação oficial do desenvolvedor do Android

Adicione estas linhas de código ao seu aplicativo:

Intent intent = new Intent(Intent.ACTION_SEND);//common intent 
intent.setData(Uri.parse("mailto:")); // only email apps should handle this

Opcional: adicione o corpo e o assunto, assim

intent.putExtra(Intent.EXTRA_SUBJECT, "Your Subject Here");
intent.putExtra(Intent.EXTRA_TEXT, "E-mail body" );

Você já adicionou esta linha, mas é bom ter para novos usuários

intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});

Esse será o endereço do destinatário, o que significa que o usuário enviará a você (o desenvolvedor) um email.

Avi Parshan
fonte
@ barnacle.m Obrigado! É também um dos métodos mais simples. O problema é que a minha resposta não recebe o suficiente upvotes :(
Avi Parshan
1
É porque há muitas respostas semelhantes, mas esta aponta a documentação oficial do Android sobre o assunto.
barnacle.m
1
Não foi possível enviar o endereço de e-mail. Corrigi-o assim intent.data = Uri.parse ("mailto: [email protected]")
Hitesh Bisht
18

Finalmente, venha com a melhor maneira de fazer

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);
Ajay Shrestha
fonte
Você é demais, cara.
Ashik
Nenhum problema cara
Ajay Shrestha
2
Funciona perfeitamente.
Solanki Kamlesh
Confira este artigo que o descreve em detalhes: medium.com/@cketti/…
Bruno Bieri
funciona bem, continue assim
Jacks:
15

Se você deseja apenas os clientes de email, use android.content.Intent.EXTRA_EMAILcom uma matriz. Aqui está um exemplo:

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);
Addev
fonte
3
Não, ainda traz muitas outras aplicações - muito mais do queACTION_SENDTO
Dori
10

O código a seguir funciona bem para mim.

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);
Anam Ansari
fonte
8

Dos documentos dos desenvolvedores do 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);
    }
}
marvatron
fonte
8

Editar: não está mais funcionando com novas versões do Gmail

Esta foi a única maneira que encontrei na época para fazê-lo funcionar com qualquer personagem.

A resposta da doreamon é o caminho certo a seguir, pois funciona com todos os caracteres em novas versões do Gmail.

Resposta antiga:


Aqui é minha. Parece funcionar em todas as versões do Android, com suporte para o corpo do sujeito e da mensagem e suporte completo para caracteres utf-8:

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);
}
minipif
fonte
1
+1 Uri.encodeé o caminho correto a seguir. Mas por que chamá-lo duas vezes para sujeito e corpo?
Giulio Piancastelli
Portanto, fazer a codificação você mesmo é apenas uma má ideia. Melhor usar um Intenção adequada com os extras necessárias, ver, por exemplo stackoverflow.com/a/15022222
Giulio Piancastelli
Para mim, esta é a melhor resposta, porque outras soluções funcionam corretamente apenas com alguns dos aplicativos de email. Este funciona com todos os aplicativos de e-mail que testei.
Egis
7

Nenhuma dessas soluções estava funcionando para mim. Aqui está uma solução mínima que funciona no Lollipop. No meu dispositivo, apenas o Gmail e os aplicativos de email nativos aparecem na lista de seletores resultante.

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..."));
Scott
fonte
7

Funciona em todas as versões do 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..."));
Usama Saeed US
fonte
Sua resposta me ajudou. Obrigado
Adnan Khan
5

O código a seguir funcionou para mim !!

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);
Suyog Gunjal
fonte
5

Isso funciona perfeitamente para mim:

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("mailto:" + address));
    startActivity(Intent.createChooser(intent, "E-mail"));
EpicPandaForce
fonte
5

Se você deseja garantir que sua intenção seja tratada apenas por um aplicativo de email (e não por outros aplicativos de mensagens de texto ou sociais), use a ACTION_SENDTOação e inclua o esquema de dados "mailto:". Por exemplo:

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);
    }
}

Encontrei isso em https://developer.android.com/guide/components/intents-common.html#Email

Lamine Slimany
fonte
5

em Kotlin se alguém está olhando

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);
}
mughil
fonte
4

A maioria dessas respostas funciona apenas para um caso simples quando você não está enviando anexos . No meu caso, às vezes preciso enviar anexo (ACTION_SEND) ou dois anexos (ACTION_SEND_MULTIPLE).

Então, peguei as melhores abordagens desse segmento e as combinei. Ele está usando as bibliotecas de suporte, ShareCompat.IntentBuildermas mostro apenas aplicativos que correspondem ao ACTION_SENDTO com "mailto:" uri. Dessa forma, recebo apenas a lista de aplicativos de email com suporte a anexos:

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
}
David Vávra
fonte
Parece que pode ser útil; alguma chance de obtê-lo em Java?
Kyle Humfeld
1
O Kotlin é muito semelhante ao Java, você deve copiar e colar e alterar algumas coisas.
David Vávra 7/03/19
3

O uso intent.setType("message/rfc822");funciona, mas mostra aplicativos extras que não necessariamente lidam com e-mails (por exemplo, GDrive). Usar Intent.ACTION_SENDTOcom setType("text/plain")é o melhor, mas é necessário adicionar setData(Uri.parse("mailto:"))para obter os melhores resultados (apenas aplicativos de email). O código completo é o seguinte:

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"));
Rami Alloush
fonte
Soultion perfeito
Daxesh Vekariya
2

Se você deseja segmentar o Gmail, faça o seguinte. Observe que a intenção é "ACTION_SENDTO" e não "ACTION_SEND" e os campos de intenção extra não são necessários para o 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")); 
}
pcodex
fonte
2

Estou atualizando a resposta de Adil em Kotlin,

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)
}
Kishan Solanki
fonte
Isso falha mesmo quando o Gmail está no aplicativo.
AndroidDev 11/01/19
@AndroidDev em qual dispositivo você está enfrentando o problema?
Kishan Solanki
2

Por favor, use o código abaixo:

                try {

                    String uriText =
                            "mailto:emailid" +
                                    "?subject=" + Uri.encode("Feedback for app") +
                                    "&body=" + Uri.encode(deviceInfo);
                    Uri uri = Uri.parse(uriText);
                    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
                    emailIntent.setData(uri);
                    startActivity(Intent.createChooser(emailIntent, "Send email using..."));
                } catch (android.content.ActivityNotFoundException ex) {
                    Toast.makeText(ContactUsActivity.this, "No email clients installed.", Toast.LENGTH_SHORT).show();
                }
Tushar Bapte
fonte
1

Talvez você deva tentar o seguinte: intent.setType("plain/text");

Encontrei aqui . Eu usei no meu aplicativo e mostra apenas as opções de email e Gmail.

sianis
fonte
2
"texto sem formatação" mostra Bluetooth, Skype etc. Faça o checkout da saída desejada no aplicativo Android Market. As etapas estão listadas na pergunta.
dira
1
Usar o tipo MIME para executar uma operação de envio é uma péssima ideia, porque você basicamente instrui o Android a fornecer uma lista de aplicativos que oferecem suporte ao envio de um arquivo do tipo plain/text, e esse nem é um tipo MIME válido. Isso não é o mesmo que enviar um email. Use o mailto:protocolo, pois é isso que os clientes de email realmente entendem.
Paul Lammertsma
1

Componha um email no cliente de email do telefone:

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, ""));

fonte
1

Usa isto:

boolean success = EmailIntentBuilder.from(activity)
        .to("[email protected]")
        .cc("[email protected]")
        .subject("Error report")
        .body(buildErrorReport())
        .start();

use build gradle:

compile 'de.cketti.mailto:email-intent-builder:1.0.0'
Manish
fonte
1

É isso que eu uso e funciona para mim:

//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);

Isso também permitirá que o usuário escolha seu aplicativo de email preferido. A única coisa que isso não permite é definir o endereço de email do destinatário.

gafanhoto
fonte
Está faltando um "na segunda linha.
Tim
1

Este código está funcionando no meu dispositivo

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..."));
Mahen
fonte
ele só abre Gmail e-mail no meu dispositivo
Mahen
1
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();
}
Ahamadullah Saikat
fonte