我的电子邮件发送应用程序在此特定环境(Ubuntu-18.10 + Java 1.8.0_191)之外的任何其他环境中均可正常运行。我已经在Windows和Ubuntu16.4上进行了测试,可以正常工作。
为了确保没有任何网络问题,我还在node.js中编写了一个小型测试邮件应用程序。 节点应用程序能够在(Ubuntu-18.10 + Java 1.8.0_191)上成功发送邮件。 所以,我认为没有任何网络问题。
org.springframework.mail.MailSendException:邮件服务器连接失败
嵌套的异常是javax.mail.MessagingException:[EOF]
在com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:481)
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=<USERNAME>
spring.mail.password=<PASSWORD>
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.starttls.enable=true
我遇到了几个小问题,但没有任何帮助:
此问题的可能原因是什么?
我已经在本地使用osboxes中的VM在相同的环境(Ubuntu-18.10 + Java 1.8.0_191)上进行了尝试,并且应用程序在该处工作正常。
发送消息...............................
调试:JavaMail版本1.6.2
调试:成功加载资源:/META-INF/javamail.default.address.map
调试:getProvider()返回javax.mail.Provider [TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
调试SMTP:useEhlo是true,useAuth是
调试SMTP:尝试连接到主机“ smtp.gmail.com”,端口587,isSSL为false
220 smtp.gmail.com ESMTP d5sm15145704wrx.22-gsmtp
调试SMTP:连接到主机“ smtp.gmail.com”,端口:587
EHLO 10.255.254.55
250-smtp.gmail.com随时为您服务,[41.215.180.245]
250尺寸35882577
250-8BITMIME
250-STARTTLS
250个增强的状态代码
250管道
250压缩
250 SMTPUTF8
调试SMTP:找到扩展名“ SIZE”,参数“ 35882577”
调试SMTP:找到扩展名“ 8BITMIME”,arg“”
调试SMTP:找到扩展名“ STARTTLS”,arg“”
调试SMTP:找到扩展名“ ENHANCEDSTATUSCODES”,arg“”
调试SMTP:找到扩展名“ PIPELINING”,arg“”
调试SMTP:找到扩展名“ CHUNKING”,arg“”
调试SMTP:找到扩展名“ SMTPUTF8”,arg“”
STARTTLS
220 2.0.0准备启动TLS
EHLO 10.255.254.55
250-smtp.gmail.com随时为您服务,[41.215.180.245]
250尺寸35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
250个增强的状态代码
250管道
250压缩
250 SMTPUTF8
调试SMTP:找到扩展名“ SIZE”,参数“ 35882577”
调试SMTP:找到扩展名“ 8BITMIME”,arg“”
DEBUG SMTP:找到扩展名“ AUTH”,arg“ LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH”
调试SMTP:找到扩展名“ ENHANCEDSTATUSCODES”,arg“”
调试SMTP:找到扩展名“ PIPELINING”,arg“”
调试SMTP:找到扩展名“ CHUNKING”,arg“”
调试SMTP:找到扩展名“ SMTPUTF8”,arg“”
调试SMTP:协议连接登录,主机= smtp.gmail.com,用户=xyz@gmail.com,密码=
调试SMTP:尝试使用以下机制进行身份验证:LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2
DEBUG SMTP:使用机制LOGIN
调试SMTP:禁止AUTH LOGIN命令跟踪
调试SMTP:AUTH LOGIN成功
调试SMTP:use8bit false
发送时调试SMTP:MessagingException,抛出:
javax.mail.MessagingException:无法确定本地电子邮件地址
在com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1765)
在com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1300)
在org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:462)
在org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:321)
在org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:310)
在com.example.demo.EmailController $ 1.run(EmailController.java:37)
在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)
在java.lang.Thread.run(Thread.java:748) 退出
221 2.0.0关闭连接d5sm15145704wrx.22-gsmtp
@RestController
public class EmailController {
ExecutorService executorService = Executors.newSingleThreadExecutor();
@Autowired
private JavaMailSender javaMailSender;
@RequestMapping(value = "/sendemail/{to}")
public String sendEmail(@PathVariable String to) {
sendMail(to, "Test Subject", "Test Message");
return "Email sent successfully";
}
public void sendMail(String toEmail, String subject, String message) {
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setFrom("xxx@gmail.com");
mailMessage.setTo(toEmail);
mailMessage.setSubject(subject);
mailMessage.setText(message);
executorService.execute(new Runnable() {
@Override
public void run() {
System.out.println("Sending Message ......................");
javaMailSender.send(mailMessage);
System.out.println("...................... Message Sent Successfully");
}
});
}
}
此问题中提到了相同的错误
Failed messages: javax.mail.MessagingException: can't determine local email address
解决方案在哪里添加
mailMessage.setFrom("xxx@gmail.com");
这已经在我的代码中了。