Spring+JavaMail 发送超时

标签 spring gmail jakarta-mail

我正在尝试使用 Spring 和 JavaMail 发送电子邮件。由于我在代理后面,它可能不应该工作,但我想超时,因为现在 javamail 只是挂了谁知道多长时间。

这是我的 spring xml 中的邮件发送器配置:

<bean id="gmailMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host"><value>smtp.gmail.com</value></property>
    <property name="port"><value>465</value></property>
    <property name="protocol"><value>smtp</value></property>
    <property name="username"><value>XXXXXX@gmail.com</value></property>
    <property name="password"><value>XXXXXXX</value></property>
    <property name="javaMailProperties">
        <props>
            <prop key="mail.smtp.auth">true</prop>
            <prop key="mail.smtp.starttls.enable">true</prop>
            <prop key="mail.smtp.quitwait">false</prop>
            <prop key="mail.smtp.socketFactory.port">465</prop>
            <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
            <prop key="mail.smtp.socketFactory.fallback">false</prop>
            <prop key="mail.smtp.connectiontimeout">1000</prop>
            <prop key="mail.debug">true</prop>
        </props>
    </property>
</bean>

当我发送邮件时,我得到以下调试输出:
DEBUG: JavaMail version 1.5.4
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,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL false

然后它卡在那里。

大约 5 分钟后,我得到:
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465, response: -1

异常(exception)。

现在我真的不想知道它是否因为代理或防火墙问题而挂起,我只是希望它在短时间内超时,如果任何事情都不起作用。为什么mail.smtp.connectiontimeout 设置不能正常工作?

最佳答案

好的,我想通了,所以如果有人需要相同的:

您还需要设置:

<prop key="mail.smtp.timeout">1000</prop>

属性(property)。如果端口不可访问,则它在套接字读取时超时。

关于Spring+JavaMail 发送超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31535266/

相关文章:

php - 使用 Gmail 使用 TLS 从 PHP 传出 SMTP

perl - (perl Net::SMTP) 使用 gmail smtp 服务器身份验证失败

spring-mvc - 如何在 JUnit 或 Mockito 中检查附件的 MimeMessage?

java - Spring 的 JavaMailSenderImpl 抛出异常但仍然发送邮件

jakarta-mail - 如何在 JAVA 中包含电子邮件的文本版本

java - 实体、服务类和命令对象的最佳实践问题

mysql - Grails 数据库逆向工程失败

java - Spring中的bean实例化和依赖注入(inject)

Spring NamedParameterJdbcTemplate 无法使用 Kotlin 插入 NULL

python - 适用于 Python 的谷歌 API