Java实现发送邮件的工具类
一、首先导入
二、实现代码如下:
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import javax.mail.BodyPart;
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;
import org.nutz.lang.Strings;
import org.nutz.service.Service;
import com.wonders.tiles.dic.DicDataUtils;
/**
* 发送邮件工具类
* @author ywx
*
*/
public class MailUtils extends Service{
/**
* 服务器配置
*/
private static final String HOST="pop3.wondersgroup.com";
/**
* 863团队
*/
public static final String GROUP_863 = "66";
/**
* 北京团队
*/
public static final String GROUP_BEIJING = "70";
/**
* 管理员
*/
public static final String GROUP_MANAGER = "杨";
/**
* 发送指定项目组所有人员邮件 .
* @param fromName 发送人邮件地址,如yangwenxue@wondersgroup.com
* @param groupName 接受一下三种常量:MailUtils.GROUP_863;MailUtils.GROUP_BEIJING;MailUtils.GROUP_FANGDI
* @param subject 标题
* @param ext 邮件内容,支持html格式
*/
public static void sendAllMail(String from,String groupName,String subject,String ext){
Map<String, String> dictionaryMap = DicDataUtils.getInstance().getDic(Integer.valueOf(groupName));
for (Iterator<String> iter = dictionaryMap.keySet().iterator(); iter.hasNext();) {
String key = (String)iter.next();
String toName = dictionaryMap.get(key);
if(!Strings.isBlank(toName)){
sendMail(from, toName, subject, ext);
}
}
}
/**
* 发送指定项目组所有人员邮件,发件人直接通过人员名称发送 .
* @param fromName 发送人名称
* @param groupName 接受一下三种常量:MailUtils.GROUP_863;MailUtils.GROUP_BEIJING;MailUtils.GROUP_FANGDI
* @param subject 标题
* @param ext 邮件内容,支持html格式
*/
public static void sendAllMailbyName(String fromName,String groupName,String subject,String ext){
Map<String, String> dictionaryMap = DicDataUtils.getInstance().getDic(Integer.valueOf(groupName));
for (Iterator<String> iter = dictionaryMap.keySet().iterator(); iter.hasNext();) {
String key = (String)iter.next();
String toName = dictionaryMap.get(key);
if(!Strings.isBlank(toName)){
sendMail(DicDataUtils.getInstance().getDicData(new Integer(68), fromName), toName, subject, ext);
}
}
}
/**
* 单个发送邮件,直接通过人员名称发送 .
* @param fromName 发送人名称
* @param toName 接受人名称
* @param subject 标题
* @param ext 邮件内容,支持html格式
*/
public static void sendMailbyName(String fromName,String toName,String subject,String ext){
sendMail(DicDataUtils.getInstance().getDicData(new Integer(68), fromName), DicDataUtils.getInstance().getDicData(new Integer(68), toName), subject, ext);
}
/**
* 单个发送邮件,直接通过邮件地址发送 .
* @param from 发送人邮件地址,如yangwenxue@wondersgroup.com
* @param to 接收人的邮件地址,如yangwenxue@wondersgroup.com
* @param subject 标题
* @param ext 邮件内容,支持html格式
*/
public static void sendMail(String from,String to,String subject,String ext){
Properties props = new Properties();
// 设置发送邮件的邮件服务器的属性
//props.put("mail.smtp.host", getProperty("smtp").toString());
props.put("mail.smtp.host", HOST);
// 需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
props.put("mail.smtp.auth", "false");
// 用刚刚设置好的props对象构建一个session
Session session = Session.getDefaultInstance(props);
// 有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使
// 用(你可以在控制台(console)上看到发送邮件的过程)
session.setDebug(true);
// 用session为参数定义消息对象
MimeMessage message = new MimeMessage(session);
try {
// 加载发件人地址
message.setFrom(new InternetAddress(from));
// 加载收件人地址
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// 加载标题
message.setSubject(subject);
// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart();
// 设置邮件的文本内容
BodyPart contentPart = new MimeBodyPart();
//设置HTML内容 >>>>>>>>>>发送html的邮件
contentPart.setContent(subject,"text/html; charset=utf-8");
contentPart.setContent(ext,"text/html; charset=utf-8");
multipart.addBodyPart(contentPart);
// 将multipart对象放到message中
message.setContent(multipart);
// 保存邮件
message.saveChanges();
// 发送邮件
Transport transport = session.getTransport("smtp");
// 连接服务器的邮箱
// transport.connect(getProperty("smtp").toString(), "", "");
transport.connect(HOST, "", "");
// 把邮件发送出去
transport.sendMessage(message, message.getAllRecipients());
transport.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]){
String ext= "<div style='text-align: center;font-size: 24px;font-weight: bold'>邮件群发测试第二次,不要回</div><div right_style01'><dl><dt><h3>会议要素</h3><ul ><li><b>时间:2015-08-25 12</b></li><li><b>地点:863的302会议室</b></li><li><b>人员:dream</b></li></ul></dt></dl></div><div right_style01'><dl><dt><h3>会议议题</h3><ul >时间:下午1:301.每个人进行上周工作的实施情况(成果+问题),限5分钟2.新毕业生的学习总结(开发心得+建议+问题),限10分钟。</ul></dt></dl></div><div right_style01'><dl><dt><h3>会议纪要</h3></dt></dl></div></div><div >TEAMPLAY 版权所有 Copyright 2015 All Rights Reserved </div></body>";
//MailUtils.sendMailbyName("张三", "李四", "测试发送", ext);
MailUtils.sendAllMailbyName("李四", MailUtils.GROUP_863, "邮件群发测试第二次", ext);
}
}
以上为简单的邮件发送功能,下面带附件的功能:
Bean类:
package com.ywx.entity;
import java.util.Vector;
public class MailBean {
private String to; // 收件人
private String from; // 发件人
private String host; // SMTP主机
private String username; // 发件人的用户名
private String password; // 发件人的密码
private String subject; // 邮件主题
private String content; // 邮件正文
Vector<String> file; // 多个附件
private String filename; // 附件的文件名
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
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;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public Vector<String> getFile() {
return file;
}
public void attachFile(String fileName) {
if (file == null) {
file = new Vector<String>();
}
file.addElement(fileName);
}
}
发送邮件业务代码:
package com.ywx.utils;
import java.util.Date;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
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;
import javax.mail.internet.MimeUtility;
import com.ywx.entity.MailBean;
/**
* 发送带附件的邮件.
*/
public class SendMailUtils {
public String toChinese(String text) {
try {
text = MimeUtility.encodeText(new String(text.getBytes(), "UTF-8"), "UTF-8", "B");
} catch (Exception e) {
e.printStackTrace();
}
return text;
}
public boolean sendMail(MailBean mb) {
String host = mb.getHost();
final String username = mb.getUsername();
final String password = mb.getPassword();
String from = mb.getFrom();
String to = mb.getTo();
String subject = mb.getSubject();
String content = mb.getContent();
String fileName = mb.getFilename();
Vector<String> file = mb.getFile();
Properties props = System.getProperties();
props.put("mail.smtp.host", host); // 设置SMTP的主机
props.put("mail.smtp.auth", "true"); // 需要经过验证
Session session = Session.getInstance(props, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
InternetAddress[] address = { new InternetAddress(to) };
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(toChinese(subject));
Multipart mp = new MimeMultipart();
MimeBodyPart mbpContent = new MimeBodyPart();
mbpContent.setText(content);
mp.addBodyPart(mbpContent);
/* 往邮件中添加附件 */
if (file != null) {
Enumeration<String> efile = file.elements();
while (efile.hasMoreElements()) {
MimeBodyPart mbpFile = new MimeBodyPart();
fileName = efile.nextElement().toString();
FileDataSource fds = new FileDataSource(fileName);
mbpFile.setDataHandler(new DataHandler(fds));
mbpFile.setFileName(toChinese(fds.getName()));
mp.addBodyPart(mbpFile);
}
System.out.println("添加成功");
}
msg.setContent(mp);
msg.setSentDate(new Date());
Transport.send(msg);
} catch (MessagingException me) {
me.printStackTrace();
return false;
}
return true;
}
public static void main(String[] args) {
MailBean mb = new MailBean();
// 设置SMTP主机(163),若用126,则设为:smtp.126.com
mb.setHost("smtp.qiye.163.com");
mb.setUsername("yangwenxue@xxx.com"); // 设置发件人邮箱的用户名
mb.setPassword("xxxxxxxx"); // 设置发件人邮箱的密码
mb.setFrom("yangwenxue@xxx.com"); // 设置发件人的邮箱
mb.setTo("xxxxxx@qq.com"); // 设置收件人的邮箱
mb.setSubject("测试_JavaMail"); // 设置邮件的主题
mb.setContent("本邮件中包含三个附件,请检查!"); // 设置邮件的正文
mb.attachFile("D:\\data\\DownLoadServiceImpl.class"); // 往邮件中添加附件
mb.attachFile("D:\\data\\templete.zip");
SendMailUtils sm = new SendMailUtils();
System.out.println("正在发送邮件...");
// 发送邮件
if (sm.sendMail(mb)) {
System.out.println("发送成功!");
} else {
System.out.println("发送失败!");
}
}
}