1.pom引入包

javax.mail

mail

1.4.7

2.Email实体类

import lombok.Data;

import lombok.EqualsAndHashCode;

import lombok.experimental.Accessors;

import java.util.List;

import java.util.Map;

/**

* @ClassName: Email

* @author: mxy

* @Description: Email的实体类

*/

@Data

@EqualsAndHashCode

@Accessors(chain = true)

public class Email {

/**

* 接收人列表 元素如"10*****787@qq.com"

*/

private List toList;

/**

* (可不填)抄送人列表 元素如"10*****787@qq.com"

*/

private List ccList;

/**

* (可不填)密送人列表 元素如"10*****787@qq.com"

*/

private List bccList;

/**

* (可不填)发送者昵称

*/

private String fromName;

/**

* 发送人(邮箱账号)

*/

private String from;

/**

* 密码(腾讯邮箱为16位授权码)

*/

private String password;

/**

* 邮件主机地址

*/

private String host;

/**

* (可不填)发信端口 默认465

*/

private String port="465";

/**

* 正文

*/

private String text;

/**

* 主题

*/

private String subject;

/**

* (可不填)附件

*/

private List fileList;

/**

* (可不填)要插入的图片 正文需写成html语言,如

* String text = "

HTML+附件+内嵌图片的邮件测试!!!

"

* +"点击跳转"

* +"

LOGO图标

"

* +"";

* Map imagesMap = new HashMap<>();

* imagesMap.put("logo","D:\\asf_logo_wide.gif");

*/

private Map imagesMap;

3.SendEmailUtils类(SMTP)

将email中的所需属性值注入,调用sendSmtpEmail(email)即可,返回值为Boolean.

import com.bonc.industry.email.pojo.Email;

import com.sun.mail.util.MailSSLSocketFactory;

import lombok.extern.slf4j.Slf4j;

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import javax.mail.*;

import javax.mail.internet.*;

import java.security.GeneralSecurityException;

import java.util.Date;

import java.util.Map;

import java.util.Properties;

/**

* @ClassName:sendEmail

* @author:mxy

* @Description: 发送邮件的工具类

*/

@Slf4j

public class SendEmailUtils {

//发送的主要类:涉及到"登录邮箱"-"组装邮件"-"发送".

public static Boolean sendSmtpEmail(Email email){

try {

Properties properties = getProperties(email);

//发送人名称(为空则默认为发送账户)

Session session = getSession(properties, email);

session.setDebug(true);

//创建email

MimeMessage message = getMimeMessage(email, session);

Transport.send(message);

return true;

}catch (Exception e){

log.error("发送失败:"+e.toString());

return false;

}

}

private static MimeMessage getMimeMessage(Email email, Session session) throws Exception {

MimeMessage message = new MimeMessage(session);

// 设置邮件的属性

// 设置发件人

if (!email.getFromName().isEmpty()) {

// 自定义发件人昵称

message.setFrom(new InternetAddress(MimeUtility.encodeText(email.getFromName()) + " "));

} else {

message.setFrom(new InternetAddress(email.getFrom()));

}

// 一对多发送:

// 构建一个群发地址数组(1对多)

InternetAddress[] adr = new InternetAddress[email.getToList().size()];

for (int i = 0; i < adr.length; i++) {

adr[i] = new InternetAddress(email.getToList().get(i));

}

// Message的setRecipients方法支持群发。 收件人

message.setRecipients(Message.RecipientType.TO, adr);

// 设置密送人

if (null!=email.getBccList()&&email.getBccList().size()>0) {

InternetAddress[] internetAddressBCC = new InternetAddress[email.getBccList().size()];

for (int i = 0; i < internetAddressBCC.length; i++) {

internetAddressBCC[i] = new InternetAddress(email.getBccList().get(i));

}

message.setRecipients(Message.RecipientType.BCC, internetAddressBCC);

}

// 设置抄送人

if (null!=email.getCcList()&&email.getCcList().size()>0) {

InternetAddress[] internetAddressCC = new InternetAddress[email.getCcList().size()];

for (int i = 0; i < internetAddressCC.length; i++) {

internetAddressCC[i] = new InternetAddress(email.getCcList().get(i));

}

message.setRecipients(Message.RecipientType.CC, internetAddressCC);

}

/*

* JavaMail API不限制信息只为文本,任何形式的信息都可能作MimeMessage的一部分.

* 除了文本信息,作为文件附件包含在电子邮件信息的一部分是很普遍的. JavaMail

* API通过使用DataHandler对象,提供一个允许我们包含非文本BodyPart对象的简便方法.

*/

// 设置发生日期

message.setSentDate(new Date());

// 设置邮件的主题

message.setSubject(email.getSubject());

//创建用于组合邮件正文和附件的MimeMultipart对象

MimeMultipart mimeMultipart = new MimeMultipart("mixed");

// 创建邮件的正文

message.setText(email.getText(), "text/html;charset=gb2312");

// 设置HTML内容

MimeBodyPart content = createContent(email.getText(), email.getImagesMap());

mimeMultipart.addBodyPart(content);

// 创建附件

if(null!=email.getFileList()&&email.getFileList().size()>0){

for (String filePath:email.getFileList()){

MimeBodyPart attachmentPart = createAttachment(filePath);

mimeMultipart.addBodyPart(attachmentPart);

}

}

message.setContent(mimeMultipart);

message.saveChanges(); // 保存修改

return message;

}

public static MimeBodyPart createContent(String body, Map imagesMap) throws Exception {

/* 创建代表组合MIME消息的MimeMultipart对象和该对象保存到的MimeBodyPart对象 */

MimeBodyPart content = new MimeBodyPart();

// 创建一个MimeMultipart对象

MimeMultipart multipart = new MimeMultipart();

if (!body.isEmpty()) {

// 创建一个表示HTML正文的MimeBodyPart对象,并将它加入到前面的创建的MimeMultipart对象中

MimeBodyPart htmlBodyPart = new MimeBodyPart();

htmlBodyPart.setContent(body, "text/html;charset=UTF-8");

multipart.addBodyPart(htmlBodyPart);

}

if (imagesMap != null && !imagesMap.isEmpty()) {

for (Map.Entry entry: imagesMap.entrySet()) {

/* 创建一个表示图片的MimeBodyPart对象,并将它加入到前面的创建的MimeMultipart对象中 */

MimeBodyPart pictureBodyPart = new MimeBodyPart();

// FileDataSource用于读取文件数据,并返回代表数据的输入输出流和数据的MIME类型

FileDataSource fileDataSource = new FileDataSource(entry.getValue());

// DataHandler类用于封装FileDataSource对象,并为应用程序提供访问数据的接口

pictureBodyPart.setDataHandler(new DataHandler(fileDataSource));

pictureBodyPart.setContentID(entry.getKey());

multipart.addBodyPart(pictureBodyPart);

}

}

// 将MimeMultipart对象保存到MimeBodyPart对象中

content.setContent(multipart);

return content;

}

/**

* 在 JavaMail 中,可以通过 extends Authenticator 抽象类,在子类中覆盖父类中的

* getPasswordAuthentication() 方法,就可以实现以不同的方式来进行登录邮箱时的用户身份认证。JavaMail

* 中的这种设计是使用了策略模式(Strategy

*/

public static Session getSession(Properties properties, Email email) {

return Session.getInstance(properties, new Authenticator() {

@Override

protected PasswordAuthentication getPasswordAuthentication() {

//设置发送帐号密码

return new PasswordAuthentication(

email.getFrom(), email.getPassword());

}

});

}

/**

* JavaMail需要Properties来创建一个session对象。它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机.

* @param email

* @return

* @throws GeneralSecurityException

*/

public static Properties getProperties(Email email) throws GeneralSecurityException {

Properties properties = new Properties();

// 设置发送主机

properties.setProperty("mail.host", email.getHost());

// 设置smtp方式

properties.setProperty("mail.transport.protocol", "smtp");

//设置发送端口

properties.setProperty("mail.smtp.port", email.getPort());

// 使用smtp身份验证

properties.setProperty("mail.smtp.auth", "true");

//QQ存在一个特性设置SSL加密

MailSSLSocketFactory sf = new MailSSLSocketFactory();

sf.setTrustAllHosts(true);

properties.put("mail.smtp.ssl.enable", "true");

properties.put("mail.smtp.ssl.socketFactory", sf);

return properties;

}

/**

* 创建保存附件的MimeBodyPart对象,并且加入附件内容和相应的信息

* @param filepath

* @return

* @throws MessagingException

*/

public static MimeBodyPart createAttachment(String filepath) throws Exception{

MimeBodyPart attachmentPart = new MimeBodyPart();

FileDataSource fds = new FileDataSource(filepath);

attachmentPart.setDataHandler(new DataHandler(fds));

attachmentPart.setFileName(MimeUtility.encodeText(fds.getName()));

return attachmentPart;

}

}

java实现extended smtp_java实现发送邮件(SMTP)相关推荐

