我创建了一个 Spring Integration 流程来以编程方式处理电子邮件。它在我的 IDE 中运行良好,但是当我将它部署到我们的 Tomcat Unix 服务器时失败。我正在运行 JDK 1.6.0.4、Tomcat 7.0.29、Grails 2.0.4、Spring Integration 2.1.3 和 JavaMail 1.4.5。我试图弄清楚如何配置代理设置以便我可以运行它。我看过 2010 年的帖子说这是不可能的,但现在看起来有 JavaMail 属性。
我确实尝试-DsocksProxyHost=myproxy.mycompany.com
在 Tomcat 中进行设置setenv.sh
,但我的应用程序在到达邮件部分之前就失败了,因为它无法访问内部站点(比如我们的数据库连接)
我查看了JavaMail API - FAQ并且我认为我设置正确,但它一直超时。
有没有人为 Spring Integration 流程成功设置了电子邮件代理?
我的 Spring Integration XML 文件中的片段:
<util:properties id="javaMailProperties">
<prop key="mail.imap.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
<prop key="mail.imap.socketFactory.fallback">false</prop>
<prop key="mail.store.protocol">imaps</prop>
<prop key="mail.debug">true</prop>
<prop key="mail.smtp.socks.host">socksproxy.mycompany.com</prop>
<prop key="mail.smtp.socks.port">1080</prop>
<prop key="mail.imap.socks.host">socksproxy.mycompany.com</prop>
<prop key="mail.imap.socks.port">1080</prop>
</util:properties>
<mail:inbound-channel-adapter id="imapAdapter"
store-uri="imaps://myEmailAddress:myPassword@imap.gmail.com/INBOX"
java-mail-properties="javaMailProperties"
channel="receiveEmailChannel"
should-delete-messages="false"
should-mark-messages-as-read="true"
auto-startup="true">
<int:poller max-messages-per-poll="1" fixed-rate="15" time-unit="SECONDS">
</int:poller>
</mail:inbound-channel-adapter>
解决方案
根据 Bill Shannon 的回复,我将我的更新javaMailProperties
为下面的代码片段,一切都按预期工作。
<util:properties id="javaMailProperties">
<prop key="mail.store.protocol">imaps</prop>
<prop key="mail.imap.ssl.enable">true</prop>
<prop key="mail.debug">true</prop>
<prop key="mail.imaps.socks.host">socksproxy.mycompany.com</prop>
<prop key="mail.imaps.socks.port">1080</prop>
</util:properties>
我认为指出JavaDocs中的细则很重要......
请注意,如果您使用“imaps”协议通过 SSL 访问 IMAP,则所有属性都将命名为“mail.imaps.*”