java实现extended smtp_java实现发送邮件(SMTP)
1.pom引入包
javax.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)相关推荐
- 使用Apache Commons Net SMTP以Java(和Android)发送邮件:STARTTLS,SSL
最近我正在做一个Android实验,我想使用SMTP服务器通过android应用程序通过身份验证和加密来发送电子邮件. 好吧, 我发现Android上的javax.mail并不是一个很好的选择 ,因为 ...
- Java mail使用QQ邮箱发送邮件配置方案
Java mail使用QQ邮箱发送邮件配置方案 java mail配置了QQ邮箱作为服务器发送邮件,结果导致出现503异常: Authentication failed; nested excepti ...
- java自动化测试语言高级之发送邮件
java自动化测试语言高级之发送邮件 文章目录 java自动化测试语言高级之发送邮件 Java 发送邮件 Java 发送邮件 使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器 ...
- java socket smtp_JAVA Socket实现smtp发送邮件
MAIN函数:Socketsocket=newSocket();LogPrinter.setConnectTime(socket,"66.96.163.96",25);方法:pub ...
- java 邮件客户端 smtp_java网络编程三:基于SMTP的邮件发送客户端
1.SMTP简介 2.发送过程 3.源代码示例 package demo.net; import java.awt.BorderLayout; import java.awt.GridLayout; ...
- Java使用javax.mail.jar发送邮件并同意发送附件
因为Java在开发网页上占有绝大优势.所以作为web端的领军人物,譬如发送短信和发送邮件这些就成了必定,网络安全一再安全我们须要把账号的安全级别提到更高.因此这些对于开发者也就成了必须掌握的技能!我一 ...
- java mail header_java使用mail发送邮件时出现乱码如何解决
java使用mail发送邮件时出现乱码如何解决 发布时间:2020-06-24 13:23:24 来源:亿速云 阅读:199 作者:Leah java使用mail发送邮件时出现乱码如何解决?相信很多没 ...
- java发送html附件_Java发送邮件(图片、附件、HTML)
一.简介 要在网络上实现邮件功能,必须要有专门的邮件服务器.这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中. SMTP服务器地址: 一般是 ...
- java sender_Spring Boot用JavaMailSender发送邮件方法
JavaMailSender用来发邮件了我们这里整理一些关于使用JavaMailSender发邮件的例子希望下面的文章能够为各位提供帮助的哦. 相信使用过Spring的众多开发者都知道Spring提供 ...
最新文章
- 用友二次开发 用友控件 Js宿主脚本 调用用友T6 登录 参照 控件示例
- js笔记(9)之定时器数字时钟延时提示框
- mysql每一步花费时间_MySQL之:日志
- php 使用table方式导出excel文件
- 关于计算机与网络导论的论文,计算机科学与导论论文5
- leetcode 904:水果成篮(滑动窗口)
- 671. 二叉树中第二小的节点
- SQL Server:触发器详解
- 牛客14350 苦逼的单身狗
- Mysql-不常用sql语句笔记与不常见错误
- Oracle内置存储过程之DBMS_OUTPUT
- tomcat实现https双向认证(在win10系统使用jdk1.8自带工具keytool)
- MySQL中MGR中SECONDARY节点磁盘满,导致mysqld进程被OOM Killed
- 基于STM32移植UCGUI图形界面框架(3.9.0源码版本)
- LM2596降压DCDC芯片详解
- python入门(三) 实现QQ自动发送消息
- 数据删掉了怎么恢复?数据删除后还能恢复吗
- LayaAirIDE的可视化2D物理使用文档
- mysql误删除数据恢复_mysql误删除数据恢复
- 210917-电脑护眼模式总结
热门文章
- python 40位的数减个位数_Python数据分析入门教程(五):数据运算
- 企业网站 源码 服务邮箱:_后来才知道:温州腾讯企业邮箱定制服务
- map flatmap mappartition flatMapToPair四种用法区别
- 单页web应用是什么?它又会给传统网站带来哪些好处?
- linux 卸载 openldap,Linux下安装openldap
- python用map提取一个数的个十百位数_如何使用python中的map函数?
- ubuntu sun-java6-jre_在 Ubuntu Lucid 下请回 Sun Java6 Jre, 赶走 OpenJDK
- mysql中主从复制配置文件_MySQL主从复制 配置文件实例
- [转载] Java中的变量和常量
- python矩阵变化_用numpy改变矩阵的形状