Java Mail多人群发与多附件发送
近期公司的项目用到了Java Mail来发送注冊邮件,只是。开发的时候都是使用封装好的JAR,曾经也不是非常了解Java Mail的使用原理。
网上非常多代码都是仅仅有一部分,看一看也跑不起来,今天正好有时间,自己写了一个实现。放在了自己的工具JAR里。闲话不多说,我的项目是使用Gradle构建的,依赖的引用例如以下:
//JavaMail
compile('javax.mail:mail:1.4.7')
相当于Maven的groupId,artifactId,version
构建后应该引用了两个JAR:。假设第二个JAR没有的话。大家能够去Maven库找一下。就不多讲述了。
实现的源代码例如以下,一般直接拿来就能够用了~
import java.io.UnsupportedEncodingException;
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.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
/**
* Java Mail 工具类
*
* @author XueQi
* @version 1.0
*
*/
public class MailUtils {
private static String host;
private static String username;
private static String password;
private static String from;
private static String nick;
static {
try {
// Test Data
host = "smtp.163.com";
username = "邮箱用户名";
password = "邮箱密码";
from = "xxx@abc.com";
nick = "測试admin";
// nick + from 组成邮箱的发件人信息
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 发送邮件
*
* @param to
* 收件人列表。以","切割
* @param subject
* 标题
* @param body
* 内容
* @param filepath
* 附件列表,无附件传递null
* @return
* @throws MessagingException
* @throws AddressException
* @throws UnsupportedEncodingException
*/
public static boolean sendMail(String to, String subject, String body,
List<String> filepath) throws AddressException, MessagingException,
UnsupportedEncodingException {
// 參数修饰
if (body == null) {
body = "";
}
if (subject == null) {
subject = "无主题";
}
// 创建Properties对象
Properties props = System.getProperties();
// 创建信件server
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true"); // 通过验证
// 得到默认的对话对象
Session session = Session.getDefaultInstance(props, null);
// 创建一个消息,并初始化该消息的各项元素
MimeMessage msg = new MimeMessage(session);
nick = MimeUtility.encodeText(nick);
msg.setFrom(new InternetAddress(nick + "<" + from + ">"));
// 创建收件人列表
if (to != null && to.trim().length() > 0) {
String[] arr = to.split(",");
int receiverCount = arr.length;
if (receiverCount > 0) {
InternetAddress[] address = new InternetAddress[receiverCount];
for (int i = 0; i < receiverCount; i++) {
address[i] = new InternetAddress(arr[i]);
}
msg.addRecipients(Message.RecipientType.TO, address);
msg.setSubject(subject);
// 后面的BodyPart将增加到此处创建的Multipart中
Multipart mp = new MimeMultipart();
// 附件操作
if (filepath != null && filepath.size() > 0) {
for (String filename : filepath) {
MimeBodyPart mbp = new MimeBodyPart();
// 得到数据源
FileDataSource fds = new FileDataSource(filename);
// 得到附件本身并至入BodyPart
mbp.setDataHandler(new DataHandler(fds));
// 得到文件名称相同至入BodyPart
mbp.setFileName(fds.getName());
mp.addBodyPart(mbp);
}
MimeBodyPart mbp = new MimeBodyPart();
mbp.setText(body);
mp.addBodyPart(mbp);
// 移走集合中的全部元素
filepath.clear();
// Multipart增加到信件
msg.setContent(mp);
} else {
// 设置邮件正文
msg.setText(body);
}
// 设置信件头的发送日期
msg.setSentDate(new Date());
msg.saveChanges();
// 发送信件
Transport transport = session.getTransport("smtp");
transport.connect(host, username, password);
transport.sendMessage(msg,
msg.getRecipients(Message.RecipientType.TO));
transport.close();
return true;
} else {
System.out.println("None receiver!");
return false;
}
} else {
System.out.println("None receiver!");
return false;
}
}
public static void main(String[] args) throws AddressException,
UnsupportedEncodingException, MessagingException {
List<String> filepath = new ArrayList<>();
filepath.add("E:\\Resources\\Development Test\\AuctionServer\\src\\main\\java\\com\\auction\\dao\\IBaseDAO.java");
filepath.add("E:\\Resources\\Development Test\\AuctionServer\\src\\main\\java\\com\\auction\\dao\\IMemcacheDAO.java");
sendMail("000000@qq.com,000002@live.cn", "注冊信息邮件", "注冊邮件,有附件",
filepath);
}
}
我这里用的是163的邮箱,測试是成功的~
能够看到两个收件人和两个附件
Java Mail多人群发与多附件发送的更多相关文章
- 解决java mail发送TXT附件被直接显示在正文中的问题
这两天遇到一个问题,关于使用java mail发送邮件的问题. 详细是这样子的:我使用java mail发送异常报告邮件,邮件中有一个包含异常日志的附件,和关于设备信息的邮件正文.假设日志为log后缀 ...
- 基于Java Mail 进行发送(带附件和压缩附件)的邮件
刚进公司的training, 下面是要求: Self-study of Java Mail library: http://www.oracle.com/technetwork/java/javam ...
- java mail邮件发送(带附件) 支持SSL
java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.ut ...
- Java Mail 附件名太长导致接收端附件名解析出错
问题前提:公司需要往邮件中写 excle 文件,返送成功后发现文件格式有误(如:xxxx.bat 等文件后缀),但是有些文件又不会, 后来发现是由于文件名称太长所导致. 问题原因:java mail中 ...
- java mail使用中遇到的550类型错误
前言 首先,需要说明的是,本错误来自于一个简单的基于java mail的api程序,邮件服务器是163的SMTP,即smtp.163.com. 程序 需要说明一下,下面这个程序,是来自于网络上,本人为 ...
- Java邮件服务学习之三:邮箱服务客户端-Java Mail
一.java mail的两个JAR包 1.mail.jar:不在JDK中,核心功能依赖JDK4及以上,该jar包已经加入到java EE5: 下载地址:http://www.oracle.com/te ...
- 《Java Mail》
<Java Mail> 文/冯皓林 完稿:2016.3.16--2016.3.19 “特定环境.一类问题.N个解决方案” 一.RFC821文档说明 核心: 邮件(Mail): 1.邮件头( ...
- Java Mail(三):Session、Message详解
http://blog.csdn.net/ghsau/article/details/17909093 ************************************* 本文来自:高爽|Co ...
- java mail实现Email的发送,完整代码
java mail实现Email的发送,完整代码 1.对应用程序配置邮件会话 首先, 导入jar <dependencies> <dependency> <groupId ...
随机推荐
- memcached哈希表操作主要逻辑笔记
以下注释的源代码都在memcached项目的assoc.c文件中 /* how many powers of 2's worth of buckets we use */ unsigned int h ...
- android--------Retrofit+RxJava的使用
Retrofit是Square公司开发的一款针对Android网络请求的一个当前很流行的网络请求库. http://square.github.io/retrofit/ https://github. ...
- 51 jquery 节点操作和 bootstrapt
jquery 和 bootstrapt1.jquery each 函数 1.each 循环方式一: 可循环对象: var arr =["alex","deng" ...
- python-day6---流程控制
# if 条件:# 子代码1# 子代码2# 子代码3 # if True:# print('ok')# print('=====?>')# print('=====?>')# print( ...
- Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level
2018-03-23 18:32:21,690 [INFO] [http-nio-11007-exec-2] org.apache.coyote.http11.Http11Processor [Dir ...
- python 绘图 异常点绘制使用 ax.plot(abnormal_points['ds'], abnormal_points['y'], "rX", label='abnormal points')
from matplotlib import pyplot as plt def my_plot(title, m, fcst, ax=None, uncertainty=True, plot_cap ...
- sql Server如何执行批量插入和批量删除
平时我们sql server执行查询语句都是通过 insert into 表名(字段名,字段名) values(插入值,插入值) --单条插入语句--- insert into Reader(read ...
- linux physical and virtual addressing modes
example 1: 特理地址和虚拟地址一致 Physical addressing mode requires no page tables and the CPU does not attempt ...
- trycatch之catch对捕获异常的处理及后续代码的执行的探索
工作时,一直对try块中throw的异常对象,在catch中如何处理此异常,以及trycatchfinally完毕,程序是否就此停止还是继续运行很迷惑,于是参考网上的资料,自己写了些demo,去慢慢探 ...
- Python3 urllib抓取指定URL的内容
最近在研究Python,熟悉了一些基本语法和模块的使用:现在打算研究一下Python爬虫.学习主要是通过别人的博客和自己下载的一下文档进行的,自己也写一下博客作为记录学习自己过程吧.Python代码写 ...