Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 弹簧&x2B;JavaMail发送超时_Spring_Gmail_Jakarta Mail - Fatal编程技术网

Spring 弹簧&x2B;JavaMail发送超时

Spring 弹簧&x2B;JavaMail发送超时,spring,gmail,jakarta-mail,Spring,Gmail,Jakarta Mail,我正在尝试用Spring和JavaMail发送电子邮件。因为我在代理后面,所以它可能不应该工作,但我希望有一个超时,因为现在javamail只会挂起,谁知道会挂多久 这是我的spring xml中的mailsender配置: <bean id="gmailMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host"><value&

我正在尝试用Spring和JavaMail发送电子邮件。因为我在代理后面,所以它可能不应该工作,但我希望有一个超时,因为现在javamail只会挂起,谁知道会挂多久

这是我的spring xml中的mailsender配置:

<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>
然后它就挂在那里

大约5分钟后,我得到:

javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465, response: -1
例外


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

好吧,我想出来了,如果有人需要同样的:

您还需要设置:

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

财产。如果无法访问端口,则在套接字读取时超时。

您可以在属性文件中设置超时。禁用防火墙或病毒防护,然后重试

# Other properties
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.connectiontimeout=10000
spring.mail.properties.mail.smtp.timeout=10000
spring.mail.properties.mail.smtp.writetimeout=10000

答案与上面相同,但显示了YML和XML道具的替代方案

您也可以在代码中构建道具:

@Bean
public JavaMailSender getJavaMailSender() {

    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();

    mailSender.setHost(host);
    mailSender.setPort(port);
    mailSender.setUsername(username);
    mailSender.setPassword(password);

    Properties props = mailSender.getJavaMailProperties();
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.auth", auth);
    props.put("mail.smtp.starttls.enable", starttls);
    props.put("mail.smtp.timeout", 5000);
    props.put("mail.smtp.connectiontimeout", 5000);
    props.put("mail.smtp.writetimeout", 5000);
    props.put("mail.debug", debug);

    return mailSender;
}
5000毫秒后,我得到了这个日志:

2020-08-11 14:43:39.291 ERROR 117828 --- [         task-1] p.home.phe.adapter.smtp.SMTPAdapter      : EmailNotification sending failure :Couldn't connect to host, port: 192.168.28.45, 25; timeout 5000
请注意,异常是在我的errorhandler中捕获的,而不是在上面的代码中

2020-08-11 14:43:39.291 ERROR 117828 --- [         task-1] p.home.phe.adapter.smtp.SMTPAdapter      : EmailNotification sending failure :Couldn't connect to host, port: 192.168.28.45, 25; timeout 5000