Android:使用Intent发送电子邮件 - 仅提供电子邮件应用程序无效

时间:2017-01-02 15:58:04

标签: java android email android-intent

我正在尝试创建一个发送电子邮件的意图活动。 使用

public void emailSend(View view){
        Intent emailIntent = new Intent(Intent.ACTION_SEND);
        emailIntent.setData(Uri.parse("mailto:"));
        emailIntent.setType("plain/text");
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Nächstes Treffen");
        emailIntent.putExtra(Intent.EXTRA_EMAIL,adressListe);
        if (emailIntent.resolveActivity(getPackageManager()) != null){
            startActivity(emailIntent);
        }
    }

为我提供的不仅仅是电子邮件应用。 使用

public void emailSend(View view){
        Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
        emailIntent.setData(Uri.parse("mailto:"));
        emailIntent.setType("plain/text");
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Nächstes Treffen");
        emailIntent.putExtra(Intent.EXTRA_EMAIL,adressListe);
        if (emailIntent.resolveActivity(getPackageManager()) != null){
            startActivity(emailIntent);
        }
    }

单击按钮时没有任何反应。 对于

emailIntent.setType("plain/text");

也尝试了

emailIntent.setType("messageage/rfc822");

emailIntent.setType("*/*");

所有结果各不相同,但没有一个只是推迟电子邮件应用程序。

你知道如何解决这个问题吗?非常感谢帮助!

谢谢!

5 个答案:

答案 0 :(得分:0)

这是我工作的代码:

Intent intentMail = new Intent(Intent.ACTION_SEND);
intentMail.setType("message/rfc822");
intentMail.putExtra(Intent.EXTRA_EMAIL, new String[]{
                    "mailto@email.com" }); // the To mail.
intentMail.putExtra(Intent.EXTRA_SUBJECT, "Subject goes here");
intentMail.putExtra(Intent.EXTRA_TEXT, "Content goes here");

// now we have created the mail, lets try and send it.
try {
    startActivity(Intent.createChooser(intentMail, "Message to User to do what next"));
} catch (android.content.ActivityNotFoundException ex) {
    Toast.makeText(Activity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}

如果这不起作用,请告诉我。哦,你有错误日志吗?

*编辑,这是我找到我的代码的地方,所以很简单。 Source

答案 1 :(得分:0)

当我使用意图android.content.Intent.ACTION_SENDTO对我不起作用,因为它显示许多应用程序,一些应用程序不是电子邮件客户端。我找到了这种方式,它对我来说很有效。

Intent testIntent = new Intent(Intent.ACTION_VIEW);  
Uri data = Uri.parse("mailto:?subject=" + "text subject" + "&body=" + "text content" + "&to=" + "email@example.com");  
testIntent.setData(data);  
startActivity(testIntent);

答案 2 :(得分:0)

使用下一种方法时,我只会看到电子邮件客户端:

    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
    emailIntent.setData(Uri.parse("mailto:"));
    emailIntent.putExtra(Intent.EXTRA_EMAIL, new String [] {someaddress@gmail.com}); 
    emailIntent.putExtra(Intent.EXTRA_SUBJECT,"Email subject"));
    Intent chooser = Intent.createChooser(emailIntent, "Mail to ..");
    if (emailIntent.resolveActivity(getPackageManager()) != null) {
        startActivity(chooser);
    }
    else
       //Do something if there's no Email client

答案 3 :(得分:0)

最后,在尝试了所有这些帖子的变体之后,我想到了一个效果很好的帖子:

fun sendEmail(context: Context, email: String, subject: String = "") {
    try {
        context.startActivity(
            Intent(Intent.ACTION_SENDTO).apply {
                data = (Uri.parse("mailto:$email"))
                    .buildUpon()
                    .appendQueryParameter(
                        "subject", subject
                    ).appendQueryParameter(
                        "to", email
                    )
                    .build()
            }
        )
    } catch (e: Exception) {
        Timber.e("failed to open mail client")
    }
}

答案 4 :(得分:-2)

这样就可以了!

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