2015-07-21 136 views
1

我試圖用Spring和JavaMail發送電子郵件。由於我在代理後面,它可能不應該工作,但我想暫停,因爲現在javamail只是掛了誰知道多久。Spring + JavaMail發送超時

這是我的春天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>[email protected]</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 

例外。

現在我不太想知道它是否因爲代理或防火牆問題而掛起,我只是希望它在短時間後超時,如果有什麼不工作。爲什麼mail.smtp.connectiontimeout設置不能正常工作?

回答

3

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

您還需要設置:

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

財產。然後,如果端口無法訪問,它會在套接字上讀取超時。