Grails 邮件 Exchange 服务器配置

Posted

技术标签:

【中文标题】Grails 邮件 Exchange 服务器配置【英文标题】:Grails mail Exchange server configuration 【发布时间】:2015-08-02 22:19:33 【问题描述】:

我正在尝试使用 Exchange 服务器配置邮件。

这是我的配置

grails 
    mail 
        host = "mail.xxx.xx.xx"
        port = 443
        username = "username"
        password = "password"
        props = [   "mail.smtp.auth":"true",
                    "mail.smtp.port":"443",
                    "mail.smtp.ssl.enable" :"true"
                 ]
    

我收到以下错误

Message: org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Exception reading response;
  nested exception is:
    java.net.SocketException: Connection reset. Failed messages: javax.mail.MessagingException: Exception reading response;

我知道这是我必须更改的道具的问题,因为此配置适用于我的邮件应用程序。 我知道端口是正确的,它使用 SSL。

我也尝试过使用这些道具

    props = ["mail.smtp.timeout"               : "100000",
             "mail.smtp.starttls.enable"       : "true",
             "mail.smtp.EnableSSL.enable"      : "true",
             "mail.transport.protocol"         : "smtps",
             "mail.smtp.socketFactory.port"    : "443",
             "mail.smtp.auth"                  : "true",
             "mail.smtp.socketFactory.class"   : "javax.net.ssl.SSLSocketFactory",
             "mail.smtp.socketFactory.fallback": "false",
             "mail.debug"                      : "true"]

调试结果如下:

DEBUG: JavaMail version 1.5.1
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle]
DEBUG: Providers Listed By Protocol: imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "xxx.xxx.xx.xx", port 443, isSSL true

【问题讨论】:

当您使用 SSL 时,您确定您的 java 密钥库具有服务器证书颁发者的 CA 吗? 不,你能向我解释一下如何做到这一点吗?我所做的只是将我的邮件应用程序中的数据添加到此配置中。 你可以试试我说的吗? 【参考方案1】:

在我看来这是一个证书问题。如果您可以访问不使用 SSL 的服务器,我会先对其进行测试,否则您应该:

查找证书颁发者(如果不知道,可以使用 openssl verify http://www.herongyang.com/Cryptography/OpenSSL-Certificate-Path-Validation-Tests.html) 在您的 java 密钥库中查找 CA 找到默认的 java 密钥库 (How do I find out what keystore my JVM is using?) 或您正在使用的那个 列出密钥库并查找相应的 CA 如果有 CA,那么问题不太可能是这样的 如果没有对应的 CA,则获取 CA 证书并将其导入到您的密钥库,重新启动服务器,应该可以再次工作。

【讨论】:

你好试过了,不是证书问题,因为我有。 呃,你确定你的端口是443吗?通常,该端口由安全 Web 服务器使用。安全 smtp 的标准端口是 465。【参考方案2】:

不久前我遇到了同样的问题。如果您尝试访问网络(组织)内的交换服务器,我相信端口号是这里的问题。它可能已被网络管理员更改。

请联系网络管理员并向他解释您正在尝试访问 Exchange Server 并需要用户名、密码和相关端口号。如果应用程序在内部运行,则身份验证可能是可选的,即

props = ["mail.smtp.auth":"false"]

我希望这会有所帮助。

【讨论】:

以上是关于Grails 邮件 Exchange 服务器配置的主要内容,如果未能解决你的问题,请参考以下文章

怎样配置exchange邮件服务器

Django 配置 qq 邮箱发送邮件

Exchange 2013 配置邮件流

Exchange 2010 预防被恶意中继及配置反垃圾邮件功能

玩转Office 365中的Exchange Online服务 之十一 怎样在Exchange Online中配置邮件传递限制《转》

exchange2010安卓手机无法配置exchange邮件