文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

centos7安装redis及开机启动

配置编译环境: sudo yum install gcc-c++ 下载源码: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 解压源码: tar -zxvf redis-3.2.8.tar.gz 进入到解压目录: cd redis-3......

hotsmile
39分钟前
0
0
Confluence 6 数据库和临时目录

数据库 所有的其他数据库,包括有页面,内容都存储在数据库中。如果你安装的 Confluence 是用于评估或者你选择使用的是 Embedded H2 Database 数据库。数据库有关的文件将会存储在 database...

honeymose
53分钟前
1
0
day62-20180820-流利阅读笔记

1.今日导读 2.带着问题听讲解 3.新闻正文(中英文对照) 4.重点词汇 5.拓展内容

aibinxiao
今天
0
0
分布式锁实现及对比

一、问题介绍 日常工作中很多场景下需要用到分布式锁,例如:任务运行(多个节点同一时刻同一个任务只能在一个节点上运行(分片任务除外)),交易接受(前端交易请求发送时,可能由于两次提...

yangjianzhou
今天
6
0
【AI实战】快速掌握TensorFlow(二):计算图、会话

在前面的文章中,我们已经完成了AI基础环境的搭建(见文章:Ubuntu + Anaconda + TensorFlow + GPU + PyCharm搭建AI基础环境),以及初步了解了TensorFlow的特点和基本操作(见文章:快速掌握...

雪饼
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部