javax.mail.AhenticationFailedException: 535 Err / A secure connection is requiered(java发邮件)

  • Java发邮件的几种方式:

    • JavaMail

    • Commons Email

    • Spring Mail


  • 实验场景: Spring Mail、Web Project

  • 具体描述

    • 邮件服务器: smtp.qq.com (QQ)

    • 框架: Spring

    • jar包:

      • Spring.jar( 多个jar包,集合)
      • mail-1.4.7.jar (版本自选)
      • commons-logging-1.2.jar(打印日志信息,同上)

  • 运行结果:
    • 打印日志信息如下(xml中设置):

DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "SIZE", arg "73400320"
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg ""
DEBUG SMTP: Found extension "MAILCOMPRESS", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM 
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN failed
Exception in thread "main" org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535 Error: ÇëʹÓÃÊÚȨÂëµÇ¼¡£ÏêÇéÇë¿´: http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:392)
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:306)
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:296)
    at mail.SpringSimpleMailTest.main(SpringSimpleMailTest.java:35)
Caused by: javax.mail.AuthenticationFailedException: 535 Error: ÇëʹÓÃÊÚȨÂëµÇ¼¡£ÏêÇéÇë¿´: http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

    at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:826)
    at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:761)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:685)
    at javax.mail.Service.connect(Service.java:295)
    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:389)
    ... 3 more

    一开始,尝试使用 smtp.163.com(网易),抛出类似的错误,由于问题源于一个开源项目的研究,可能对其进行了封装,调试了很久,只能解决部分问题。
    。。。
    查阅了一些资料,邮件发送成功,此类相关问题应该就能迎刃而解!

  • 原因如下:

    • 服务 授权码

    • 正确配置邮件发送相关信息


  • Web Project 项目结构:

    • project name:TestMail

    • package name : mail

    • file : 3 个

    • RT:
      这里写图片描述

  • SpringSimpleMailTest.java
package mail;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;

/** 
 * @ClassName: SpringSimpleMailTest
 * 
 * @Description: TODO Spring 实现简单的邮件发送测试
 * 
 * @author kngines
 * 
 * @date 2017年5月6日   
 */
public class SpringSimpleMailTest {

    public static void main(String[] args) {

        // 创建应用程序上下文
        ApplicationContext actx = new ClassPathXmlApplicationContext("mail/mailMessage.xml");

        // Spring 封装MailSender,不再重复造轮子
        MailSender ms = (MailSender) actx.getBean("mailSender");

        // 简单邮件发送
        SimpleMailMessage smm = (SimpleMailMessage) actx.getBean("mailMessage");

        // 主题,内容
        smm.setSubject("你好");
        smm.setText("这个是一个通过Spring框架来发送邮件的小程序");

        // 发送
        ms.send(smm);
    }
}
  • mail.properties
#-------------------------------------
# 邮件服务配置
#-------------------------------------

# 服务器
mail.host=smtp.qq.com

# 端口号 qq邮箱需要使用SSL 端口号465或587
mail.smtp.port=465

# 服务器超时时间
mail.smtp.timeout=50000

# starttls 是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL)
mail.smtp.starttls.enable=true

# 开启控制台打印服务器相应信息(日志)
mail.debug=true

# 登录用户名,如果是qq,则填写qq号
mail.username=123456

# 授权码(例如,qq 开启 SMTP 授权码,qq授权码16位)
mail.password=xzbasdjfadladsfa

# 是否需要验证码
mail.smtp.auth=true

# 发件人地址(qq邮箱 A)
mail.from=123456@qq.com

# 收件人地址(qq邮箱 B)
mail.to=9876543@qq.com
  • mailMessage.xml
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
     http://www.springframework.org/schema/aop  
     http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p">

    <!-- 加载Properties文件 -->
    <bean id="configurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:/mail/mail.properties</value>
            </list>
        </property>
    </bean>

    <!-- 申明SimpleMailMessage对象 -->
    <bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">
        <property name="from">
            <value>${mail.from}</value>
        </property>
        <!-- 设置接收方 -->
        <property name="to" value="${mail.to}" />
        <!-- 查看SimpleMailMessage源码还可以注入标题,内容等 -->
    </bean>

    <!-- 声明 JavaMailSenderImpl对象 -->
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="defaultEncoding" value="UTF-8" />
        <property name="host" value="${mail.host}" />
        <property name="username" value="${mail.username}" />
        <property name="password" value="${mail.password}" />
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
                <prop key="mail.debug">${mail.debug}</prop>
                <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
                <prop key="mail.smtp.starttls.enable">${mail.smtp.starttls.enable}</prop>
                <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
                <prop key="mail.smtp.socketFactory.port">${mail.smtp.port}</prop>
                <prop key="mail.smtp.socketFactory.fallback">false</prop>
            </props>
        </property>
    </bean>

</beans>  

  • 根据步骤建立Web Project 、导入jar包之后,检查 客户端授权码、端口是否配置(密码不是登录邮箱时的真实密码)

  • 成功运行结果如下:

DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "SIZE", arg "73400320"
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg ""
DEBUG SMTP: Found extension "MAILCOMPRESS", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: STARTTLS requested but already using SSL
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM 
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
DEBUG SMTP: use8bit false
MAIL FROM:<1234567@qq.com>
250 Ok
RCPT TO:<3147755101@qq.com>
250 Ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   3147755101@qq.com
DATA
354 End data with <CR><LF>.<CR><LF>
Date: Sat, 6 May 2017 20:10:20 +0800 (CST)
From: 123456@qq.com
To: 9876543@qq.com
Message-ID: <857394605.0.1494072621026.JavaMail.Khgines@Kngines-PC>
Subject: =?UTF-8?B?5L2g5aW9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64

6L+Z5Liq5piiA5Liq6YCa6L+HU5qGG5p6l5Y+R6Ku5E5bCP56iL
5bqP
.
250 Ok: queued as 
QUIT
221 Bye

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xsimah

创作不易,感谢客官的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值