  1. 使用Apache Commons Net SMTP以Java(和Android)发送邮件:STARTTLS,SSL

    最近我正在做一个Android实验,我想使用SMTP服务器通过android应用程序通过身份验证和加密来发送电子邮件. 好吧, 我发现Android上的javax.mail并不是一个很好的选择 ,因为 ...

  2. Java mail使用QQ邮箱发送邮件配置方案

    Java mail使用QQ邮箱发送邮件配置方案 java mail配置了QQ邮箱作为服务器发送邮件,结果导致出现503异常: Authentication failed; nested excepti ...

  3. java自动化测试语言高级之发送邮件

    java自动化测试语言高级之发送邮件 文章目录 java自动化测试语言高级之发送邮件 Java 发送邮件 Java 发送邮件 使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器 ...

  4. java socket smtp_JAVA Socket实现smtp发送邮件

    MAIN函数:Socketsocket=newSocket();LogPrinter.setConnectTime(socket,"66.96.163.96",25);方法:pub ...

  5. java 邮件客户端 smtp_java网络编程三:基于SMTP的邮件发送客户端

    1.SMTP简介 2.发送过程 3.源代码示例 package demo.net; import java.awt.BorderLayout; import java.awt.GridLayout; ...

  6. Java使用javax.mail.jar发送邮件并同意发送附件

