Android编程-发送邮件

发布于 2024-08-30 10:40:24 字数 447 浏览 4 评论 0原文

我在 Android 中使用以下代码来发送邮件:

 Intent emailIntent = new Intent(Intent.ACTION_SEND);
 emailIntent.setType("text/html");
 emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,sendTo );

 emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "test" );
 emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "msg" );

编译并运行代码时,它会询问我选择“GMail”、“蓝牙”等应用程序的选项。但我希望在没有用户的情况下发送邮件干涉。即使通过彩信发送对我来说也会好得多。有人可以建议我该怎么做吗?

I'm using the following piece of code in Android to send a mail:

 Intent emailIntent = new Intent(Intent.ACTION_SEND);
 emailIntent.setType("text/html");
 emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,sendTo );

 emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "test" );
 emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "msg" );

When code is compiled and run, its asking me options of selecting applications like "GMail", "BlueTooth" etc. But I want the mail to be sent without user intervention. Even sending it by MMS will be much better for me. Can some one suggest me how to do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

傻比既视感 2024-09-06 10:40:24

您需要在项目中包含 java 邮件库和依赖项,然后编写一个如下所示的帮助程序类。


public class GMailSender extends javax.mail.Authenticator {
 private String mailhost = "smtp.gmail.com";
 private String user;
 private String password;
 private Session session;

 static {
  Security.addProvider(new JSSEProvider());
 }

 public GMailSender(String user, String password) {
  this.user = user;
  this.password = password;

  Properties props = new Properties();
  props.setProperty("mail.transport.protocol", "smtp");
  props.setProperty("mail.host", mailhost);
  props.put("mail.smtp.auth", "true");
  props.put("mail.smtp.port", "465");
  props.put("mail.smtp.socketFactory.port", "465");
  props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  props.put("mail.smtp.socketFactory.fallback", "false");
  props.setProperty("mail.smtp.quitwait", "false");

  session = Session.getDefaultInstance(props, this);
 }

 protected PasswordAuthentication getPasswordAuthentication() {
  return new PasswordAuthentication(user, password);
 }

 public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception {
  MimeMessage message = new MimeMessage(session);
  DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));
  message.setSender(new InternetAddress(sender));
  message.setSubject(subject);
  message.setDataHandler(handler);
  if (recipients.indexOf(',') > 0)
   message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
  else
   message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
  Transport.send(message);
 }

 public class ByteArrayDataSource implements DataSource {
  private byte[] data;
  private String type;

  public ByteArrayDataSource(byte[] data, String type) {
   super();
   this.data = data;
   this.type = type;
  }

  public ByteArrayDataSource(byte[] data) {
   super();
   this.data = data;
  }

  public void setType(String type) {
   this.type = type;
  }

  public String getContentType() {
   if (type == null)
    return "application/octet-stream";
   else
    return type;
  }

  public InputStream getInputStream() throws IOException {
   return new ByteArrayInputStream(data);
  }

  public String getName() {
   return "ByteArrayDataSource";
  }

  public OutputStream getOutputStream() throws IOException {
   throw new IOException("Not Supported");
  }
 }
}

JSSEProvider 类


@SuppressWarnings("serial")
public final class JSSEProvider extends Provider {
 public JSSEProvider() {
  super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");
  AccessController.doPrivileged(new java.security.PrivilegedAction() {
   public Void run() {
    put("SSLContext.TLS", "org.apache.harmony.xnet.provider.jsse.SSLContextImpl");
    put("Alg.Alias.SSLContext.TLSv1", "TLS");
    put("KeyManagerFactory.X509", "org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");
    put("TrustManagerFactory.X509", "org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");
    return null;
   }
  });
 }
}

发送电子邮件就像这样简单


GMailSender sender = new GMailSender("username", "password");
sender.sendMail("subject", body, "sender", recipients);

You need to include the java mail library and dependencies in your project and then write a helper class like the one below.


public class GMailSender extends javax.mail.Authenticator {
 private String mailhost = "smtp.gmail.com";
 private String user;
 private String password;
 private Session session;

 static {
  Security.addProvider(new JSSEProvider());
 }

 public GMailSender(String user, String password) {
  this.user = user;
  this.password = password;

  Properties props = new Properties();
  props.setProperty("mail.transport.protocol", "smtp");
  props.setProperty("mail.host", mailhost);
  props.put("mail.smtp.auth", "true");
  props.put("mail.smtp.port", "465");
  props.put("mail.smtp.socketFactory.port", "465");
  props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  props.put("mail.smtp.socketFactory.fallback", "false");
  props.setProperty("mail.smtp.quitwait", "false");

  session = Session.getDefaultInstance(props, this);
 }

 protected PasswordAuthentication getPasswordAuthentication() {
  return new PasswordAuthentication(user, password);
 }

 public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception {
  MimeMessage message = new MimeMessage(session);
  DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));
  message.setSender(new InternetAddress(sender));
  message.setSubject(subject);
  message.setDataHandler(handler);
  if (recipients.indexOf(',') > 0)
   message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
  else
   message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
  Transport.send(message);
 }

 public class ByteArrayDataSource implements DataSource {
  private byte[] data;
  private String type;

  public ByteArrayDataSource(byte[] data, String type) {
   super();
   this.data = data;
   this.type = type;
  }

  public ByteArrayDataSource(byte[] data) {
   super();
   this.data = data;
  }

  public void setType(String type) {
   this.type = type;
  }

  public String getContentType() {
   if (type == null)
    return "application/octet-stream";
   else
    return type;
  }

  public InputStream getInputStream() throws IOException {
   return new ByteArrayInputStream(data);
  }

  public String getName() {
   return "ByteArrayDataSource";
  }

  public OutputStream getOutputStream() throws IOException {
   throw new IOException("Not Supported");
  }
 }
}

the JSSEProvider class


@SuppressWarnings("serial")
public final class JSSEProvider extends Provider {
 public JSSEProvider() {
  super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");
  AccessController.doPrivileged(new java.security.PrivilegedAction() {
   public Void run() {
    put("SSLContext.TLS", "org.apache.harmony.xnet.provider.jsse.SSLContextImpl");
    put("Alg.Alias.SSLContext.TLSv1", "TLS");
    put("KeyManagerFactory.X509", "org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");
    put("TrustManagerFactory.X509", "org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");
    return null;
   }
  });
 }
}

Sending the email is then as simple as


GMailSender sender = new GMailSender("username", "password");
sender.sendMail("subject", body, "sender", recipients);

記憶穿過時間隧道 2024-09-06 10:40:24

如果没有用户干预,您无法使用内置应用程序发送电子邮件或短信。您必须像其他答案提到的那样使用外部邮件库。

You can't send an email or sms using the built-in apps without user intervention. You have to use an external mail library like the other answer mentions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文