邮件发送工具类(自认为可以了)

之前想着,一点点写的!现在想想,算了!一股脑上了...这个是我做过的一个小项目的一个部分,结合网上的,还有自己遇到问题进行了改写!!!

这个类支持群发,附送(多个)附件

首先是一个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);
	}

}



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值