文档章节

java发送Email代码实现

指尖残雪
 指尖残雪
发布于 2016/05/22 23:56
字数 738
阅读 28
收藏 2

非常感谢http://www.codefans.net/articles/209.shtml博文作者。

代码非常简单,就不做过多解释。

首先需要导入mail.jar,本例子使用的jar包下载地址:http://download.csdn.net/detail/harderxin/4451541

直接上代码!

package org.dyb.email;

import java.util.Properties;

import javax.mail.Address;
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;

public class Mail {

	private MimeMessage mimeMsg;
	private Session session;
	private Properties props;
	private String username;
	private String password;
	private Multipart mp;

	public Mail() {
	}

	public Mail(String smtp) {
		setSmtpHost(smtp);
		createMimeMessage();
	}

	private void setSmtpHost(String smtp) {
		System.out.println("设置系统属性:mail.smtp.host  " + smtp);
		if (null == props) {
			props = System.getProperties();
		}
		props.put("mail.smtp.host", smtp);
	}

	private boolean createMimeMessage() {
		try {
			System.out.println("准备获取邮件会话对象!");
			session = Session.getDefaultInstance(props, null);
		} catch (Exception e) {
			System.out.println("获取邮件会话错误!" + e);
			return false;
		}
		System.out.println("准备创建MIME邮件对象!");
		try {
			mimeMsg = new MimeMessage(session);
			mp = new MimeMultipart();
			return true;
		} catch (Exception e) {
			System.out.println("创建MIME邮件对象失败!" + e);
			return false;
		}
	}

	/**
	 * 定义SMTP是否需要验证
	 */
	public void setNeedAuth(boolean need) {
		System.out.println("设置smtp身份认证:mail.smtp.auth = " + need);
		if (null == props) {
			props = System.getProperties();
		}
		if (need)
			props.put("mail.smtp.auth", "true");
		else
			props.put("mail.smtp.auth", "false");
	}

	public void setNameAndPassword(String username, String password) {
		this.username = username;
		this.password = password;
	}

	/**
	 * 定义邮件主题
	 * 
	 * @return
	 */
	public boolean setSubject(String mailSubject) {
		System.out.println("定义邮件主题!");
		try {
			mimeMsg.setSubject(mailSubject);
			return true;
		} catch (Exception e) {
			System.err.println("定义邮件主题发生错误!" + e);
			return false;
		}
	}

