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实现方式的更多相关文章

  1. 基于JavaMail的Java邮件发送:复杂邮件发送

    参考:http://blog.csdn.net/xietansheng/article/details/51722660package com.bfd.ftp.utils;import java.ut ...

  2. java邮件发送(含附件)

    1. [代码]java邮件发送(含附件)疯狂的IT人站长整理的:利用Java发送邮件(含附件)的例子:1.邮件发送的配置propertity文件内容如下:(utils.properties文件放在sr ...

  3. JAVA邮件发送的简单实现

    JAVA MAIL是利用现有的邮件账户发送邮件的工具,比如说,我在网易注册一个邮箱账户,通过JAVA Mail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件.这一机制被广泛的用在注 ...

  4. javamail发送邮件及错误解决方法javax.mail.AuthenticationFailedException: failed to connect, no password specified?

    javamail发送邮件及错误解决方法javax.mail.AuthenticationFailedException: failed to connect, no password specifie ...

  5. java-基于JavaMail的Java邮件发送

    1.基于JavaMail的Java邮件发送:简单邮件发送 2.基于JavaMail的Java邮件发送:复杂邮件发送

  6. 【转】基于JavaMail的Java邮件发送

    http://blog.csdn.net/xietansheng/article/details/51673073 http://blog.csdn.net/xietansheng/article/d ...

  7. java邮件发送工具

    最近在web项目中,客户端注册时需要通过邮箱验证,服务器就需要向客户端发送邮件,我把发送邮件的细节进行了简易的封装: 在maven中需要导入: <!--Email--> <depen ...

  8. spingboot之Java邮件发送

    注意: 该项目的工具类可以直接应用于项目 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...

  9. Java 邮件发送

    <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId&g ...

  10. java 邮件发送工具类

    首先需要下载mail.jar文件,我个人通常是使用maven中心库的那个: <dependency> <groupId>javax.mail</groupId> & ...

随机推荐

  1. Flink on Zeppelin 流计算处理最佳实践

    简介: 欢迎钉钉扫描文章底部二维码进入 EMR Studio 用户交流群 直接和讲师交流讨论~ 点击以下链接直接观看直播回放:https://developer.aliyun.com/live/247 ...

  2. [FAQ] Quasar 组件 q-select 如何触发 onChange 事件

    Quasar 文档都提供了组件的可用参数和事件.方法. qSelect(q-select) 并没有 @change 事件,需要使用 @update 事件,注意用法. <q-select v-mo ...

  3. C#开源的两款功能强大的录屏神器

    ScreenToGif ScreenToGif是一款由C#语言开发且开源的操作简单.免费的屏幕录制和GIF动画制作神器.它可以帮助用户捕捉计算机屏幕上的实时动画,并将其保存为高质量的 GIF 图像格式 ...

  4. linux diff求两个文件的差集

    awk 从文本中过滤出需要的ip queryId_20231109214653_ipBatchQueryResult.json {"id":0,"ip":&qu ...

  5. VMware最小化安装Centos7.6-无桌面

    目录 安装包工具 新建虚拟机 安装 centos 7.6 系统 终端登陆系统 设置ip地址 关闭防火墙 关闭 SELINUX SELINUX=enforcing 硬盘挂载 桥接上网方式 安装包工具 V ...

  6. ruby和glang的md5和sha1加密对比

    ruby和glang的md5和sha1加密对比 package main import ( "crypto/md5" "crypto/sha1" "f ...

  7. angular路由跳转并传值的多种方式

    Angular的学习使用过程中,路由跳转支撑了项目的全过程,所以路由跳转是一个很常见也是一个很容易忽略的点,,对于页面之间的跳转有着很多的问题,跳转的方式/如何携带参数跳转,下面是自己在学习过程中对a ...

  8. SpringMVC 项目集成 PageOffice V6 最简单代码

    本文描述了PageOffice产品在SpringMVC项目中如何集成调用. 新建SpringMVC项目:pageoffice6-springmvc-simple 在您项目的pom.xml中通过下面的代 ...

  9. avue组件自定义按钮/标题/内容/搜索栏

    话不多说 笔记直接分享!! 一.自定义crud搜索栏组件 <template slot-scope="scope" slot="provinceCodeSearch ...

  10. 像阿里OSS一样的文件对像存储服务,容器实现 docker初探及minio测试

    像阿里OSS一样的文件对像存储服务,容器实现 docker run -p 8000:9000 --name oss-minio -d -e "MINIO_ACCESS_KEY=AKIAIOS ...