java中使用javamail发送邮件
1. 电子邮件协议
电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。
其中邮件的创建和发送只需要用到 SMTP协议,所有本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。
2. JavaMail
Java 官方也提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,可以去 Java 或 Oracle 官网下载。
下载地址:
https://java.net/projects/javamail/pages/Home 或者 http://www.oracle.com/technetwork/java/javamail/index.html
我自己使用的jar包下载地址
三、发送邮件的前提
发送邮件首先需要有一个邮箱账号和密码(如果设置了客户端授权密码,此处的密码为客户端授权密码),并且邮箱账号必须要开启 SMTP 服务。
以163邮箱为例,在浏览器网页登录邮箱后一般在邮箱的“设置”选项中可以开启,并记下邮箱的 SMTP 服务器地址,:

四. 创建并发送电子邮件
邮件创建步骤:
创建一个邮件对象(MimeMessage);
设置发件人,收件人,可选增加多个收件人,抄送人,密送人;
设置邮件的主题(标题);
设置邮件的正文(内容,附件);
设置显示的发送时间;
保存到本地。
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties; import javax.activation.DataHandler;
import javax.activation.FileDataSource;
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.apache.commons.lang.StringUtils; public class SendEmailUtil {
/**
* 发送邮件的方法
*
* @param serverAddress
* 服务器地址
* @param user
* 服务器用户名
* @param pwd
* 服务器密码
* @param from
* 发送人
* @param subject
* 标题
* @param emailReceiver
* 接收人
* @param htmlContents
* 发送内容
* @param ucode
* 编码格式
* @param fileName
* 附件名称
* @throws java.lang.Exception
*/
public boolean sendEmail(String serverAddress, String user, String pwd,
String from, String subject, List emailReceiver,
String htmlContents, String ucode, String fileName) {
boolean flag = false;
htmlContents = htmlContents+ " (此邮件为自动发送,请勿回复)";
try {
// 创建Properties对象
Properties props = System.getProperties();
// 创建信件服务器
props.put("mail.smtp.auth", "true");
// 得到默认的对话对象
Session session = Session.getDefaultInstance(props, null);
// 创建一个消息,并初始化该消息的各项元素
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
// 编码方式
if (ucode.indexOf("GBK") != -1) {
String tempFrom = new String(from.getBytes("GBK"), "UTF-8");
message.setFrom(new InternetAddress(tempFrom));
}
// 准备收件人地址
InternetAddress[] address = new InternetAddress[emailReceiver.size()];
for (int i = 0; i < address.length; i++) {
address[i] = new InternetAddress((String) emailReceiver.get(i));
}
System.out.println(address[0]);
message.setRecipients(Message.RecipientType.TO, address);
/*// Cc: 抄送(可选)
message.setRecipient(MimeMessage.RecipientType.CC,
new InternetAddress("ee@receive.com", "USER_EE", "UTF-8"));
// Bcc: 密送(可选)
message.setRecipient(MimeMessage.RecipientType.BCC,
new InternetAddress("ff@receive.com", "USER_FF", "UTF-8"));*/ // 邮件主题
message.setSubject(subject);
System.out.println(message.getSubject());
// 设置内容
BodyPart bp = new MimeBodyPart();
bp.setContent(htmlContents, ucode);
// 后面的BodyPart将加入到此处创建的Multipart中
Multipart mp = new MimeMultipart();
mp.addBodyPart(bp);
// 保存附件
addFileAffix(mp, fileName);
// Multipart加入到信件
message.setContent(mp);
System.out.println(message.getContent());
// 设置信件头的发送日期
message.setSentDate(new Date());
System.out.println(message.getSentDate());
//保存对message设置
message.saveChanges(); //保存邮件到本地
OutputStream out = new FileOutputStream("MyEmail.eml");
message.writeTo(out);
out.flush();
out.close();
// 发送信件
Transport trans = session.getTransport("smtp");
trans.connect(serverAddress, user, pwd);
trans.sendMessage(message, message.getAllRecipients());
trans.close();
flag = true;
} catch (Exception e) {
System.out.println("error:邮件服务器连接错误!");
e.printStackTrace();
} finally {
// 删除临时文件
if (StringUtils.isNotBlank(fileName)){}
deleteFile(fileName);
}
return flag;
} /**
* 发送附件
*
* @param mp
* 邮件信息
* @param fileName
* 附件全路径(包括文件名称)
* @return
*/
public boolean addFileAffix(Multipart mp, String fileName) {
try {
String newName = "";
newName = fileName.substring(fileName.lastIndexOf(File.separator) + 1,
fileName.length());
if (StringUtils.isEmpty(fileName))
return false;
BodyPart bp = new MimeBodyPart(); FileDataSource fileds = new FileDataSource(fileName); bp.setDataHandler(new DataHandler(fileds));
// bp.setFileName("=?GBK?B?"+ enc.encode(fileName.getBytes()) + "?=");
bp.setFileName(newName);
mp.addBodyPart(bp); return true; } catch (Exception e) { return false; }
} /**
* 删除文件
*
* @param fileName
*/
public void deleteFile(String fileName) {
if (StringUtils.isEmpty(fileName))
return;
File file = new File(fileName);
if (file.isFile()) {
file.delete();
}
} public static void main(String[] args) {
SendEmailUtil sendEmail = new SendEmailUtil();
List receiverList = new ArrayList<String>();
receiverList.add("yyy@qq.com");
receiverList.add("zzz@qq.com");
sendEmail.sendEmail("smtp.163.com", "xxx@163.com", "xxx", "xxx@163.com", "测试邮件",
receiverList, "这是一封测试邮件", "GBK", "C:/222.rar");
}
}
java中使用javamail发送邮件的更多相关文章
- web应用中使用JavaMail发送邮件
现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...
- web应用中使用JavaMail发送邮件 。。转载
现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...
- (转载)JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件
博客源地址:http://www.cnblogs.com/xdp-gacl/p/4220190.html 现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件 ...
- JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件
现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...
- java中使用javaMail工具类发送邮件
1.引入依赖 <!--javaMail--> <dependency> <groupId>javax.mail</groupId> <artifa ...
- Web应用中使用JavaMail发送邮件进行用户注册
现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...
- JAVAEE——BOS物流项目13:Quartz概述、创建定时任务、使用JavaMail发送邮件、HighCharts概述、实现区域分区分布图
1 学习计划 1.Quartz概述 n Quartz介绍和下载 n 入门案例 n Quartz执行流程 n cron表达式 2.在BOS项目中使用Quartz创建定时任务 3.在BOS项目中使用Jav ...
- 【SSH网上商城项目实战25】使用java email给用户发送邮件
转自: https://blog.csdn.net/eson_15/article/details/51475046 当用户购买完商品后,我们应该向用户发送一封邮件,告诉他订单已生成之类的信息, ...
- 替换excel模板中的内容并使用JavaMail发送邮件
由于在公司工作,常年出差,每天都要以日报的形式向公司汇报当天的工作内容.而日报的内容大体上就只有当天工作的主要内容时变化的,其余的都是不变 的. 而我的电脑刚打开excel有点卡,因此决定使用Java ...
随机推荐
- ABP框架 - 授权
文档目录 本节内容: 简介 关于 IPermissionChecker 定义许可 检查许可 使用 AbpAuthorize特性 AbpAuthorize特性注意事项 废止授权 使用 IPermissi ...
- C++ std::queue
std::queue template <class T, class Container = deque<T> > class queue; FIFO queue queue ...
- 异步与并行~List<T>是线程安全的吗?
返回目录 题目有点意思,大家都知道Dictionary<K,V>不是线程安全的类型,而List<T>是线程安全的吗?在今天之前大叔没有去测试过,而就在今天也是一个VIP问我,说 ...
- 在v-for中利用index来对第一项添加class(vue2.0)
<li v-for="(el,index) in event" v-bind:class="{ 'm-swipe-active': !index}"> ...
- SqlService过期的解决方案
看图吧,不喜欢说话,图里面我都打备注了 0SQLService异常 1找到安装中心 2升级版本 3监测ing 4输入升级key 5同意并下一步 6下一步 7下一步 8下一步 9收工 10可以打开了
- 锋利的jQuery--Ajax(读书笔记四)
1.表单值得序列化 <1>serialize() 例子: html: <form action=""> First name: <input type ...
- HTML基础
HTML指的是超文本标记语言 (Hyper Text Markup Language), HTML不是一种编程语言,而是一种标记语言 (markup language) ,HTML使用标记标签来描述网 ...
- PowerDesigner(数据建模)使用大全
什么是PowerDesigner 引入百度百科的说法是: power designer是能进行数据库设计的强大的软件,是一款开发人员常用的数据库建模工具.使用它可以分别从概念数据模型(Conceptu ...
- SQL Tuning 基础概述04 - Oracle 表的类型及介绍
Tables A table describes an entity such as employees. You define a table with a table name, such as ...
- 一个简单的webservice的demo(下)winform异步调用webservice
绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单 ...