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 ...
随机推荐
- Windows 2008 R2 安装sp1时未知错误的解决办法
最近在为Windows Server 2008 R2 打sp1补丁时出现“发生未知错误”,详细信息错误:0x800f0818: google后找到解决问题步骤,参照:http://www.wikiho ...
- 菜鸟学Struts2——HelloWorld
写在前面 自从工作后就过上了只有一个月记忆的生活,太健忘,很多学过的东西因为用得少便忘记了,第二次学习struts,为了以后便于查阅,开始自己的博客之旅.Struts的学习还是从Hello World ...
- xp搭建IIS出现HTTP 500错误-2147467259 (0x80004005)
安装IIS后访问localhost页面, 提示The remote procedure call failed and did not execute,再刷新变为:-2147467259 (0x800 ...
- php修改
做出一张表,点击登录后进入此表 然后多建立一个<td></td>用来增加一列操作 <h1>英雄联盟英雄表</h1> <table width= ...
- mysql数据库开发常见问题及优化
mysql 数据库是被广泛应用的关系型数据库,其体积小.支持多处理器.开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高.在使用 mysql 的过程中不规范的 SQL 编写.非最优的 ...
- Hibernate(2)——Hibernate的实现原理总结和对其模仿的demo
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: 开源框架的学习思路(个人总结) Hibernate的运行原理总结 Hibernate实现原理中的两个主要技术 ...
- 网站实现微信登录之回调函数中登录逻辑的处理--基于yii2开发的描述
上一篇文章网站实现微信登录之嵌入二维码中描述了如何在自己的登录页面内嵌入登录二维码,今天的这篇文章主要是描述下在扫码成功之后微信重定向回网站后登录逻辑的处理,其实也就是验证身份信息,授权用户登录的逻辑 ...
- ASP.NET Core 中文文档 第三章 原理(4)路由
原文:Routing 作者:Ryan Nowak.Steve Smith. Rick Anderson 翻译:张仁建(Stoneqiu) 校对:许登洋(Seay).谢炀(kiler398).孟帅洋(书 ...
- 记录软件工程课程项目开发时遇到的各种小问题(django)
1.python manage.py makemigrations 无效/无法检测出model的变化 在修改了models.py之后,我们想要更新数据库的表,使用了python manage.py m ...
- 导出BOM表
1.Report->Bill of Materials for Project 将Value拖上左上角的Grouped Columns 2.在Excel表中全选器件,右键设置"设置单元 ...