java 邮件发送 多人_java 发送邮件(可发送多人,抄送多人,可带附件)
邮件发送器
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @Description: 邮件发送器
* @author zk
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @Description: 邮件发送配置信息加载类
* @author zk
* @date 2017年1月3日 上午10:52:12
* @version V1.0
*/
public class ConfigLoader {
private static final Logger logger = LoggerFactory.getLogger(ConfigLoader.class);
// 配置文件路径
private static String mailPath = "mail.properties";
// 邮件发送SMTP主机
private static String server;
// 发件人邮箱地址
private static String sender;
// 发件人邮箱用户名
private static String username;
// 发件人邮箱密码
private static String password;
// 发件人显示昵称
private static String nickname;
private static String cc;
static {
// 类初始化后加载配置文件
InputStream in = ConfigLoader.class.getClassLoader()
.getResourceAsStream(mailPath);
Properties props = new Properties();
try {
props.load(in);
} catch (IOException e) {
logger.error("load mail setting error,pleace check the file path:"
+ mailPath);
logger.error(e.toString(), e);
}
props.put("mail.smtp.starttls.enable", true);
server = props.getProperty("mail.server");
sender = props.getProperty("mail.sender");
username = props.getProperty("mail.username");
password = props.getProperty("mail.password");
nickname = props.getProperty("mail.nickname");
cc = props.getProperty("mail.cc");
props.put("mail.smtp.ssl.trust", server);
logger.debug("load mail setting success,file path:" + mailPath);
}
public static String getMailPath() {
return mailPath;
}
public static String getServer() {
return server;
}
public static String getSender() {
return sender;
}
public static String getUsername() {
return username;
}
public static String getPassword() {
return password;
}
public static String getNickname() {
return nickname;
}
public static void setMailPath(String mailPath) {
ConfigLoader.mailPath = mailPath;
}
public static String getCc() {
return cc;
}
public static void setCc(String cc) {
ConfigLoader.cc = cc;
}
}
package ibp.ioc.service.aml.job.mailsend.bo;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @Description: 邮件发送配置信息加载类
* @author zk
* @date 2017年1月3日 上午10:52:12
* @version V1.0
*/
public class ConfigLoader {
private static final Logger logger = LoggerFactory.getLogger(ConfigLoader.class);
// 配置文件路径
private static String mailPath = "mail.properties";
// 邮件发送SMTP主机
private static String server;
// 发件人邮箱地址
private static String sender;
// 发件人邮箱用户名
private static String username;
// 发件人邮箱密码
private static String password;
// 发件人显示昵称
private static String nickname;
private static String cc;
static {
// 类初始化后加载配置文件
InputStream in = ConfigLoader.class.getClassLoader()
.getResourceAsStream(mailPath);
Properties props = new Properties();
try {
props.load(in);
} catch (IOException e) {
logger.error("load mail setting error,pleace check the file path:"
+ mailPath);
logger.error(e.toString(), e);
}
props.put("mail.smtp.starttls.enable", true);
server = props.getProperty("mail.server");
sender = props.getProperty("mail.sender");
username = props.getProperty("mail.username");
password = props.getProperty("mail.password");
nickname = props.getProperty("mail.nickname");
cc = props.getProperty("mail.cc");
props.put("mail.smtp.ssl.trust", server);
logger.debug("load mail setting success,file path:" + mailPath);
}
public static String getMailPath() {
return mailPath;
}
public static String getServer() {
return server;
}
public static String getSender() {
return sender;
}
public static String getUsername() {
return username;
}
public static String getPassword() {
return password;
}
public static String getNickname() {
return nickname;
}
public static void setMailPath(String mailPath) {
ConfigLoader.mailPath = mailPath;
}
public static String getCc() {
return cc;
}
public static void setCc(String cc) {
ConfigLoader.cc = cc;
}
}
* @date 2017年1月3日 下午1:44:46
* @version V1.0
*/
public class MailSender {
private MimeMessage mimeMsg; // MIME邮件对象
private Session session; // 邮件会话对象
private Properties props; // 系统属性
private Multipart mp; // Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成
private String username;// 发件人的用户名
private String password;// 发件人的密码
private String nickname;// 发件人的昵称
private static Logger logger = LoggerFactory.getLogger(MailSender.class);
/**
* 有参构造器
*
* @param smtp
* @throws GeneralSecurityException
*/
public MailSender() {
setSmtpHost(ConfigLoader.getServer());
createMimeMessage();
}
/**
* 设置邮件发送的SMTP主机
*
* @param hostName
* @throws GeneralSecurityException
*/
public void setSmtpHost(String hostName) {
if (props == null)
props = System.getProperties();
props.put("mail.smtp.host", hostName);
props.put("mail.smtp.port", "25");
props.put("mail.smtp.starttls.enable", "true");
logger.debug("set system properties success :mail.smtp.host= "
+ hostName);
}
/**
* 创建邮件对象
*/
public void createMimeMessage() {
// 获得邮件会话对象
session = Session.getDefaultInstance(props, null);
// 创建MIME邮件对象
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart("mixed");
logger.debug(" create session and mimeMessage success");
}
/**
* 设置权限鉴定配置
*
* @param need
* 是否需要权限 true:需要 ,false:不需要
*/
public void setNeedAuth(boolean need) {
if (props == null)
props = System.getProperties();
if (need) {
props.put("mail.smtp.auth", "true");
} else {
props.put("mail.smtp.auth", "false");
}
logger.debug("set smtp auth success:mail.smtp.auth= " + need);
}
/**
* 设置发送邮件的主题
*
* @param subject
* @throws UnsupportedEncodingException
* @throws MessagingException
*/
public void setSubject(String subject) throws UnsupportedEncodingException,
MessagingException {
mimeMsg.setSubject(MimeUtility.encodeText(subject, "utf-8", "B"));
logger.debug("set mail subject success, subject= " + subject);
}
/**
* 设置邮件的正文内容
*
* @param mailBody
* @throws MessagingException
*/
public void setBody(String mailBody) throws MessagingException {
MimeBodyPart content = new MimeBodyPart();
content.setContent("" + mailBody, "text/html;charset=utf-8");
mp.addBodyPart(content);
// mimeMsg.setContent(mp);
}
/*
* public void setBody(String mailBody) throws MessagingException {
*
* mimeMsg.setContent("" + mailBody, "text/html;charset=utf-8");
* logger.debug("set mail body content success,mailBody= " + mailBody);
*
* }
*/
/**
* 添加邮件附件
*
* @param filePath
* 附件的绝对路径
* @throws MessagingException
* @throws UnsupportedEncodingException
*/
public void addFileAffix(String filePath, String fileName)
throws MessagingException, UnsupportedEncodingException {
MimeBodyPart bp = new MimeBodyPart();
DataSource ds1 = new FileDataSource(new File(filePath));
DataHandler dh1 = new DataHandler(ds1);
bp.setDataHandler(dh1);
// bp.setFileName(new String(fileName.getBytes("UTF-8"), "UTF-8"));
bp.setFileName(MimeUtility.encodeWord(fileName));
mp.addBodyPart(bp);
// 整封邮件的MINE消息体
logger.debug("mail add file success,filename= " + filePath);
}
/*
* public void addFileAffix(String filePath) throws MessagingException,
* UnsupportedEncodingException { BodyPart bp = new MimeBodyPart();
* FileDataSource fileds = new FileDataSource(filePath);
* bp.setDataHandler(new DataHandler(fileds)); bp.setFileName(new
* String(fileds.getName().getBytes("UTF-8"), "ISO8859-1"));
* mp.addBodyPart(bp); logger.debug("mail add file success,filename= " +
* filePath); }
*/
public void setCc(String cc) throws AddressException, MessagingException {
mimeMsg.setRecipients(Message.RecipientType.CC,
InternetAddress.parse(cc));
}
/**
* 设置发件人邮箱地址
*
* @param sender
* @throws UnsupportedEncodingException
* @throws AddressException
* @throws MessagingException
*/
public void setSender(String sender) throws UnsupportedEncodingException,
AddressException, MessagingException {
nickname = MimeUtility.encodeText(nickname, "utf-8", "B");
mimeMsg.setFrom(new InternetAddress(nickname + " "));
logger.debug(" set mail sender and nickname success , sender= "
+ sender + ",nickname=" + nickname);
}
/**
* 设置收件人邮箱地址
*
* @param receiver
* @throws AddressException
* @throws MessagingException
*/
public void setReceiver(String receiver) throws AddressException,
MessagingException {
mimeMsg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(receiver));
logger.debug("set mail receiver success,receiver = " + receiver);
}
/**
* 设置多个收件人
*
* @param toAddress
* @throws MessagingException
*/
public void setReceivers(List toAddress) throws MessagingException {
Address[] address = new InternetAddress[toAddress.size()];
for (int i = 0; i < toAddress.size(); i++) {
address[i] = new InternetAddress(toAddress.get(i));
}
mimeMsg.setRecipients(Message.RecipientType.TO, address);
}
/**
* 设置抄送人的邮箱地址
*
* @param copyto
* @throws AddressException
* @throws MessagingException
*/
public void setCopyTo(String copyto) throws AddressException,
MessagingException {
mimeMsg.setRecipients(Message.RecipientType.CC,
InternetAddress.parse(copyto));
logger.debug("set mail copyto receiver success,copyto = " + copyto);
}
/**
* 设置多个抄送人的邮箱
*
* @param toCopys
* @throws AddressException
* @throws MessagingException
*/
public void setCopyTos(List toCopys) throws AddressException,
MessagingException {
Address[] address = new InternetAddress[toCopys.size()];
for (int i = 0; i < toCopys.size(); i++) {
address[i] = new InternetAddress(toCopys.get(i));
}
mimeMsg.setRecipients(Message.RecipientType.CC, address);
}
/**
* 设置发件人用户名密码,并进行发送邮件操作
*
* @throws MessagingException
*/
public void sendout() throws MessagingException {
Transport transport = null;
try {
this.setNeedAuth(true);
this.setNamePass(ConfigLoader.getUsername(), ConfigLoader.getPassword(), ConfigLoader.getNickname());
this.setSender(ConfigLoader.getSender());
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
Session mailSession = Session.getInstance(props, null);
transport = mailSession.getTransport("smtp");
transport.connect((String) props.get("mail.smtp.host"), username,password);
//收件人发送
if(null != mimeMsg.getRecipients(Message.RecipientType.TO) && mimeMsg.getRecipients(Message.RecipientType.TO).length > 0 ){
transport.sendMessage(mimeMsg,
mimeMsg.getRecipients(Message.RecipientType.TO));
}
//抄送人 发送
if(null != mimeMsg.getRecipients(Message.RecipientType.CC) && mimeMsg.getRecipients(Message.RecipientType.CC).length > 0 ){
transport.sendMessage(mimeMsg,
mimeMsg.getRecipients(Message.RecipientType.CC));
}
logger.debug(" send mail success");
}catch(Exception e){
logger.error("发送邮件发生错误", e);
}finally{
if(transport != null){
transport.close();
}
}
}
/**
* 注入发件人用户名 ,密码 ,昵称
*
* @param username
* 发件人邮箱用户名
* @param password
* 密码
* @param nickname
* 昵称
*/
public void setNamePass(String username, String password, String nickname) {
this.username = username;
this.password = password;
this.nickname = nickname;
}
/**
*
* @param body 內容 :文字 或 html
* @param subject 主题
* @param recievers List 收件人
* @param filePath 附件地址
* @param fileName附件名称
* @throws UnsupportedEncodingException
* @throws MessagingException
* 有附件的
*/
public void sendProjrctEmail(String body, String subject,
List recievers,List cc, String filePath, String fileName)
throws UnsupportedEncodingException, MessagingException {
this.setBody(body);
if (!"".equals(filePath)) {
this.addFileAffix(filePath, fileName);
}
this.setCopyTos(cc);
this.setSubject(subject);
this.setReceivers(recievers);
this.sendout();
}
/**
*
* @param body
* @param subject
* @param recievers
* @param copys
* @throws UnsupportedEncodingException
* @throws MessagingException
* 无附件的
*/
public void sendProjrctEmail(String body, String subject,List recievers,List copys)
throws UnsupportedEncodingException, MessagingException {
this.setBody(body);
this.setSubject(subject);
//收件人
this.setReceivers(recievers);
//抄送
this.setCopyTos(copys);
this.sendout();
}
}
邮件发送配置信息加载类
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @Description: 邮件发送配置信息加载类
* @author zk
* @date 2017年1月3日 上午10:52:12
* @version V1.0
*/
public class ConfigLoader {
private static final Logger logger = LoggerFactory.getLogger(ConfigLoader.class);
// 配置文件路径
private static String mailPath = "mail.properties";
// 邮件发送SMTP主机
private static String server;
// 发件人邮箱地址
private static String sender;
// 发件人邮箱用户名
private static String username;
// 发件人邮箱密码
private static String password;
// 发件人显示昵称
private static String nickname;
private static String cc;
static {
// 类初始化后加载配置文件
InputStream in = ConfigLoader.class.getClassLoader()
.getResourceAsStream(mailPath);
Properties props = new Properties();
try {
props.load(in);
} catch (IOException e) {
logger.error("load mail setting error,pleace check the file path:"
+ mailPath);
logger.error(e.toString(), e);
}
props.put("mail.smtp.starttls.enable", true);
server = props.getProperty("mail.server");
sender = props.getProperty("mail.sender");
username = props.getProperty("mail.username");
password = props.getProperty("mail.password");
nickname = props.getProperty("mail.nickname");
cc = props.getProperty("mail.cc");
props.put("mail.smtp.ssl.trust", server);
logger.debug("load mail setting success,file path:" + mailPath);
}
public static String getMailPath() {
return mailPath;
}
public static String getServer() {
return server;
}
public static String getSender() {
return sender;
}
public static String getUsername() {
return username;
}
public static String getPassword() {
return password;
}
public static String getNickname() {
return nickname;
}
public static void setMailPath(String mailPath) {
ConfigLoader.mailPath = mailPath;
}
public static String getCc() {
return cc;
}
public static void setCc(String cc) {
ConfigLoader.cc = cc;
}
}
配置文件
mail.server=********
mail.sender=********
mail.nickname=********
mail.username=********@qq.com
mail.password=********
mail.cc=********@qq.com,********@qq.com
java 邮件发送 多人_java 发送邮件(可发送多人,抄送多人,可带附件)相关推荐
- java 邮件模板_Spring Boot 2发送邮件手把手图文教程
点击上方 IT牧场 ,选择 置顶或者星标技术干货每日送达! 本文基于:Spring Boot 2.1.3,理论支持Spring Boot 2.x所有版本. 最近有童鞋问到笔者如何用Spring Boo ...
- 微服务架构集成RabbitMQ给用户推送消息(发送短信,发送邮件,发送站内信息)
因为是分布式微服务项目,所以发送方在一个微服务,接收方在另外的一个微服务,在发送方,导入RabbitMQ依赖包 <!--RabbitMQ依赖--><dependency>< ...
- java 163邮件发送 ssl协议失败_java发送邮件遇到的问题
今天尝试用java.mail.jar来实现Java程序发送邮件的功能,遇到一些问题: 一.当使用QQ邮箱向网易邮箱发邮件时: 问题1:530错误,需要建立安全连接,报错如下: javax.mail.A ...
- java发邮件需要什么意思_java 发送邮件需要开启什么服务
java 发送邮件需要开启什么服务 关注:149 答案:2 mip版 解决时间 2021-02-04 10:01 提问者美人如画皮 2021-02-03 14:35 java 发送邮件需要开启什么 ...
- java qq邮箱服务器端口_java qq 邮箱发送错误以及端口号
6:sina没错误,但qq有错误?求解答案:将smtp.qq.com个人邮箱爱 改为smtp.exmail.qq.com企业邮箱,建议用企业邮相的主机名 javax.mail.Authenticati ...
- java 邮件 已读回执_java – 在Firebase群组消息传递应用中实施已读回执功能
为此,您需要在名为seenBy的Firebase数据库中添加另一个节点,该节点必须嵌套在meassage部分中的每个messageId下.您的数据库应如下所示: Firebase-root | --- ...
- Java美元符号取值_java:我如何使用printf打印美元符号和带2位小数的双精度值?...
我对printf非常不满.如何添加%$ 2F到我的字符串格式,这样我可以得到的东西干净这样的: (我忘了添加"$"更早)java:我如何使用printf打印美元符号和带2位小数的双 ...
- java找不到符号_java找不到符号,请帮忙看一下,程序在附件中
--------------------Configuration: --------------------D:\我的资料库\Documents\Socket聊天室源程序\Socket聊天室源程序\ ...
- python 发送邮件 普通邮件 HTML 发送带附件 群发邮件
我是一个测试工程师,在做自动化时,会写一些自己用的好的工具,目前有一些现成的工具,自己用着,不是大材小用,就是不符合实际需求,这次整理一个发送邮件的脚本. 文章目录 1. smtplib 与 emai ...
- 内网java发送邮件_基于JavaMail的Java邮件发送:简单邮件发送
电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等.但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送.本 ...
最新文章
- app获取个人信息是否合法_【关注】如何界定App违法违规收集个人信息?认定方法来了!...
- C++——友元 friend
- 数据结构和算法:第七章 排序
- 数据结构C语言实现课后第1-2章答案
- 一点点学习PS--实战七
- js给php注册网页添加实时监听,js 实现watch监听数据变化的代码
- 坑爹的SQL ISNUMERIC
- JVM内存管理------JAVA语言的内存管理概述
- if-else多级嵌套,输入3/4/5个数寻找最大值(太多了容易乱!!!)
- linux启动管理,Linux启动管理 详述
- Python文档阅读笔记-PyAutoGUI基本使用
- jsp mysql书店源码_使用jsp数据库mysql实现网上购物书店课程设计
- VCL组件之TScrollBar
- ubuntu遇到的 the system is runing low-graphics mode 问题
- mybatis使用详解
- Erlang/Elixir: 外部通信之-NIF
- iphone一键转移_换iPhone数据转移太麻烦?用腾讯电脑管家iPhone助手一键搞定
- .NET反编译工具:de4dot
- 超简单 Python 汉字拼音转换工具
- Unity 中实现 打击感的物理