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 ...
- neovim 使用系统剪贴板
neovim 使用系统剪贴板 1.vim 与 neovim 使用系统剪切板的不同 Nvim has no direct connection to the system clipboard. Inst ...
- 【GUI界面软件】抖音评论采集:自动采集10000多条,含二级评论、展开评论!
目录 一.背景说明 1.1 效果演示 1.2 演示视频 1.3 软件说明 二.代码讲解 2.1 爬虫采集模块 2.2 软件界面模块 2.3 日志模块 三.获取源码及软件 一.背景说明 1.1 效果演示 ...
- python 操作xls
目录 写入文件 demo01 demo02 写入文件 demo01 # 读取:xlrd # 写入:xlwt # 修改(追加写入):xlutils import xlrd import xlwt fro ...
- ubuntu系统下安装php7.4
目录 一.下载/更新php源 二.安装php7.4 三.修改配置 3.1 修改www.conf 文件 四.配置域名 五.nginx的配置文件 5.1 sock方式和nginx配合工作 5.2监听900 ...
- vscode关于json文件添加注释报错处理
- C数据结构:树和森林存储方式与遍历方式
文章目录 树的存储方式 双亲表示法 孩子链表表示法 孩子兄弟表示法(二叉树表示法) 树和二叉树的转换 森林和二叉树的转换 树和森林的遍历 树的遍历方式 森林的遍历方式 浅谈一下几个问题 为什么树没有中 ...
- aws语音呼叫调用,告警电话
import requests data = { 'channel': '99x', 'called_number': '135xxx', 'tts_code': 'TTS_xx', 'tts_par ...
- centos7了解
A,B,C,D四个任务有依赖关系①init:总时间T1+T2+T3+T4+T5+T6+T7②upstart:总时间T1+T2+T3,启动速度加快,但是有依赖关系的服务还是必须先后启动.③systemd ...
- pod(四):pod的重启策略和生命周期
目录 一.系统环境 二.前言 三.pod的重启策略 四.pod的生命周期 一.系统环境 服务器版本 docker软件版本 Kubernetes(k8s)集群版本 CPU架构 CentOS Linux ...