Android中使用JavaMail发送Email带群发加附件


之前写了一篇关于Android中发送Email的文章,里面用到的是隐式的intent来激活系统自带的邮件发送功能。

相关阅读:Android中用intent发送邮件

今天花了一天来自己实现这个邮件发送功能(主要是网上的代码太坑...)

这里用gmail作为发送方的邮箱,其他网易,新浪什么的应该也ok,QQ貌似不行。

资源来自:javamail-android

下面是实现步骤及相关代码。

项目添加jar包

将activation.jar,additionnal.jar,mail.jar放到项目的libs 文件夹。然后在项目中选中这三个包,右击->Build Path->Add to buildPath.

添加成功后项目就像这样.

 

 

 

项目中添加Mail类

package com.example.mailtest;
import java.util.Date;
import java.util.Properties;
import javax.activation.CommandMap;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.activation.MailcapCommandMap;
import javax.mail.BodyPart;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;


public class Mail extends javax.mail.Authenticator {
 private String _user;
 private String _pass;

 private String[] _to;
 private String _from;

 private String _port;
 private String _sport;

 private String _host;

 private String _subject;
 private String _body;

 private boolean _auth;

 private boolean _debuggable;

 private Multipart _multipart;


 public Mail() {
  _host = "smtp.gmail.com"; // default smtp server
  _port = "465"; // default smtp port
  _sport = "465"; // default socketfactory port

  _user = ""; // username
  _pass = ""; // password
  _from = ""; // email sent from
  _subject = ""; // email subject
  _body = ""; // email body

  _debuggable = false; // debug mode on or off - default off
  _auth = true; // smtp authentication - default on

  _multipart = new MimeMultipart();

  // There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added.
  MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
  mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
  mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
  mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
  mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
  mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
  CommandMap.setDefaultCommandMap(mc);
 }

 public Mail(String user, String pass) {
  this();

  _user = user;
  _pass = pass;
 }
 public void setTo(String[] toArr) {
  this._to = toArr;
 }

 public void setFrom(String string) {
  this._from = string;
 }

 public void setSubject(String string) {
  this._subject = string;
 }
 public boolean send() throws Exception {
  Properties props = _setProperties();

  if(!_user.equals("") && !_pass.equals("") && _to.length > 0 && !_from.equals("") && !_subject.equals("") && !_body.equals("")) {
   Session session = Session.getInstance(props, this);

   MimeMessage msg = new MimeMessage(session);

   msg.setFrom(new InternetAddress(_from));

   InternetAddress[] addressTo = new InternetAddress[_to.length];
   for (int i = 0; i < _to.length; i++) {
    addressTo[i] = new InternetAddress(_to[i]);
   }
   msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);

   msg.setSubject(_subject);
   msg.setSentDate(new Date());

   // setup message body
   BodyPart messageBodyPart = new MimeBodyPart();
   messageBodyPart.setText(_body);
   _multipart.addBodyPart(messageBodyPart);
   // Put parts in message
   msg.setContent(_multipart);
   // send email
   Transport.send(msg);

   return true;
  } else {
   return false;
  }
 }

 public void addAttachment(String filename) throws Exception {
  BodyPart messageBodyPart = new MimeBodyPart();
  DataSource source = new FileDataSource(filename);
  messageBodyPart.setDataHandler(new DataHandler(source));
  messageBodyPart.setFileName(filename);

  _multipart.addBodyPart(messageBodyPart);
 }

 @Override
 public PasswordAuthentication getPasswordAuthentication() {
  return new PasswordAuthentication(_user, _pass);
 }

 private Properties _setProperties() {
  Properties props = new Properties();

  props.put("mail.smtp.host", _host);

  if(_debuggable) {
   props.put("mail.debug", "true");
  }

  if(_auth) {
   props.put("mail.smtp.auth", "true");
  }

  props.put("mail.smtp.port", _port);
  props.put("mail.smtp.socketFactory.port", _sport);
  props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  props.put("mail.smtp.socketFactory.fallback", "false");

  return props;
 }

 // the getters and setters
 public String getBody() {
  return _body;
 }

 public void setBody(String _body) {
  this._body = _body;
 }

 // more of the getters and setters …..
}

  • 1
  • 2
  • 3
  • 下一页

相关内容

    暂无相关文章