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
相关产品推荐
相关产品推荐