    因为Java在开发网页上占有绝大优势.所以作为web端的领军人物,譬如发送短信和发送邮件这些就成了必定,网络安全一再安全我们须要把账号的安全级别提到更高.因此这些对于开发者也就成了必须掌握的技能!我一 ...

  7. java mail header_java使用mail发送邮件时出现乱码如何解决

    java使用mail发送邮件时出现乱码如何解决 发布时间:2020-06-24 13:23:24 来源:亿速云 阅读:199 作者:Leah java使用mail发送邮件时出现乱码如何解决?相信很多没 ...

  8. java发送html附件_Java发送邮件(图片、附件、HTML)

    一.简介 要在网络上实现邮件功能,必须要有专门的邮件服务器.这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中. SMTP服务器地址: 一般是 ...

  9. java sender_Spring Boot用JavaMailSender发送邮件方法

    JavaMailSender用来发邮件了我们这里整理一些关于使用JavaMailSender发邮件的例子希望下面的文章能够为各位提供帮助的哦. 相信使用过Spring的众多开发者都知道Spring提供 ...

最新文章

  1. 用友二次开发 用友控件 Js宿主脚本 调用用友T6 登录 参照 控件示例
  2. js笔记(9)之定时器数字时钟延时提示框
  3. mysql每一步花费时间_MySQL之:日志
  4. php 使用table方式导出excel文件
  5. 关于计算机与网络导论的论文,计算机科学与导论论文5
  6. leetcode 904:水果成篮(滑动窗口)
  7. 671. 二叉树中第二小的节点
  8. SQL Server:触发器详解
  9. 牛客14350 苦逼的单身狗
  10. Mysql-不常用sql语句笔记与不常见错误
  11. Oracle内置存储过程之DBMS_OUTPUT
  12. tomcat实现https双向认证(在win10系统使用jdk1.8自带工具keytool)
  13. MySQL中MGR中SECONDARY节点磁盘满,导致mysqld进程被OOM Killed
  14. 基于STM32移植UCGUI图形界面框架(3.9.0源码版本)
  15. LM2596降压DCDC芯片详解
  16. python入门(三) 实现QQ自动发送消息
  17. 数据删掉了怎么恢复?数据删除后还能恢复吗
  18. LayaAirIDE的可视化2D物理使用文档
  19. mysql误删除数据恢复_mysql误删除数据恢复
  20. 210917-电脑护眼模式总结

热门文章

  1. python 40位的数减个位数_Python数据分析入门教程(五):数据运算
  2. 企业网站 源码 服务邮箱:_后来才知道:温州腾讯企业邮箱定制服务
  3. map flatmap mappartition flatMapToPair四种用法区别
  4. 单页web应用是什么?它又会给传统网站带来哪些好处?
  5. linux 卸载 openldap,Linux下安装openldap
  6. python用map提取一个数的个十百位数_如何使用python中的map函数?
  7. ubuntu sun-java6-jre_在 Ubuntu Lucid 下请回 Sun Java6 Jre, 赶走 OpenJDK
  8. mysql中主从复制配置文件_MySQL主从复制 配置文件实例
  9. [转载] Java中的变量和常量
  10. python矩阵变化_用numpy改变矩阵的形状