【问题标题】:JavaMail SMTPAddressFailedException: 550 5.7.1 Unable to relay for ... (Grails)JavaMail SMTPAddressFailedException: 550 5.7.1 Unable to relay for ... (Grails)
【发布时间】:2013-08-23 18:34:23
【问题描述】:

我正在尝试使用我的 Grails 应用程序中的 javamail 发送邮件(通过服务)。 使用的 from 和 to 地址都具有组织域名。 相同的代码,通过命令行作为 groovy 脚本(在同一台服务器上)运行时按预期工作。

但是,在 grails 服务器上运行(在战争模式下)会产生以下异常:

 javax.mail.SendFailedException: Invalid Addresses;
  nested exception is:
    com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 Unable to relay for ---@---.com

    at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1873)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1120)
    at javax.mail.Transport.send0(Transport.java:195)
    at javax.mail.Transport.send(Transport.java:124)
    at javax.mail.Transport$send.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124)
    at cs.MailService.mail(MailService.groovy:66)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at 

代码如下:

import javax.mail.internet.*
import javax.mail.*
import javax.activation.*

class Mailer {

def static mail(String toAddress, String subject, String body) {
        println "mail called"
        println "${toAddress}, ${subject}, ${body}"

        try {
            def fromAddress = "---@---.com"

            def properties = new Properties()
            properties.setProperty("mail.transport.protocol","smtp")
            properties.setProperty("mail.smtp.host","---------")

            def sessionInstance = Session.getDefaultInstance(properties,null);
            def msg = new MimeMessage(sessionInstance)

            def stringTokenizer = new StringTokenizer(toAddress,";")
            def toAddressList = []
            while(stringTokenizer.hasMoreElements()){
                toAddressList.add(new InternetAddress(stringTokenizer.nextElement().toString()));
            }
            def to = new InternetAddress[toAddressList.size()]
            to = (InternetAddress[]) toAddressList.toArray(to)
            msg.setRecipients(MimeMessage.RecipientType.TO,to)
            def from = new InternetAddress(fromAddress)
            msg.setFrom(from);
            msg.setSubject(subject)

            def mimeMultipart = new MimeMultipart()
            def mimeBodyPart = new MimeBodyPart()
            mimeBodyPart.setContent("<p style='font-family:calibri;color:blue;font-size:20px;text-align:center;'>"+body+"</p>", "text/html")
            mimeMultipart.addBodyPart(mimeBodyPart)

            msg.setContent(mimeMultipart)

            def transporter = sessionInstance.getTransport("smtp")
            transporter.connect()
            transporter.send(msg)
        } catch(Exception e) {
            e.printStackTrace()
        }
    }

    public static void main(String[] args) {
        def to="---@---.com"
        def subject="Call Scheduler Notification"
        def body='<font face="Segoe UI"><p><b><font color="#6B0667">Hi --- ---,<br><br>Your Call (id: 1281) Was Updated Successfully</b></font></p><table cellpadding="10" bgcolor="#B799B6"><caption><b><font color="#6B0667">Call Details</font></b></caption><tr><td><b>Title</b></td><td>---------</td></tr><tr><td><b>Start</b></td><td>---------</td></tr><tr><td><b>End</b></td><td>---------</td></tr><tr><td><b>Number</b></td><td>---------</td></tr><tr><td><b>Passcode</b></td><td>---------</td></tr><td><b>Special Instructions</b></td><td></td></tr><td><b>Callback Number</b></td><td>---------</td></tr></table><br><p><b><font color="#6B0667">Regards<br>Call Scheduler</b></font></p></font>'
        mail(to, subject, body);
    }

}

我该如何克服这个错误?

更新:仍然不能完全确定这里出了什么问题。但是重置所有 tcp/ip 连接(从邮件服务器)解决了这个问题。

【问题讨论】:

  • 命令行和 grails 执行之间必须有所不同(不同的地址、属性等)。尝试在会话属性中设置mail.debug=true,并比较输出

标签: grails groovy jakarta-mail


【解决方案1】:

你可能是need to authenticate

我不知道为什么它可以从命令行运行。

【讨论】:

    猜你喜欢
    • 2018-08-02
    • 2014-07-25
    • 2013-11-27
    • 2021-11-13
    • 1970-01-01
    • 2015-08-16
    • 2015-03-11
    • 1970-01-01
    • 2018-04-25
    相关资源
    最近更新 更多