Enviar intenção de email


588
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_EMAIL, "emailaddress@emailaddress.com");
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?


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


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


7
Você pode fornecer algum código para produzir a saída desejada?
dira


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","abc@gmail.com", 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


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

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

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:abc@xyz.com"));
startActivity(Intent.createChooser(emailIntent, "Send feedback"));


Versão Kotlin

val emailIntent = Intent(Intent.ACTION_SENDTO).apply { 
    data = Uri.parse("mailto:abc@xyz.com")
}
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 .


2
Para mim, era importante que não houvesse espaço entre mailtoe o e-mail:mailto:abc@xyz.com
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[] { "me@somewhere.com" });
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.


35

Tentar:

intent.setType("message/rfc822");

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[]{"youremailaddress@aviparshan.com"});

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


@ 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: somemail@xyz.com")
Hitesh Bisht

18

Finalmente, venha com a melhor maneira de fazer

String to = "test@gmail.com";
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);

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

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

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

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

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

7

Funciona em todas as versões do android:

String[] TO = {"email@server.com"};
    Uri uri = Uri.parse("mailto:email@server.com")
            .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..."));

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

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

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


5

em Kotlin se alguém está olhando

val emailArrray:Array<String> = arrayOf("travelagentsupport@kkk.com")
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);
}

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
}

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:IT@RMAsoft.NET"));
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"));

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:youremail@gmail.com" + 
    "?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")); 
}

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) { "test@email.com" })
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)
}

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

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.


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[] { "some@email.address" });
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
intent.putExtra(Intent.EXTRA_TEXT, "mail body");
startActivity(Intent.createChooser(intent, ""));

1

Usa isto:

boolean success = EmailIntentBuilder.from(activity)
        .to("support@example.org")
        .cc("developer@example.org")
        .subject("Error report")
        .body(buildErrorReport())
        .start();

use build gradle:

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

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.


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[] {"mahendrarajdhami@gmail.com"});
mIntent.putExtra(Intent.EXTRA_SUBJECT, "");
startActivity(Intent.createChooser(mIntent, "Send Email Using..."));

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();
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.