You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring项目使用IONOS域名发送邮件遇认证失败问题求助

Spring项目使用IONOS邮箱发送邮件认证失败问题

错误信息

尝试用IONOS邮箱在Spring项目中发邮件,确认凭证正确但仍报认证失败:

Exception in thread "Thread-1" org.springframework.mail.MailAuthenticationException: Authentication failed
    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:440)
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:361)
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:356)
    at de.hunt.huntbackend.service.EmailService.lambda$sendMail$0(EmailService.java:81)
    at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: jakarta.mail.AuthenticationFailedException: 535 Authentication credentials invalid

调试日志

开启spring.mail.properties.mail.debug=true后得到的日志:

DEBUG: Jakarta Mail version 2.1.1
DEBUG: URL jar:file:/C:/Users/Jakob/.gradle/caches/modules-2/files-2.1/org.eclipse.angus/jakarta.mail/1.1.0/b08fae3faa47b941f03a79b9bcb6c6ab9dee8b7a/jakarta.mail-1.1.0.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: jar:file:/C:/Users/Jakob/.gradle/caches/modules-2/files-2.1/org.eclipse.angus/jakarta.mail/1.1.0/b08fae3faa47b941f03a79b9bcb6c6ab9dee8b7a/jakarta.mail-1.1.0.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPTransport=jakarta.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], com.sun.mail.pop3.POP3Store=jakarta.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], com.sun.mail.imap.IMAPSSLStore=jakarta.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], com.sun.mail.smtp.SMTPSSLTransport=jakarta.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.pop3.POP3SSLStore=jakarta.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], com.sun.mail.imap.IMAPStore=jakarta.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle]}
DEBUG: Providers Listed By Protocol: {imap=jakarta.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], smtp=jakarta.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], pop3=jakarta.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], imaps=jakarta.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], smtps=jakarta.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3s=jakarta.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: URL jar:file:/C:/Users/Jakob/.gradle/caches/modules-2/files-2.1/org.eclipse.angus/jakarta.mail/1.1.0/b08fae3faa47b941f03a79b9bcb6c6ab9dee8b7a/jakarta.mail-1.1.0.jar!/META-INF/javamail.address.map
DEBUG: successfully loaded resource: jar:file:/C:/Users/Jakob/.gradle/caches/modules-2/files-2.1/org.eclipse.angus/jakarta.mail/1.1.0/b08fae3faa47b941f03a79b9bcb6c6ab9dee8b7a/jakarta.mail-1.1.0.jar!/META-INF/javamail.address.map
DEBUG: getProvider() returning jakarta.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.ionos.com", port 465, isSSL true
220 perfora.net (mreueus002) Nemesis ESMTP Service ready
DEBUG SMTP: connected to host "smtp.ionos.com", port: 465
EHLO host.docker.internal
250-perfora.net Hello host.docker.internal [91.23.54.20]
250-8BITMIME
250-AUTH LOGIN PLAIN
250 SIZE 140000000
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "SIZE", arg "140000000"
DEBUG SMTP: STARTTLS requested but already using SSL
DEBUG SMTP: protocolConnect login, host=smtp.ionos.com, user=somename@something.com, password=<non-null>
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2 
DEBUG SMTP: Using mechanism LOGIN
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN failed

配置文件(application.properties)

spring.mail.host=smtp.ionos.com
spring.mail.port=465
spring.mail.username=somename@something.com
spring.mail.password=apassword
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.ssl.trust=smtp.ionos.com

邮件发送代码

new Thread(() -> {
    try {
        MimeMessage msg = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(msg, "utf-8");
        helper.setSubject(subject);
        helper.setFrom(emailId);
        helper.setTo(to);
        helper.setText(text, true);
        mailSender.send(msg);
        logger.log("Sent email to '" + to + "' with subject '" + subject + "'");
    } catch (MessagingException e) {
        logger.logError(e);
    }
}).start();

排查与解决建议

  • 修正SSL/STARTTLS配置冲突:端口465是SSL直连端口,无需开启STARTTLS,将spring.mail.properties.mail.smtp.starttls.enable改为false;或者改用端口587(STARTTLS端口),此时保持starttls.enable=true,将ssl.enable改为false。
  • 确认密码有效性:IONOS邮箱若开启两步验证,需使用应用专用密码而非登录密码;未开启两步验证的话,直接使用邮箱登录密码,注意检查是否有特殊字符转义问题(比如密码中的@或!在配置文件中是否需要转义)。
  • 检查SMTP权限:登录IONOS后台,确认该邮箱账号已启用SMTP服务权限。
  • IP白名单限制:调试日志显示当前请求IP为91.23.54.20,检查IONOS后台是否设置了IP白名单,确保该IP在允许列表内。
  • 强制指定认证机制:在配置中添加spring.mail.properties.mail.smtp.auth.mechanisms=PLAIN,强制使用PLAIN认证方式,避免LOGIN机制失败的问题。

内容的提问来源于stack exchange,提问作者FireCreeper82

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 06:33:20