	public boolean setBody(String mailBody) {
		try {
			BodyPart bp = new MimeBodyPart();
			bp.setContent("" + mailBody, "text/html;charset=GBK");
			mp.addBodyPart(bp);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/**
	 * 设置发信人
	 * 
	 * @return
	 */
	public boolean setFrom(String from) {
		System.out.println("设置发信人!");
		try {
			mimeMsg.setFrom(new InternetAddress(from));
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/**
	 * 定义收信人
	 * 
	 * @param to
	 * @return
	 */
	public boolean setTo(String to) {
		if (to == null) {
			System.out.println("没有定义收信人!");
			return false;
		}
		System.out.println("定义收信人!");
		try {
			mimeMsg.setRecipients(Message.RecipientType.TO,
					InternetAddress.parse(to));
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/**
	 * 定义抄送人
	 * 
	 * @param copyto
	 * @return
	 */
	public boolean setCopyTo(String copyto) {
		if (copyto == null)
			return false;
		try {
			mimeMsg.setRecipients(Message.RecipientType.CC,
					(Address[]) InternetAddress.parse(copyto));
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	public boolean sendOut() {
		try {
			mimeMsg.setContent(mp);
			mimeMsg.saveChanges();
			System.out.println("邮件发送中....");
			Session mailSession = Session.getInstance(props, null);
			Transport transport = mailSession.getTransport("smtp");
			transport.connect((String) props.get("mail.smtp.host"), username,
					password);
			transport.sendMessage(mimeMsg,
					mimeMsg.getRecipients(Message.RecipientType.TO));
			System.out.println("发送成功!");
			transport.close();
			return true;
		} catch (Exception e) {
			System.err.println("邮件失败!" + e);
			return false;
		}
	}

	/**
	 * 调用sendOut方法完成发送
	 * 
	 * @param smtp
	 * @param from
	 * @param to
	 * @param copyto
	 * @param subject
	 * @param content
	 * @param username
	 * @param password
	 * @return
	 */
	public static boolean sendAndCc(String smtp, String from, String to,
			String copyto, String subject, String content, String username,
			String password) {
		Mail theMail = new Mail(smtp);
		theMail.setNeedAuth(true); // 验证
		if (!theMail.setSubject(subject))
			return false;
		if (!theMail.setBody(content))
			return false;
		if (!theMail.setTo(to))
			return false;
		if (!theMail.setCopyTo(copyto))
			return false;
		if (!theMail.setFrom(from))
			return false;
		theMail.setNameAndPassword(username, password);
		if (!theMail.sendOut())
			return false;
		return true;
	}

	public static void main(String[] args) {
		String smtp = "smtp.163.com";// smtp服务器
		String from = "xxxxx@163.com";// 邮件显示名称
		String to = "1111111@qq.com";// 收件人的邮件地址,必须是真实地址
		String copyto = "";// 抄送人邮件地址
		String subject = "测试邮件";// 邮件标题
		String content = "你好!";// 邮件内容
		String username = "xxxxxxx@163.com";// 发件人真实的账户名
		String password = "xxxxxxx";// 发件人密码
		Mail.sendAndCc(smtp, from, to, copyto, subject, content, username,
				password);
	}

}

运行结果:

设置系统属性:mail.smtp.host  smtp.163.com
准备获取邮件会话对象!
准备创建MIME邮件对象!
设置smtp身份认证:mail.smtp.auth = true
定义邮件主题!
定义收信人!
设置发信人!
邮件发送中....
发送成功!

本文转载自:http://blog.csdn.net/bq1073100909/article/details/50734288

共有 人打赏支持
指尖残雪
粉丝 7
博文 73
码字总数 0
作品 0
上海
后端工程师
私信 提问
commons-email发邮件

记得曾经学习用javamail发邮件,学了2天,大概搞明白了利用javamail发邮件的方法和注意事项。 这周末在网上闲逛时,发现了另外一个发邮件的好东东。 commons-email-1.1.jar: 这是Apache组织下...

enzozhong
2013/02/14
0
0
Eclipse Code Template 设置

打开Code Template 设置 从菜单栏依次打开 Window --> Preferences --> Java --> Code Style --> Code Templates Comments代表注释模板,Code代表代码模板,其中每一个子菜单代表子项的模板。......

admin_qing
07/03
0
0
Hibernate QBC 语言

基本查询 以下是HQL/QBC/Native SQL三种查询策略 HQL策略: Java代码 session.createQuery("FROM Category c where c.name like 'Laptop%'"); session.createQuery("FROM Category c where c......

boonya
2015/03/25
0
0
Timer 与 DelayQueue

简介 有这样一个业务场景,很多业务需要发邮件,如果失败了要重试,每隔5分钟重试一次,最多12次,如果是12次都失败,就记入数据库。 粗一想,很简单嘛,但是仔细想一想,好像不是那么容易,...

trayvon
07/30
0
0
Hibernate QBC语言

节 8.01 基本查询 以下是HQL/QBC/Native SQL三种查询策略 HQL策略: session.createQuery("FROM Category c where c.name like 'Laptop%'"); QBC策略: session.createCriteria(Category.cl......

ddtt
2011/12/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

w, vmstat, top, sar, nload命令查看系统状态信息

w/uptime 查看系统负载 cat /proc/cpuinfo 查看cpu核数 vmstat 监控系统状态,用法 vmstat 1,关键的几列: r, b, swpd, si, so, bi, bo, us, wa top 查看进程使用资源情况 top -c 显示详细的...

野雪球
今天
1
0
小白创建一个spring boot项目

进入 https://start.spring.io/

lilugirl
今天
3
0
Alibaba Java诊断利器Arthas实践--使用redefine排查应用奇怪的日志来源

背景 随着应用越来越复杂,依赖越来越多,日志系统越来越混乱,有时会出现一些奇怪的日志,比如: [] [] [] No credential found 那么怎样排查这些奇怪的日志从哪里打印出来的呢?因为搞不清...

hengyunabc
今天
2
0
home hosts

home hosts lwk@qwfys:~$ cat /etc/hosts127.0.0.1 localhost127.0.1.1 qwfys192.168.56.101vm600.qwfys.com39.108.212.91alpha1.ppy.com39.108.117.122alpha2.p......

qwfys
今天
3
0
大数据教程(6.1)hadoop生态圈介绍及就业前景

1. HADOOP背景介绍 1.1、什么是HADOOP 1.HADOOP是apache旗下的一套开源软件平台 2.HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理 3.HADOOP的核心组...

em_aaron
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部