java实现发送邮件

 

                                        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("发送失败!");
		}
	}
}

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值