javamail模拟邮箱功能发送电子邮件-基础实战篇(javamail API电子邮件实例)
引言:
JavaMail 是一种可选的、能用于读取、编写和发送电子消息的包
JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html
JavaMail API中包含了多种邮件传输协议: SMTP POP(最新为pop3) IMAP MIME 四大类 (本章主要讲解常用的 SMTP)
该API的几大核心类:会话(session)、消息(message)、地址(address)、验证程序(Authentication)、传输(Transport),存储和文件夹
废话不多说,跟着例子一步步解释每个类的主要功能 —.—
实例代码演示:
**********************此例可直接复制粘帖至编译器进行测试哦**********************
package com.cplatform.movie.back.test;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage; /**
* javaMail API 模拟邮箱发送电子邮件
* @author liuyt
* @date 2014-10-24 上午10:10:51
*/
public class EmailFunction {
/**
* 发送邮件的props文件 (可使用自建priperty文件)
* 用于初始化一个session实例,配置了一个session会话的一些基本信息
*/
private final transient Properties props = new Properties(); /**
* 邮件发送者的用户名和密码
*/
private transient String username = "15138577682@163.com";
private transient String password = "邮箱密码"; /**
* session为一个基本的邮件会话,通过该会话可执行其他邮件工作
* 如:之后的初始化一个MimeMessage实例
*/
private transient Session session; /**
* MIME类型邮件MimeMessage类(抽象消息类Message的一个子类)
* 可以通过将Session对象传递给MimeMessage构造器的方法来创建
*/
private transient MimeMessage message; /**
* 邮件内容类型 (这里演示一个html格式的消息格式)
*/
private final static String CONTENT_TYPE_HTML = "text/html;charset=utf-8"; /**
* 端口号
*/
private final static int MAIL_PORT = 25; /**
* 邮件内容
*/
private String content = "点击进入» <a href='http://www.cnblogs.com/liuyitian'>刘一天的博客</a>"; /**
* 继承Authenticator子类用于用户认证 (这里指邮件服务器对用户的认证)
* 也可外部创建一个单独的邮件实体类(包涵用户名/密码即可),继承Authenticator类来重写PasswordAuthentication方法
*/
static class MyAuthenricator extends Authenticator{
private String user=null;
private String pass="";
public MyAuthenricator(String user,String pass){
this.user=user;
this.pass=pass;
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user,pass);
} } /**
* 初始化 session 实例方法
* @param username 发送邮件的用户名(地址)
* @param password 密码
* @param smtpHostName SMTP邮件服务器地址
*/
private void initSession(String username, String password, String smtpHostName) { // 初始化props文件
props.setProperty("mail.transport.protocol", "smtp");//发送邮件协议
props.put("mail.smtp.auth", "true"); //需要验证
props.put("mail.smtp.host", smtpHostName); //服务器地址 // 根据property文件创建session,并传入Authenticator进行验证
session = Session.getInstance(props, new MyAuthenricator(username, password)); // 是否控制台打印消息列表 (可选)
session.setDebug(true);
} /**
* 初始化邮箱message(消息实例)方法
* @param subject 邮件主题
* @param content 邮件内容
* @throws MessagingException
* @throws AddressException
* @throws UnsupportedEncodingException
*/
private void initMessage(String subject, Object content)
throws AddressException, MessagingException, UnsupportedEncodingException { // 根据session创建一个消息对象
message = new MimeMessage(session); // 设置发件人地址 (第二个参数为显示发件人名称,目前还没有测试成功)
message.setFrom(new InternetAddress(username, "要显示的发件人名称")); // 设置邮件的主题
message.setSubject("主题:javamail测试邮件"); // 设置邮件的发送内容和内容的content-type(这里采用text/html格式)
message.setContent(content.toString(),EmailFunction.CONTENT_TYPE_HTML); // 设置邮件的接收人地址--方法一 (选其一即可)
// Address[] address = new Address[]{new InternetAddress("418874847@qq.com"),"...更多列表..."};
// message.setReplyTo(addresses); // 设置邮件的接收人地址--方法二 (选其一即可)
// 如果群发邮件,收件人较多,可另写一个方法用于专门循环遍历并设置接收人
message.addRecipient(Message.RecipientType.TO, new InternetAddress("418874847@qq.com"));
message.addRecipient(Message.RecipientType.TO, new InternetAddress("12450374@qq.com"));
} /**
* 初始化邮件发送器方法
* @param username 发送邮件的用户名(地址),并以此解析SMTP服务器地址
* @param password 发送邮件的密码
* @throws MessagingException
* @throws UnsupportedEncodingException
* @throws AddressException
* @return
*/
public void SimpleMailSender(final String username, final String password)
throws AddressException, UnsupportedEncodingException, MessagingException { // 通过邮箱地址解析出smtp服务器,对大多数邮箱都管用 (还有IMAP和POP3)
final String smtpHostName = "smtp." + username.split("@")[1]; // 调用初始化session方法
initSession(username, password, smtpHostName); // 调用初始化MimeMessage方法 (在初始化session完毕后)
initMessage("邮件主题:测试邮件", content);
} /**
* 邮件发送
* @throws MessagingException
* @throws UnsupportedEncodingException
*/
private void send() throws MessagingException, UnsupportedEncodingException { // 调用初始化邮件方法
SimpleMailSender(username, password); // 根据session来获得一个Transport抽象类对象
Transport tran = session.getTransport(); // 打开链接 ,此时会去校验用户名和密码 (参数列表:【 邮箱服务器地址】【端口号】【 发件箱用户名】【发件箱密码】)
tran.connect(props.getProperty("mail.smtp.host"), EmailFunction.MAIL_PORT, username, password); // 发送邮件 (第二个参数null指收件人地址,因为在初始化message时已经设置好了收件人地址,此处便省略)
tran.sendMessage(message, null); // 关闭通道
tran.close();
} /**
* main方法测试
* @param args
* @throws AddressException
* @throws MessagingException
* @throws UnsupportedEncodingException
*/
public static void main(String[] args)
throws AddressException, MessagingException, UnsupportedEncodingException {
//直接调用发送方法
new EmailFunction().send();
} }
小结简单流程:
根据实例代码,来总结下用javamail来发送一封简单邮件的流程
- 下载javamail API jar包,并path到项目中去。(jar包下载地址请看本章开头)
- 创建一个java bean,设置必要私有属性,提高代码的复用性和可读性
- 创建内部类并继承Authenticator (验证机制)类,提供必要属性用户名和密码,重写getPasswordAuthentication方法
- 根据java.util.property文件初始化一个邮件的Session会话实例
- 根据步骤四得来的Session实例来初始化一个Message(消息)实例,并设置各个参数(收、发件人、主题、内容等)
- 根据Session创建一个Transport(传输)实例 --> 打开链接(connect) --> 发送(sendMessage) --> 关闭(close)
上述流程是依据本章的实例代码来罗列的,只是让大家对流程有个简单的认识,代码本身可能并不精简,还请哆哆指正。
javamail API 系列篇:
- javamail模拟邮箱功能发送电子邮件-基础实战篇
- javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】
- javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】
- javamail模拟邮箱功能--邮件回复-中级实战篇【邮件回复方法】
- javamail模拟邮箱功能--邮件删除-中级实战篇【邮件标记方法】
写作不易,难免有疏漏和错误,还请慷慨指正,觉得有帮助还请推荐哦。
转载请注明出处:http://www.cnblogs.com/liuyitian/p/4048006.html
每天多学一点点 代码少敲一点点
javamail模拟邮箱功能发送电子邮件-基础实战篇(javamail API电子邮件实例)的更多相关文章
- javamail模拟邮箱功能--邮件删除-中级实战篇【邮件标记方法】(javamail API电子邮件实例)
前言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 本章可能是讲解javamail的最后一 ...
- javamail模拟邮箱功能--邮件回复-中级实战篇【邮件回复方法】(javamail API电子邮件实例)
引言: JavaMai下载地址l jar包:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...
- javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】(javamail API电子邮件实例)
引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...
- javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)
引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...
- MySQL的初次见面礼基础实战篇
[版权申明] http://blog.csdn.net/javazejian/article/details/61614366 出自[zejian的博客] 关联文章: MySQL的初次见面礼基础实战篇 ...
- Linux Capabilities 入门教程:基础实战篇
该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 待续... 上篇文章介绍了 Linux capabilit ...
- Capabilities 入门教程:基础实战篇
该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 待续... 上篇文章介绍了 Linux capabilit ...
- Vue基础二之全局API、实例属性和全局配置,以及组件进阶(mixins)的详细教程(案列实现,详细图解,附源码)
本篇文章主要是写Vue.directive().Vue.use()等常用全局API的使用,vm.$props.vm.$options.vm.$slots等实例属性的使用,以及Vue全局配置.组件的mi ...
- Python3爬虫基础实战篇之机票数据采集
项目:艺龙国内机票实时数据爬虫 使用模块:requests(请求模块),js2py(js执行模块),json(解析json),xpath(解析网页). 项目流程: 分析网站数据来源. 编写爬虫脚本. ...
随机推荐
- 深入了解linux下的last命令及其数据源
http://www.9usb.net/200902/linux-last.html http://blog.csdn.net/chaofanwei/article/details/11826567
- POJ 1300 Door Man(欧拉回路的判定)
题目链接 题意 : 庄园有很多房间,编号从0到n-1,能否找到一条路径经过所有开着的门,并且使得通过门之后就把门关上,关上的再也不打开,最后能回到编号为0的房间. 思路 : 这就是一个赤裸裸的判断欧拉 ...
- poj 3710 Christmas Game 博弈论
思路:首先用Tarjan算法找出树中的环,环为奇数变为边,为偶数变为点. 之后用博弈论的知识:某点的SG值等于子节点+1后的异或和. 代码如下: #include<iostream> #i ...
- postgresql数据库的yum安装方法
实验环境>>>>>>>>>>>>>>>>>>操作系统:CentOS release 6.3 ...
- Compile a native C Android application
原文: Compile a native C Android application翻译: Zhiwei.Li 通过上网搜索,你可以发现很多种编译Android native应用的方法.我想说的是,不 ...
- 网络处理1-异步GET请求
前言 云计算 近几年来,云计算是一个非常热门的技术名词,很多专家认为,云计算会改变互联网的技术基础,甚至会影响整个产业的格局.可能还很多人不了解什么是云计算,简单来说,就是把用户的数据(比如文档.照片 ...
- 刷机(手机自带的recovery)
recovery模式是手机系统的一个工程模式,用户通过同时按住开机键加home键,直到手机界面出现一个三角框里面一个感叹号即是进入了传说中的recovery模式,在这个模式中用户可以看到以下的内容(不 ...
- 让fdisk输出更准确合理
注意:新版本的fdisk默认输出已经正确合理了,本文只适用于旧版本的fdisk. 1 无option选项参数的输出 [root@localhost ~]# fdisk -l Disk /dev/sda ...
- Linux任务前后台的切换
Shell支持作用控制,有以下命令实现前后台切换: 1. command& 让进程在后台运行 2. jobs 查看后台运行的进程 3. fg %n 让后台运行的进程n到前台来 4. bg %n ...
- Friends(老友记)(六人行)相关资源
迅雷账号:104303980 老友记 Friends 的所有种子: http://www.ttmeiju.com/meiju/Friends.html 老友记(friends)高清(720p)+字幕 ...