您的位置:首页 > 移动开发 > Android开发

Android上发送带附件的邮件

2016-07-29 00:00 363 查看
准备工作-下载最新版本的JMail

https://java.net/projects/javamail/pages/Home#Download_JavaMail_1.5.2_Release

http://www.oracle.com/technetwork/java/javase/downloads/index-135046.html

在android上发送邮件方式:

第一种:借助GMail APP客户端,缺点是必须使用GMail帐号,有点是比较方便

不需要写很多代码,但是不是很灵活。

第二种:基于JMail实现,可以很灵活的自己设置各种属性,不需要GMail帐号

在第二种方式的实现之前,看一下JMail对EMail结构的划分:



基于SMTP协议发送EMail,所以客户端必须要知道SMTP的主机

腾讯邮件的SMTP主机为:stmp.qq.com端口为465基于SSL协议

最后我做了一个简单的封装,把发送文本加图像附件的功能做出了

一个单独的Class,只要调用一下即可完成:

package com.gloomyfish.jmail.demo;

import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Multipart;
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 EMailSender {

private String host;
private String port;
private String userName;
private String password;
private String[] images;

public String[] getImagePath() {
return images;
}

public void setImagePath(String[] imagePath) {
this.images = imagePath;
}

public EMailSender(String host, String port, String userName, String password)
{
this.host = host;
this.port = port;
this.userName = userName;
this.password = password;
}

public void sendEmail(String subject, String recepits, String sender, String content)
{
Properties props = new Properties();
props.put("mail.smtp.host", host);  //设置smtp的服务器地址
// props.put("mail.smtp.starttls.enable", "true");
// props.put("mail.smtp.port", port); // 设置端口
// props.put("mail.smtp.auth", "true"); //设置smtp服务器要身份验证。

props.put("mail.smtp.socketFactory.port", port);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", port);

// 返回授权Base64编码
PopupAuthenticator auth = new PopupAuthenticator(userName, password);
// 获取会话对象
Session session = Session.getInstance(props, auth);
// 设置为DEBUG模式
session.setDebug(true);

// 邮件内容对象组装
MimeMessage message = new MimeMessage(session);
try
{
Address addressFrom = new InternetAddress(sender, "Jia Zhi Gang");
Address addressTo = new InternetAddress(recepits, "My QQ E-Mail");
message.setSubject(subject);
message.setSentDate(new Date());
message.setFrom(addressFrom);
message.addRecipient(Message.RecipientType.TO,addressTo);

// 邮件文本/HTML内容
Multipart multipart = new MimeMultipart();
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(content, "text/html");
multipart.addBodyPart(messageBodyPart);

// 添加邮件附件
if (images != null && images.length > 0) {
for (String filePath : images) {
MimeBodyPart attachPart = new MimeBodyPart();
DataSource source = new FileDataSource(filePath);
attachPart.setDataHandler(new DataHandler(source));
attachPart.setFileName(filePath);
multipart.addBodyPart(attachPart);
}
}

// 保存邮件内容
message.setContent(multipart);

// 获取SMTP协议客户端对象,连接到指定SMPT服务器
Transport transport = session.getTransport("smtp");
transport.connect(host, Integer.parseInt(port), userName, password);
System.out.println("connet it success!!!!");

// 发送邮件到SMTP服务器
Thread.currentThread().setContextClassLoader( getClass().getClassLoader() );
Transport.send(message);
System.out.println("send it success!!!!");

// 关闭连接
transport.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}

public String getHost() {
return host;
}

public void setHost(String host) {
this.host = host;
}

public String getPort() {
return port;
}

public void setPort(String port) {
this.port = port;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

}


用户授权类:

package com.gloomyfish.jmail.demo;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

class PopupAuthenticator extends Authenticator {
private String userName;
private String password;
public PopupAuthenticator(String userName, String password)
{
this.userName = userName;
this.password = password;
}
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
}
特别注意:

1.在android上发送邮件必须自己导入三个相关的JAVA文件



上述JAR文件的下载地址已经在文章开始处给出!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: