Android发送电子邮件

时间:2017-03-30 10:31:34

标签: android

我写了这段代码发送电子邮件但是给我"没有应用程序可以执行此操作"错误?!!谁能帮我 。!

public class MainActivity extends Activity {
Button startBtn;
Intent chooser = null , emailIntent = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main);


    startBtn = (Button) findViewById(R.id.sendEmail);
    startBtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            sendEmail();
        }
    });
}

protected void sendEmail()

    {
        String[] TO = {"a.gadelkareem94@gmail.com"};
        emailIntent = new Intent(Intent.ACTION_SEND);
        emailIntent.setData(Uri.parse("mailto:"));
        emailIntent.putExtra(Intent.EXTRA_EMAIL, TO);
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Hello");
        emailIntent.putExtra(Intent.EXTRA_TEXT, "Thanks For Your Job");
        emailIntent.setType("message/rfc822");
        emailIntent.setPackage("com.Gmail");
        chooser = Intent.createChooser(emailIntent, "Send Email");
        startActivity(chooser);
    }

}

但没有电子邮件发送

2 个答案:

答案 0 :(得分:1)

您应该使用intent.setType("text/plain");

我们可以使用"message/rfc822"代替“text/plain"作为MIME类型。但是,这并不表示”仅提供电子邮件客户端“ - 它表示”提供支持message / rfc822数据的任何内容“这可能很容易包括一些不是电子邮件客户端的应用程序。

message / rfc822支持.mhtml,.mht,.mime的MIME类型

asredy在这里回答:Send Email Intent

答案 1 :(得分:0)

您的代码段存在一些问题。

  1. 负责“没有应用可以执行此操作”的人是emailIntent.setPackage("com.Gmail")。这只会考虑应用程序ID为“com.Gmail”的应用程序作为intent的目标。但是,“com.Gmail”不是Gmail应用的应用ID。你不应该限制选择。所以,让我们放弃这一行。
  2. ACTION_SEND是一般的共享操作。这适用于电子邮件应用,但有更好的方法:使用ACTION_SENDTO。使用ACTION_SENDTO,唯一的输入是mailto URI。包含示例中的收件人,主题和文本的内容如下所示:mailto:a.gadelkareem94@gmail.com?subject=Hello&body=Thanks%20For%20Your%20Job
  3. 用户倾向于只使用一个电子邮件应用并将其设置为默认值。通过使用Intent.createChooser(),您必须每次都手动选择他们的电子邮件应用程序(假设安装了多个)。
  4. 考虑到这一切,我们最终得到:

    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
    emailIntent.setData(Uri.parse("mailto:a.gadelkareem94@gmail.com?subject=Hello&body=Thanks%20For%20Your%20Job"));
    try {
        startActivity(emailIntent);
    } catch (ActivityNotFoundException e) {
        //TODO: Display message that no email app was found
    }
    

    为了减轻这一切,我写了一下图书​​馆EmailIntentBuilder。您可以像这样使用它:

    EmailIntentBuilder.from(context)
            .to("a.gadelkareem94@gmail.com")
            .subject("Hello")
            .body("Thanks For Your Job")
            .start();
    

    我还写了一篇博文,更详细地解释了所有这些:Sending Email using Intents