邮件发送器

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 发送邮件(可发送多人,抄送多人,可带附件)相关推荐

  1. java 邮件模板_Spring Boot 2发送邮件手把手图文教程

    点击上方 IT牧场 ,选择 置顶或者星标技术干货每日送达! 本文基于:Spring Boot 2.1.3,理论支持Spring Boot 2.x所有版本. 最近有童鞋问到笔者如何用Spring Boo ...

  2. 微服务架构集成RabbitMQ给用户推送消息(发送短信,发送邮件,发送站内信息)

    因为是分布式微服务项目,所以发送方在一个微服务,接收方在另外的一个微服务,在发送方,导入RabbitMQ依赖包 <!--RabbitMQ依赖--><dependency>< ...

  3. java 163邮件发送 ssl协议失败_java发送邮件遇到的问题

    今天尝试用java.mail.jar来实现Java程序发送邮件的功能,遇到一些问题: 一.当使用QQ邮箱向网易邮箱发邮件时: 问题1:530错误,需要建立安全连接,报错如下: javax.mail.A ...

  4. java发邮件需要什么意思_java 发送邮件需要开启什么服务

    java 发送邮件需要开启什么服务 关注:149  答案:2  mip版 解决时间 2021-02-04 10:01 提问者美人如画皮 2021-02-03 14:35 java 发送邮件需要开启什么 ...

  5. java qq邮箱服务器端口_java qq 邮箱发送错误以及端口号

    6:sina没错误,但qq有错误?求解答案:将smtp.qq.com个人邮箱爱 改为smtp.exmail.qq.com企业邮箱,建议用企业邮相的主机名 javax.mail.Authenticati ...

  6. java 邮件 已读回执_java – 在Firebase群组消息传递应用中实施已读回执功能

    为此,您需要在名为seenBy的Firebase数据库中添加另一个节点,该节点必须嵌套在meassage部分中的每个messageId下.您的数据库应如下所示: Firebase-root | --- ...

  7. Java美元符号取值_java:我如何使用printf打印美元符号和带2位小数的双精度值?...

    我对printf非常不满.如何添加%$ 2F到我的字符串格式,这样我可以得到的东西干净这样的: (我忘了添加"$"更早)java:我如何使用printf打印美元符号和带2位小数的双 ...

  8. java找不到符号_java找不到符号,请帮忙看一下,程序在附件中

    --------------------Configuration: --------------------D:\我的资料库\Documents\Socket聊天室源程序\Socket聊天室源程序\ ...

  9. python 发送邮件 普通邮件 HTML 发送带附件 群发邮件

    我是一个测试工程师,在做自动化时,会写一些自己用的好的工具,目前有一些现成的工具,自己用着,不是大材小用,就是不符合实际需求,这次整理一个发送邮件的脚本. 文章目录 1. smtplib 与 emai ...

  10. 内网java发送邮件_基于JavaMail的Java邮件发送:简单邮件发送

    电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等.但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送.本 ...

最新文章

  1. app获取个人信息是否合法_【关注】如何界定App违法违规收集个人信息?认定方法来了!...
  2. C++——友元 friend
  3. 数据结构和算法:第七章 排序
  4. 数据结构C语言实现课后第1-2章答案
  5. 一点点学习PS--实战七
  6. js给php注册网页添加实时监听,js 实现watch监听数据变化的代码
  7. 坑爹的SQL ISNUMERIC
  8. JVM内存管理------JAVA语言的内存管理概述
  9. if-else多级嵌套,输入3/4/5个数寻找最大值(太多了容易乱!!!)
  10. linux启动管理,Linux启动管理 详述
  11. Python文档阅读笔记-PyAutoGUI基本使用
  12. jsp mysql书店源码_使用jsp数据库mysql实现网上购物书店课程设计
  13. VCL组件之TScrollBar
  14. ubuntu遇到的 the system is runing low-graphics mode 问题
  15. mybatis使用详解
  16. Erlang/Elixir: 外部通信之-NIF
  17. iphone一键转移_换iPhone数据转移太麻烦?用腾讯电脑管家iPhone助手一键搞定
  18. .NET反编译工具:de4dot
  19. 超简单 Python 汉字拼音转换工具
  20. Unity 中实现 打击感的物理

热门文章

  1. python简明教程_01
  2. informix——ODBC数据源配置
  3. windows下odbc数据源配置
  4. 同济大学 线性代数 第六版 pdf_【课后习题答案】工程数学线性代数同济第六版+课后习题答案...
  5. Android开发项目计划书
  6. java工程师简历例子_Java开发工程师简历优秀简历(50份)
  7. 中缀表达式转后缀表达式(Java)
  8. 【读书笔记】浪潮之巅——公司史篇
  9. JSP编程技术4-登录与注销(静态)
  10. Transwarp Inceptor 问题记录与解决