Java邮件发送解决ssl javax.mail实现方式
package test; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.util.ByteArrayDataSource;
import java.io.ByteArrayInputStream;
import java.util.Properties; /**
* Java邮件发送解决ssl javax.mail实现方式
* Caused by: javax.mail.AuthenticationFailedException: 535 5.7.0 ERR.LOGIN.NONSSL
需要add 解决ssl发送邮件 属性的配置
*/
public class MultiEmailTest {
private static Logger logger = LoggerFactory.getLogger(MultiEmailV3.class);
/**
* 系统属性
*/
private static Properties props = System.getProperties(); /**
* 邮件会话对象
*/
private static Session session; /**
* MIME邮件对象
*/
private static MimeMessage mimeMsg;
private static Multipart mp = null;
private static final String HOST_NAME = "smtp.qiye.163.com"; //邮件服务器 可配
private static final String FROM_ADDR = "xxx@xx.com"; //邮件发送者地址 可配
private static final String FROM_NAME = "xxx@xx.com"; //邮件发送者名称 可配
private static final String FROM_PWD = "xx"; //邮件发送者密码 可配 private static final String SMTP = "smtp";
static{
//add 解决ssl发送邮件
props.put("mail.smtp.starttls.enable",true);
} /**
* 发送邮件
* @param tos 收件人
* @param copyTos 抄送人
* @param subject 主题(标题)
* @param content 正文(内容)
* @throws Exception 异常
*/
public static void sendMail(String[] tos, String[] copyTos, String subject, String content) throws Exception {
// Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象
BodyPart bp = setBodyPart(tos, subject, content);
send(copyTos, bp);
} /**
* 发送邮件(带附件)
* @param tos 收件人
* @param copyTos 抄送人
* @param subject 主题(标题)
* @param content 正文(内容)
* @throws Exception 异常
*/
public static void sendMailAttachment(String[] tos, String[] copyTos, String subject, String content, ByteArrayInputStream stream, String fileName, String type) throws Exception {
// Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象
BodyPart bp = setBodyPart(tos, subject, content);
// 邮件内容部分2---附件1
MimeBodyPart body1 = new MimeBodyPart();
DataSource dataSource1 = new ByteArrayDataSource(stream, type);
// 代表项目根目录下
body1.setDataHandler(new DataHandler(dataSource1));
// 中文附件名,解决乱码
body1.setFileName(MimeUtility.encodeText(fileName));
mp.addBodyPart(bp);
send(copyTos, body1);
} /**
* 构建body
* @param tos
* @param subject
* @param content
* @return
* @throws MessagingException
*/
private static BodyPart setBodyPart(String[] tos, String subject, String content) throws MessagingException {
mp = new MimeMultipart();
mimeMsg = new MimeMessage(session); //add 解决ssl发送邮件
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.port", 465);
props.put("mail.smtp.port", 465); session = Session.getDefaultInstance(props, null);
session.setDebug(false); // 设置发信人
mimeMsg.setFrom(new InternetAddress(FROM_ADDR));
// 设置接收人
InternetAddress[] sendTo = new InternetAddress[tos.length];
for (int i = 0; i < tos.length; i++) {
sendTo[i] = new InternetAddress(tos[i]);
}
mimeMsg.setRecipients(Message.RecipientType.TO, sendTo);
// 设置主题
mimeMsg.setSubject(subject); // 设置正文
BodyPart bp = new MimeBodyPart();
bp.setContent(content, "text/html;charset=utf-8");
return bp;
} /**
* body追加部分
* @param copyTos
* @param bp
* @throws MessagingException
*/
private static void send(String[] copyTos, BodyPart bp) throws MessagingException {
mp.addBodyPart(bp);
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
// 发送邮件
Transport transport = session.getTransport(SMTP);
transport.connect(HOST_NAME, FROM_NAME, FROM_PWD);
transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
if (copyTos != null && copyTos.length > 0) {
// 设置抄送人
for (int i = 0; i < copyTos.length; i++) {
mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copyTos[i]));
}
transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.CC));
}
transport.close();
} //测试
public static void main(String[] args) throws Exception {
String[] tos = {"xxx@xx.com"}; //接收者的邮箱地址
String errorMsg = "123\n223";
ByteArrayInputStream stream = new ByteArrayInputStream(errorMsg.getBytes()); //带附件的邮件
// sendMailAttachment(tos, null, "测试邮件-附件邮件含附件", "Dear ALL 2233:<br><br> 详见附件", stream, "文件.txt", "application/txt");
//普通邮件
sendMail(tos,null,"测试邮件-普通邮件不含附件","邮件内容这是一封测试邮件");
} }
Java邮件发送解决ssl javax.mail实现方式的更多相关文章
- 基于JavaMail的Java邮件发送:复杂邮件发送
参考:http://blog.csdn.net/xietansheng/article/details/51722660package com.bfd.ftp.utils;import java.ut ...
- java邮件发送(含附件)
1. [代码]java邮件发送(含附件)疯狂的IT人站长整理的:利用Java发送邮件(含附件)的例子:1.邮件发送的配置propertity文件内容如下:(utils.properties文件放在sr ...
- JAVA邮件发送的简单实现
JAVA MAIL是利用现有的邮件账户发送邮件的工具,比如说,我在网易注册一个邮箱账户,通过JAVA Mail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件.这一机制被广泛的用在注 ...
- javamail发送邮件及错误解决方法javax.mail.AuthenticationFailedException: failed to connect, no password specified?
javamail发送邮件及错误解决方法javax.mail.AuthenticationFailedException: failed to connect, no password specifie ...
- java-基于JavaMail的Java邮件发送
1.基于JavaMail的Java邮件发送:简单邮件发送 2.基于JavaMail的Java邮件发送:复杂邮件发送
- 【转】基于JavaMail的Java邮件发送
http://blog.csdn.net/xietansheng/article/details/51673073 http://blog.csdn.net/xietansheng/article/d ...
- java邮件发送工具
最近在web项目中,客户端注册时需要通过邮箱验证,服务器就需要向客户端发送邮件,我把发送邮件的细节进行了简易的封装: 在maven中需要导入: <!--Email--> <depen ...
- spingboot之Java邮件发送
注意: 该项目的工具类可以直接应用于项目 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...
- Java 邮件发送
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId&g ...
- java 邮件发送工具类
首先需要下载mail.jar文件,我个人通常是使用maven中心库的那个: <dependency> <groupId>javax.mail</groupId> & ...
随机推荐
- Cube 技术解读 | 详解「支付宝」全新的卡片技术栈
简介: 魔方卡片(Cube),让 App 首页实现敏捷更新. CodeHub#7 正式落幕,来自蚂蚁集团的技术专家「京君」与掘金社区的开发者们分享了「支付宝」全新的卡片技术栈--魔方卡片(Cub ...
- WPF自定义控件的三种方式
简介: 某些场景下,我们确实需要创建新的控件.此时,理解 WPF不同控件的创建方法就显得非常重要. WPF 提供3个用于创建控件的方法,每个方法都提供不同的灵活度. WPF控件可以通过数据模型(Da ...
- 面试官:这就是你理解的Java多线程基础?
引言 现代的操作系统(Windows,Linux,Mac OS)等都可以同时打开多个软件(任务),这些软件在我们的感知上是同时运行的,例如我们可以一边浏览网页,一边听音乐.而CPU执行代码同一时间只能 ...
- 一键关闭 Win11 系统广告「GitHub 热点速览」
不知道读者中有多少人早已对 Windows 11 系统自带的广告感到厌烦,却又不知道如何关闭它们? 虽然网上有详细的关闭教程,但是都需要逐一手动操作,不是很方便.所以,今天「GitHub 热点速览」给 ...
- 面向教师的OBS直播速成教程
引言 本文是面向教师讲述的如何使用OBS软件进行课程直播的速成教程. 本文配套视频链接如下️ 面向教师的OBS直播教学速成教程_哔哩哔哩_bilibili 环境准备 1. 下载对应本机系统版本的并安装 ...
- pageoffice6 在线编辑 word 文件时禁止拷贝到外部
有些特殊情况下,希望用户可以在线编辑Word文档,也允许用户拷贝本地电脑或网络上的资料到Word文档中进行编辑,但是不希望用户把在线Word文档中的内容另存到本地或选择并拷贝出去,此时只是禁用另存.禁 ...
- java学习之旅(day.15)
IO框架 I:input O:output 流:内存与存储设备间传输数据的通道 数据借助流进行传输 流的分类 按流向分: 输入流:将存储设备中的内容读入到内存中(程序运行) 输出流:将内存中的内容写入 ...
- docker之docker-compose
docker-compose就是个二进制的工具,它可以单机编排,批量管理多个容器 [root@mcwk8s01 harbor]# file /usr/local/bin/docker-compose ...
- liunx下redis的哨兵环境搭建
哨兵简介 一定要有一个概念:哨兵实例也是特殊的Redis实例,也就是哨兵实例是独立的进程,多个哨兵实例可以搭建主从(Master-Slave),它们承担的职责和普通的Redis实例不一样.下面是官方文 ...
- PHP-FPM 运行原理分析
概述 PHP-FPM 是一种 Master / Worker 多进程运行模式,进程的数量可以通过 php-fpm.conf 进行具体的配置. Master 进程主要负责 CGI.PHP 环境的初始化. ...