Java Mail邮件发送的简单实现
1、什么是java mail
JAVA MAIL是利用现有的邮件账户发送邮件的工具,通过JAVA Mail的操控,让程序自动的使用设置的邮箱发送邮件。
这一机制被广泛的用在注册激活和垃圾邮件的发送等方面。
2、邮件发送的大致过程
1、构建一个继承自javax.mail.Authenticator的具体类,并重写里面的getPasswordAuthentication()方法。
此类是用作登录校验的,以确保你对该邮箱有发送邮件的权利。
2、构建一个properties文件,该文件中存放SMTP服务器地址等参数。
3、通过构建的properties文件和javax.mail.Authenticator具体类来创建一个javax.mail.Session。
Session的创建,就相当于登录邮箱一样。剩下的自然就是新建邮件。
4、构建邮件内容,一般是javax.mail.internet.MimeMessage对象,并指定发送人,收信人,主题,内容等等。
5、使用javax.mail.Transport工具类发送邮件。
3、准备工作
下载JavaMail jar包,导入工程。
http://www.oracle.com/technetwork/java/javamail/index-138643.html
4、案例代码
MyEmailAutherticator.java
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication; public class MyEmailAutherticator extends Authenticator { //用户名(登录邮箱)
private String username; //密码
private String password; public MyEmailAutherticator() {
super();
} //初始化邮箱和密码
public MyEmailAutherticator(String username, String password) {
this.username = username;
this.password = password;
} //用作登录校验,以确保对该邮箱有发送邮件的权利
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
} //set and get method
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;
}
}
Mail.java
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.SendFailedException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage; public class Mail { //发送邮件的帐号和密码
private String username="abc123456@qq.com"; private String password="xxxxxx"; private String host = "smtp.qq.com"; private String mail_head_name = "this is head of this mail"; private String mail_head_value = "this is head of this mail"; private String mail_to = "123456789@qq.com"; private String mail_from = "abc123456@qq.com"; private String mail_subject = "this is the subject of this test mail"; private String mail_body = "this is mail_body of this test mail"; private String personalName = "我的邮件"; public void sendMail() throws SendFailedException{
try {
//发送邮件的props文件
Properties props = new Properties();
// 初始化props
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
System.out.println(props); //进行邮件服务用户认证
Authenticator auth = new MyEmailAutherticator(username,password); // 创建session,和邮件服务器进行通讯
Session session = Session.getDefaultInstance(props,auth); // 创建mime类型邮件
MimeMessage message = new MimeMessage(session);
//设置邮件格式
message.setContent("Hello","text/html;charset=utf-8");
// 设置主题
message.setSubject(mail_subject);
//设置邮件内容
message.setText(mail_body);
//设置邮件标题
message.setHeader(mail_head_name, mail_head_value);
message.setSentDate(new Date());//设置邮件发送时期
Address address = new InternetAddress(mail_from,personalName);
//设置邮件发送者的地址
message.setFrom(address); //======单发邮件======
//设置邮件接收者的地址
Address toaddress = new InternetAddress(mail_to);
// 设置收件人
message.addRecipient(Message.RecipientType.TO,toaddress); //======群发邮件======
// List<String> recipients = new ArrayList<String>();
// recipients.add("123456789@qq.com");
// recipients.add("234567890@gmail.com");
// final int num = recipients.size();
// InternetAddress[] addresses = new InternetAddress[num];
// for (int i = 0; i < num; i++) {
// addresses[i] = new InternetAddress(recipients.get(i));
// }
// message.setRecipients(Message.RecipientType.TO, addresses); System.out.println(message);
// 发送邮件
Transport.send(message);
System.out.println("Send Mail Ok!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Test.java
public class Test {
public static void main(String[] args) {
Mail m = new Mail();
try {
m.sendMail();
} catch (Exception e) {
}
}
}
2015-8-6补充代码
public class Demo1 {
@Test
public void fun1() throws Exception {
/*
* 1. 得到session
*/
Properties props = new Properties();
props.setProperty("mail.host", "smtp.163.com");
props.setProperty("mail.smtp.auth", "true");
Authenticator auth = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("itcast_cxf", "itcast");
}
};
Session session = Session.getInstance(props, auth);
/*
* 2. 创建MimeMessage
*/
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("itcast_cxf@163.com"));//设置发件人
msg.setRecipients(RecipientType.TO, "itcast_cxf@126.com");//设置收件人
msg.setRecipients(RecipientType.CC, "itcast_cxf@sohu.com");//设置抄送
msg.setRecipients(RecipientType.BCC, "itcast_cxf@sina.com");//设置暗送
msg.setSubject("这是来自ITCAST的测试邮件");
msg.setContent("这就是一封垃圾邮件!", "text/html;charset=utf-8");
/*
* 3. 发
*/
Transport.send(msg);
}
/**
* 带有附件的邮件!!!
*/
@Test
public void fun2() throws Exception {
/*
* 1. 得到session
*/
Properties props = new Properties();
props.setProperty("mail.host", "smtp.163.com");
props.setProperty("mail.smtp.auth", "true");
Authenticator auth = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("itcast_cxf", "itcast");
}
};
Session session = Session.getInstance(props, auth);
/*
* 2. 创建MimeMessage
*/
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("itcast_cxf@163.com"));//设置发件人
msg.setRecipients(RecipientType.TO, "itcast_cxf@126.com");//设置收件人
msg.setSubject("这是来自ITCAST的测试邮件有附件");
////////////////////////////////////////////////////////
/*
* 当发送包含附件的邮件时,邮件体就为多部件形式!
* 1. 创建一个多部件的部件内容!MimeMultipart
* MimeMultipart就是一个集合,用来装载多个主体部件!
* 2. 我们需要创建两个主体部件,一个是文本内容的,另一个是附件的。
* 主体部件叫MimeBodyPart
* 3. 把MimeMultipart设置给MimeMessage的内容!
*/
MimeMultipart list = new MimeMultipart();//创建多部分内容
// 创建MimeBodyPart
MimeBodyPart part1 = new MimeBodyPart();
// 设置主体部件的内容
part1.setContent("这是一封包含附件的垃圾邮件", "text/html;charset=utf-8");
// 把主体部件添加到集合中
list.addBodyPart(part1);
// 创建MimeBodyPart
MimeBodyPart part2 = new MimeBodyPart();
part2.attachFile(new File("F:/f/白冰.jpg"));//设置附件的内容
part2.setFileName(MimeUtility.encodeText("大美女.jpg"));//设置显示的文件名称,其中encodeText用来处理中文乱码问题
list.addBodyPart(part2);
msg.setContent(list);//把它设置给邮件作为邮件的内容。
////////////////////////////////////////////////////////
/*
* 3. 发
*/
Transport.send(msg);
}
}
Java Mail邮件发送的简单实现的更多相关文章
- java mail邮件发送(带附件) 支持SSL
java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.ut ...
- Java Mail 邮件发送简单封装
上一篇文章我们用写了一个Java Mail 的Demo,相信你已经可以用那个例子来发送邮件了.但是Demo 有很多的问题. 首先每次发送需要配置的东西很多,包括发件人的邮箱和密码.smtp服务器和SM ...
- Java Mail 邮件发送Demo
上周公司的项目要求开发邮件发送功能.自己在网上跟着教程边学边做了一下午,现在基本开发完成了.由于一个同事也想看下该怎么写,顺便学习下.所以我就写成了一遍教程,顺便巩固下邮件发送里面的内容. Demo ...
- Spring mail 邮件发送的简单实现
package cn.taskSys.utils; import java.util.Properties; import org.springframework.mail.MailException ...
- 用java实现邮件发送验证码
java实现邮件发送验证码 建议不要用qq邮箱,我使用qq邮箱直接一直给我报530错误,我一直认为我代码写的有错误或者POP3/SMTP服务没弄好.所以建议注册个别的邮箱,我就申请了个网易163邮箱瞬 ...
- 基于JavaMail的Java邮件发送:简单邮件发送
使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 JavaMail API 和Java Activation Framework (JAF) . 您可以从 Java 网 ...
- JAVA邮件发送的简单实现
JAVA MAIL是利用现有的邮件账户发送邮件的工具,比如说,我在网易注册一个邮箱账户,通过JAVA Mail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件.这一机制被广泛的用在注 ...
- 基于Java Mail 进行发送(带附件和压缩附件)的邮件
刚进公司的training, 下面是要求: Self-study of Java Mail library: http://www.oracle.com/technetwork/java/javam ...
- 【Java EE 学习 21 下】【使用java实现邮件发送、邮件验证】
一.邮件发送 1.邮件发送使用SMTP协议或者IMAP协议,这里使用SMTP协议演示. SMTP协议使用的端口号:25 rfc821详细记载了该协议的相关信息 (1)使用telnet发送邮件(使用12 ...
随机推荐
- NSTimeZone时区
前言 NSTimeZone 表示时区信息. 1.NSTimeZone 时区的创建 NSTimeZone *zone1 = [[NSTimeZone alloc] init]; // 根据时区名称创建 ...
- Selenium API(二)
1.定位一组元素 WebDriver提供了8种定位一组元素的方法. driver.find_elements_by_css_selector() driver.find_elements_by_tag ...
- loj #2305. 「NOI2017」游戏
#2305. 「NOI2017」游戏 题目描述 小 L 计划进行 nnn 场游戏,每场游戏使用一张地图,小 L 会选择一辆车在该地图上完成游戏. 小 L 的赛车有三辆,分别用大写字母 AAA.BBB. ...
- WebApplicationContext wac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());这句话的意思
在jsp中出现 提取的代码: <% WebApplicationContext wac = WebApplicationContextUtils .getWebApplication ...
- CSS复合选择器
复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的,目的是为了可以选择更准确更精细的目标元素标签. 交集选择器 交集选择器由两个选择器构成,其中第一个为标签选择器,第二个为class选择器, ...
- C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...
- QT中QWidget、QDialog以及MainWindow的区别
参考 http://blog.csdn.net/u011619422/article/details/47311101 QT中QWidget.QDialog以及MainWindow的区别 QWidge ...
- C++_代码重用4-多重继承
继承使用时要注意,默认是私有派生.所以要公有派生时必须记得加关键字Public. MI(Multi Inheritance)会带来哪些问题?以及如何解决它们? 两个主要问题: 从两个不同的基类继承同名 ...
- 江西理工大学南昌校区排名赛 B: 单身狗的数字游戏
题目描述 萌樱花是一只单身狗. 萌樱花今天初始化了N个数字,使它们都为0 0 0 0... 萌樱花决定选取某一个位置,分别增加1到N(如果到达数组末尾就从头开始). 比如: 0 0 0(选择第二个位置 ...
- ZOJ - 2402 DP方案数
题意:给出m,序列第i位是第i-1位的至少2倍大,的求长度为n且每一位范围均在1-m的序列方案数 对求方案数做不到信手拈来的感觉,需要加强 用简单的预处理和最优子结构能优化到很不错的效率了 #incl ...