javax.mail.MessagingException:在Ubuntu 18.10上为[EOF](来自n​​ode.js应用程序的邮件运行正常)

时间:2018-12-10 21:45:56

标签: java spring javamail ubuntu-18.04

我的电子邮件发送应用程序在此特定环境(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)

application.properties

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

我遇到了几个小问题,但没有任何帮助:

Gettings javax.mail.MessagingException: [EOF] on our live server, but everything works as expected on our dev server

java.lang.RuntimeException: javax.mail.MessagingException: [EOF](Caused by: javax.mail.MessagingException: [EOF])

此问题的可能原因是什么?

编辑1

我已经在本地使用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");

这已经在我的代码中了。

0 个答案:

没有答案