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

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

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

资源来自:javamail-android

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

项目添加jar包

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

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

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

项目中添加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 …..
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/8c1aec5a7aaffcbd70c8f9fb9808597c.html