前言:前一天调用163邮箱发送邮件还么有问题,今天再调用就各种发送不成功,害的我都关闭授权,还花了一毛钱短信费重新开启授权,最后百度到了一篇文章,非常贴切,在此转载下。

本人遇到的错误代码是554,邮件主题和内容有敏感词汇(您的验证码是),或者被当作垃圾邮件,修改了一下主题和内容就OK了。

使用springboot向163邮箱发送邮件遇到一些问题,主要归为如下几点:

1.连接smtp.163.com异常,报错:java.net.UnknownHostException: smtp.163.com
2.用户权限不足,报错:javax.mail.AuthenticationFailedException: 550 User has no permission
3.认证错误,报错:javax.mail.AuthenticationFailedException: 535 Error: authentication failed
4.发送内容错误,报错:com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM
5.发送附件错误,报错:javax.mail.MessagingException: Empty multipart: multipart/related; 
6.发送静态图片资源,查看邮件,图片显示不出来

问题1:

详细报错如下:

org.springframework.mail.MailSendException: Mail server connection failed; nested exception is 

com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.163.com , 25; timeout
-1;
nested exception is:
java.net.UnknownHostException: smtp.163.com . Failed messages:
com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.163.com , 25; timeout -1;
nested exception is:
java.net.UnknownHostException: smtp.163.com ; message exception details (1) are:
Failed message 1:
com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.163.com , 25; timeout -1;
nested exception is:
java.net.UnknownHostException: smtp.163.com
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2118)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:712)
at javax.mail.Service.connect(Service.java:366)
at org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport (JavaMailSenderImpl.java:501)
at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:421)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340)
at mail.service.MailSendService.sendInlineMail(MailSendService.java:111)

解决思路:
1.进行telnet检查,查看telent smtp.163.com 25,发现可以正常telent成功,说明网络没问题
2.查看配置是否正常,经查看,发现springboot的application.properties文件中spring.mail.host=smtp.163.com后面有空格,去掉空格即可

问题2:

详细报错如下:

org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is

javax.mail.AuthenticationFailedException: 550 User has no permission

  at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:424)
  at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345)
  at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340)
  at mail.service.MailSendService.sendInlineMail(MailSendService.java:111)
  at mail.test.TestMail.test(TestMail.java:43)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  at java.lang.reflect.Method.invoke(Unknown Source)
  at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
  at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
  at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
  at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

解决思路:
1.在cn.bing.com上搜索,发现有该问题的先例,问题原因是没有开启163邮箱的pop3/smtp协议
  参考文档:http://www.cnblogs.com/cosyer/p/6676023.html
2.登录163邮箱->设置->POP3/SMTP/IMAP设置->开启协议,正确设置授权码

问题3:

详细报错如下:

javax.mail.AuthenticationFailedException: 535 Error: authentication failed

    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:424)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340)
at mail.service.MailSendService.sendInlineMail(MailSendService.java:111)
at mail.test.TestMail.test(TestMail.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

解决思路:
1.163邮箱开通smtp服务后,javaMail发送邮箱要使用授权码作为登录密码
2.设置spring.mail.password=授权码

问题4:

详细报错如下:

org.springframework.mail.MailSendException: Failed messages: 

com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smtp11,D8CowACX7CmSHB5b3SrlCA--.26635S3 

1528700051,please see http://mail.163.com/help/help_spam_16.htm?

ip=182.138.102.204&hostid=smtp11&time=1528700051
at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:474) ~[spring-context-support-4.3.13.RELEASE.jar:4.3.13.RELEASE]
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:307) ~[spring-context-support-4.3.13.RELEASE.jar:4.3.13.RELEASE]
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:296) ~[spring-context-support-4.3.13.RELEASE.jar:4.3.13.RELEASE]
at mail.service.MailSendService.sendSimpleMail(MailSendService.java:50) ~[classes/:na]
at mail.test.TestMail.test(TestMail.java:36) [classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_80]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_80]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_80]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.7.0_80]
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) [junit-4.12.jar:4.12]
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.12.jar:4.12]
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) [junit-4.12.jar:4.12]
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

解决思路:
1.根据错误提示,查看如下url:
http://mail.163.com/help/help_spam_16.htmip=182.138.102.204&hostid=smtp11&time=1528700051
 这是163邮箱提供的一个错误码对应表
2.554 DT:SPM对应错误为:
 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件
3.修改邮件的主题及内容,使用合法信息,例如不要使用:test、测试这些信息

问题5:

详细报错如下:

Caused by: javax.mail.MessagingException: Empty multipart: multipart/related;
boundary="----=_Part_2_1115361411.1528698722005"
at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:548)
at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:81)
... 45 more

... 45 more
解决思路:
1.在cn.bing.com上搜索,问题原因是没有设置邮件内容,导致报该错误,其实和发送附件没有任何关系
参考文章:https://stackoverflow.com/questions/32306928/sending-emails-with-attachments-empty-
multipart

问题6:
无报错信息

解决思路:

1.检查代码,具体代码如下:

