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 ...
随机推荐
- 如何在 Visual Studio 中使用 Git 同步代码到 CodePlex
开源社区不管在国内还是国外都很火热,微软也曾因为没有开源而倍受指责,但是随着 .Net framework.ASP.Net MVC等框架的逐渐开源,也让大家看到了微软开源的步伐.CodePlex 则是 ...
- Redis集群搭建与简单使用
介绍安装环境与版本 用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-3.2.4 版本. 两台虚拟机都是 CentOS ,一台 ...
- HTML5 & CSS3初学者指南(2) – 样式化第一个网页
介绍 我们已经使用基本的 HTML 编写了一个网页.但是,写出来的 HTML 代码的网页看起来很平淡,没有吸引力. 如何改善这种很平淡的页面呢? 让我们开始使用网页的基本样式来改善页面效果,我们将会使 ...
- TODO:MongoDB的查询更新删除总结
TODO:MongoDB的查询更新删除总结 常用查询,条件操作符查询,< .<=.>.>=.!= 对应 MongoDB的查询操作符是$lt.$lte.$gt.$gte.$ne ...
- Intellij IDEA 13.1.3 使用Junit4
作者QQ:1095737364 一.环境配置 安装JUnit插件步骤: File-->settings-->Plguins-->Browse repositories--> ...
- 前端学HTTP之基本认证
前面的话 人们用Web进行私人事务处理,访问私有的数据.通过Web可以很方便地访问这些信息,但仅仅是方便访问还是不够的.我们要保证只有特定的人能看到我们的敏感信息并且能够执行我们的特权事务 服务器需要 ...
- Java学习之LinkedHashMap学习总结
前言: 在学习LRU算法的时候,看到LruCache源码实现是基于LinkedHashMap,今天学习一下LinkedHashMap的好处以及如何实现lru缓存机制的. 需求背景: LRU这个算法就是 ...
- 数据库日常维护-CheckList_03有关数据库数据文件大小检查
日常数据维护中容量规划是每个DBA的基础工作之一,也是非常重要的工作.在生产环境中一些比较重要的业务数据库会用前期容量规划不足,或出现意外的爆发式的数据增长,直至盛满整个磁盘空间,系统会无法使用,最终 ...
- 2016-Beijing-GDG-DevFest大会参后感
前话 15年初的时候参加过一次GDG线下举办的一次分享会,因为当时是实习的公司提供的活动场地.有了那次机会后,就一直关注了GDG的活动. 参加的目的最重要的是本次大会是比较盛大的一场技术大会,在经过一 ...
- 如何在虚拟机里安装Linux
本篇仅为作业... 实验课程:Linux 实验机器:联想y410p 指导老师:刘臣奇 实验时间:2016年9月25日 学生学号:140815 姓名:杨文乾 一.先安装虚拟机,之后创建一个新的虚拟机 之 ...