机器人编程 - 发送邮件 [英] Android Programming - Send mail

查看:239
本文介绍了机器人编程 - 发送邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用下面这段code在Android中发送邮件:

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

在code编译和运行,它问我选择像GMail的,蓝牙等应用程序的选择,但我想,无需用户干预发送邮件。即使通过彩信发送这将是更适合我更好。可有一个人建议我该怎么办呢?

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?

推荐答案

您需要包含Java邮件库和依赖于你的项目,然后写一个类似下面的一个辅​​助类。

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

在JSSEProvider类

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

这篇关于机器人编程 - 发送邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