尝试在Grails中发送SimpleMailMessage时,必须首先发出STARTTLS命令

时间:2011-07-15 14:02:32

标签: java email grails communication

我尝试在grails应用程序中发送消息。我使用Java代码解决了这个问题,这是我的代码

SimpleMailMessage message_ref = new SimpleMailMessage();
JavaMailSenderImpl sender_ref = new JavaMailSenderImpl();

           sender_ref.setHost("smtp.gmail.com")
           sender_ref.setUsername("testAccount@googlemail.com")
           sender_ref.setPassword("topsecret")
           message_ref.setTo("testRecipient@gmx.de")
           message_ref.setSubject("Hello there")
           message_ref.setText("How are you")
           sender_ref.send(message_ref)

我遇到以下异常:

  

SMTPSendFailedException:530 5.7.0必须先发出STARTTLS命令

我在这里的stackoverflow上发现了类似的问题 Must issue a STARTTLS command first. Sending email with Java and Google Apps 但它并没有帮助我,因为他采用了不同的方法。

有人可以告诉我什么是错的吗?我期待错误不在代码中,而是在一些配置文件中,这是我的知识边缘。

3 个答案:

答案 0 :(得分:2)

引用Grails mail plugin文档:

grails {
   mail {
     host = "smtp.gmail.com"
     port = 465
     username = "youracount@gmail.com"
     password = "yourpassword"
     props = ["mail.smtp.auth":"true",                     
              "mail.smtp.socketFactory.port":"465",
              "mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory",
              "mail.smtp.socketFactory.fallback":"false"]
} }

答案 1 :(得分:1)

我帮不了你,但问题基本上就是你需要使用SSL来与服务器通信。 Google出于很多好的理由不允许进行纯文本通信。我对grails知之甚少,但我认为它有某种ssl支持。如果没有,你最好在javax.mail中做这件事。

StartTLS只是一个文本命令,您发送到smtp-server以显式启动安全通信。

答案 2 :(得分:0)

Properties properties = new Properties();
properties.put("mail.smtp.host", smtpHost);
properties.put("mail.smtp.port", smtpPort);
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.user", userName);
properties.put("mail.password", password);