android - 如何在不打开gmail撰写页面的情况下直接通过gmail发送邮件

标签 android email android-intent gmail jakarta-mail

通过使用此代码,我可以直接获取 gmail 撰写页面,但我想直接发送此邮件而不进入 gmail 页面。意味着当我点击 Activity 的发送按钮时,它应该直接将邮件发送到特定的收件人,而不会在 gmail 撰写页面上出现。

protected void sendEmail() {

    String[] recipients = { recieverId.getText().toString() };
    Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));

    email.setType("message/rfc822");

    email.putExtra(Intent.EXTRA_EMAIL, recipients);
    email.putExtra(Intent.EXTRA_SUBJECT, mailSubject.getText().toString());
    email.putExtra(Intent.EXTRA_TEXT, mailBody.getText().toString());

    final PackageManager pm = getPackageManager();
    final List<ResolveInfo> matches = pm.queryIntentActivities(email, 0);
    ResolveInfo best = null;
    for (final ResolveInfo info : matches)
      if (info.activityInfo.packageName.endsWith(".gm") ||
          info.activityInfo.name.toLowerCase().contains("gmail"))
          best = info;
    if (best != null)
      email.setClassName(best.activityInfo.packageName, best.activityInfo.name);

    try {

    startActivity(email);
    } catch (android.content.ActivityNotFoundException ex) {

        Toast.makeText(getApplicationContext(),
                "No email client installed.", Toast.LENGTH_LONG).show();

    }

}

最佳答案

如果通过应用程序发送,则需要用户干预。

无需用户干预,您可以按如下方式发送:

  1. 从客户端 apk 发送电子邮件。这里mail.jar,activation.jar是发送java邮件所必需的。如果添加这些 jar ,可能会增加 APK 大小。 Link

  2. 或者,您可以在服务器端代码中使用 Web 服务,它将使用相同的 mail.jar 和 activation.jar 来发送电子邮件。您可以通过 asynctask 调用网络服务并发送电子邮件。引用相同的链接

关于android - 如何在不打开gmail撰写页面的情况下直接通过gmail发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25032681/

相关文章:

linux - 如何从 Linux 发送文件到电子邮件?

ruby-on-rails - ActionMailer 的机架空间 smtp

Android - 显示来自可绘制资源的图像

android - 在Android Gradle中,有没有办法使用本地快照依赖?

c++ - 看似基本的C++问题

java - 卡在从 JSONObject 获取 JSONArray 上

android - Android "complete action using.."对话框的规则是什么?

java - Android 中按钮设置为 Null 并生成 NullPointerException

android - 如何区分客户端设备?

Android smack 服务器回执确认