public boolean sendInlineMail(String fromPos, String toPos, String subject, FileSystemResource file)
{
MimeMessage msg = mailSender.createMimeMessage();
try
{
//MimeMessageHelper构造器,如果要发送附件邮件,必须指定multipart参数为true
MimeMessageHelper helper = new MimeMessageHelper(msg, true);
helper.setFrom(fromPos);
helper.setTo(toPos);
helper.setSubject(subject);
helper.setText("<html><body>静态资源:<img src='cid:pic' /></body></html>", true);
helper.addInline("pic", file);
mailSender.send(msg);
}
catch (MessagingException e)
{
logger.error("发送附件邮件失败.", e);
return false;
} return true;
}

2.对代码进行了调整:将addInline方法要放在setText后面,进行测试发现正常了,可能原因是顺序如果不对,导致资源没有被正确引用。

原文链接:遵循 CC 4.0 BY-SA 版权协议,https://blog.csdn.net/ignorewho/article/details/80654201

【转载】SpringBoot-配置发送邮件遇到的一些问题的更多相关文章

  1. 使用 SpringBoot 配置发送邮件功能

    1.使用 SpringBoot 配置发送邮件功能 项目总体结构 用户表设计 SET FOREIGN_KEY_CHECKS=0; CREATE DATABASE sample; USE sample; ...

  2. SpringBoot配置发送邮件

    一.导入jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...

  3. 转载 springboot 配置读取

    前言:了解过spring-Boot这个技术的,应该知道Spring-Boot的核心配置文件application.properties,当然也可以通过注解自定义配置文件**.properties的信息 ...

  4. SpringBoot配置属性转载地址

    SpringBoot配置属性系列 SpringBoot配置属性之MVC SpringBoot配置属性之Server SpringBoot配置属性之DataSource SpringBoot配置属性之N ...

  5. zabbix 配置发送邮件报警

    标签:监控/SQLServer/Windows 概述 本篇文章主要介绍如何配置zabbix借助外部邮件进行发送邮件报警,zabbix通过配置文件调用mailx来进行邮件的发送.在Centos6以上的版 ...

  6. SpringBoot基础系列-SpringBoot配置

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9990680.html SpringBoot基础系列-SpringBoot配置 概述 属性 ...

  7. spring boot 学习(十)SpringBoot配置发送Email

    SpringBoot配置发送Email 引入依赖 在 pom.xml 文件中引入邮件配置: <dependency> <groupId>org.springframework. ...

  8. java springboot+maven发送邮件

    springboot+maven发送邮件 废话不多说直接上代码 1. pom 文件导入jar包 <!--邮件发送--> <dependency> <groupId> ...

  9. SpringBoot配置属性之Server

    SpringBoot配置属性系列 SpringBoot配置属性之MVC SpringBoot配置属性之Server SpringBoot配置属性之DataSource SpringBoot配置属性之N ...

  10. springboot上传文件 & 不配置虚拟路径访问服务器图片 & springboot配置日期的格式化方式 & Springboot配置日期转换器

    1.    Springboot上传文件 springboot的文件上传不用配置拦截器,其上传方法与SpringMVC一样 @RequestMapping("/uploadPicture&q ...

随机推荐

  1. 网络流24题 P2766 最长不下降子序列问题

    题目描述 «问题描述: 给定正整数序列x1,...,xn . (1)计算其最长不下降子序列的长度s. (2)计算从给定的序列中最多可取出多少个长度为s的不下降子序列. (3)如果允许在取出的序列中多次 ...

  2. 畅通工程续(HDU 1874)(简单最短路)

    某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰. 现在 ...

  3. Flask-第三方插件

    Flask-Session 因为flask自带的session是将session存在cookie中: 所以才有了第三方Flask_session插件,可以将session存储在我们想存储的数据库中(r ...

  4. Mapreduce-实现webcount代码

    参考博文:https://blog.csdn.net/qq_41035588/article/details/90514824 首先安装一个Hadoop-Eclipse-Plugin 方便来对于hdf ...

  5. Java并发指南4:Java中的锁 Lock和synchronized

    Java中的锁机制及Lock类 锁的释放-获取建立的happens before 关系 锁是java并发编程中最重要的同步机制.锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消 ...

  6. 详解Intellij IDEA中.properties文件中文显示乱码问题的解决

    首先,你可能会见到如下提示: File encoding is disabled because .properties file (see Settings|Editor|File Encoding ...

  7. java客户端验证https连接(忽略证书验证和证书验证两种方式)

    首先根据如下操作生成证书,配置springboot https,生成一个简单的https web服务 https://www.cnblogs.com/qq931399960/p/11889349.ht ...

  8. idea 拉取git新分支

    前面的话: 一不小心,删除了dev的分支,没办法.头头重新克隆了下,但是发现idea的右下角并没有啊,我记得之前遇到过一次 但还是忘记如何操作了,在这记录下,省的下次还得去百度 选中项目-git-fe ...

  9. [Java复习] JVM

    Part1:Java类加载机制:类加载器,类加载机制,双亲委派模型 1. Java 类加载过程? 类加载过程即是指JVM虚拟机把.class文件中类信息加载进内存,并进行解析生成对应的class对象的 ...

  10. 一百三十三:CMS系统之版块管理一

    把模型创建到公共的models里面 class BoardModel(db.Model): __tablename__ = 'board' id = db.Column(db.Integer, pri ...