之前想着,一点点写的!现在想想,算了!一股脑上了...这个是我做过的一个小项目的一个部分,结合网上的,还有自己遇到问题进行了改写!!!
这个类支持群发,附送(多个)附件
首先是一个bean类,用于封装发送邮件需要的相应的内容:
package com.binary.biz;
import java.io.File;
public class Content {
// 存放相應的发送人(即是用户名)
private String Sender;
// private int num;
//存放收件人列表
private String[] receive;
//邮件的主题
private String subject;
//文本的内容
private String text;
//填写相应邮件服务器的stmp服务器如:stmp.126.com
private String mailHost;
//用户的密码
private String pwd;
//对应的协议烈性
private String protocol;
//存放相应的附件的文件
private File[] files;
public Content() {
super();
}
public Content(String sender, String[] receive, String subject,
String text, String mailHost, String pwd, String protocol,
File[] files) {
super();
Sender = sender;
this.receive = receive;
this.subject = subject;
this.text = text;
this.mailHost = mailHost;
this.pwd = pwd;
this.protocol = protocol;
this.files = files;
}
public String getSender() {
return Sender;
}
public void setSender(String sender) {
Sender = sender;
}
public String[] getReceive() {
return receive;
}
public void setReceive(String[] receive) {
this.receive = receive;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getMailHost() {
return mailHost;
}
public void setMailHost(String mailHost) {
this.mailHost = mailHost;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getProtocol() {
return protocol;
}
public void setProtocol(String protocol) {
this.protocol = protocol;
}
public File[] getFiles() {
return files;
}
public void setFiles(File[] files) {
this.files = files;
}
}
这是一个真正实现邮件功能的类:
package com.binary.biz;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
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;
/**
* @author 后飞IT 这个类是用于发送邮件的 功能有:支持群发邮件
* 支持附送附件(多附件,消除了没有附件会报错的bug,以及添加了附件后,文本内容会被覆盖的情况)
*/
public class MailConnect {
public static boolean sendmail(Content content) {
try {
/**
* 获取系统当前属性
*/
Properties props = System.getProperties();
/**
* 通过系统属性创建一个会话类
*/
Session s = Session.getInstance(props);
/**
* 通过邮件会话类新建一个消息对象
*/
MimeMessage message = new MimeMessage(s);
/**
* 发件人 邮箱地址 个性名字
*/
InternetAddress from = new InternetAddress(content.getSender());
// 设置发件人
message.setFrom(from);
// 设置收件人地址的数组
Address[] receive = new Address[content.getReceive().length];
// 将收件人列表的信息循环出来添加到Address[] receive中
for (int i = 0; i < content.getReceive().length; i++) {
Address toAddress = new InternetAddress(content.getReceive()[i]);
receive[i] = toAddress;
// System.out.println(content.getReceive()[i].toString());
}
// 设置收件人
message.setRecipients(MimeMessage.RecipientType.TO, receive);
// 邮件标题
message.setSubject(content.getSubject());
// 下面的这个部分是最值得看的一个部分
// 下面代码是发送附件
// The MimeMultipart class is an implementation of the abstract
// Multipart class
// that uses MIME(Multipurpose Internet Mail Extensions) conventions
// for the multipart data.
/**
* 用于存放multipart数据
*/
Multipart multipart = new MimeMultipart();
// 直接用下面的这个会被覆盖
// message.setContent(content, "text/html;charset=GBK");
// This class models a Part that is contained within a
// Multipart.(包含在Multipart中的一部分)
BodyPart contentPart = new MimeBodyPart();
// 所有要这个方法来设置下 文本的内容
if (content.getText() != null) {
// 为BodyPart设置文本内容
contentPart.setText(content.getText());
// 将BodyPart将添加到MIME的实验
multipart.addBodyPart(contentPart);
}
// 真正添加附件
if (content.getFiles() != null) {
// 循环添加附件
for (int i = 0; i < content.getFiles().length; i++) {
// 创建一个MimeBodyPart对象
MimeBodyPart messageBodyPart = new MimeBodyPart();
// 往对象中添加附件
messageBodyPart.attachFile(content.getFiles()[i]);
// 将每个对象添加到存放MULTIPART数据的对象中
multipart.addBodyPart(messageBodyPart);
}
// 然后再将这个存放
message.setContent(multipart);
} else {
message.setContent(multipart);
}
// 通过session获得一个传输对象
Transport transport = s.getTransport(content.getProtocol());
// smtp验证,就是你用来发邮件的邮箱用户名密码,即是连接邮件服务器
transport.connect(content.getMailHost(), content.getSender(),
content.getPwd());
// 利用传输对象,发送信息
transport.sendMessage(message, message.getAllRecipients());
// 关闭传输对象
transport.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}
最后一个是一个测试类!照着写就行了~~
package Test;
import java.io.File;
import com.binary.biz.Content;
import com.binary.biz.MailConnect;
/**
* @author 后飞IT
* 这是一个测试类,用于测试MailConnect类的
*/
public class Test {
public static void main(String[] args) {
Content content=new Content();
content.setSender("xxxxx@126.com");
//设置地址
content.setMailHost("smtp.126.com");
content.setPwd("xxxxx");
//当文件名是中文名的时候是会有问题的,建议使用当时的时间对文件进行重命名
content.setFiles(new File[]{new File("c:\\setup.log"),new File("c:\\InstallLog.log"),new File("c:\\新建文本文档.txt")});
content.setProtocol("smtp");
//添加收件人的String数组
content.setReceive(new String[]{"763464507@qq.com"});
//设置邮件的主题
content.setSubject("test");
//设置邮件的文本
content.setText("wenben");
MailConnect.sendmail(content);
}
}