2012-08-13 33 views
1

我使用javaMail API發送郵件我的代碼工作正常,但問題是,發送郵件時,它是花費時間發送郵件(延遲時間近15至20秒),這是我的應用程序會就弄傷想用出來採取任何時間,同時發送郵件。請給一個想法我想發送郵件使用java與出延遲

這裏發送郵件的原因是我的代碼:

public class sendMail { 

public static void main(String[] args) { 
    Properties props = new Properties(); 
    props=System.getProperties(); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.socketFactory.port", "465"); 
    props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.port", "587"); 

    String mail="[email protected]"; 


    Session session = Session.getDefaultInstance(props, 
     new javax.mail.Authenticator() { 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication("[email protected]","********"); 
      } 
     }); 

    try { 
    String emails="[email protected]"+","+"[email protected]"; 
     Message message = new MimeMessage(session); 
     message.setFrom(new InternetAddress("[email protected]")); 
     message.setRecipients(Message.RecipientType.TO, 
       InternetAddress.parse(emails)); 
     message.setSubject("Testing Subject"); 
     message.setText("Dear Rejender," + 
       "\n\n Please find the like!"); 

    //Transport.send(message); 
     Transport tr=session.getTransport("smtp"); 
     //tr.sendMessage(message, message.getRecipients(message.)); 
     tr.send(message); 
     tr.close(); 
//Transport   

     System.out.println("Done"); 

    } catch (MessagingException e) { 
     throw new RuntimeException(e); 
    } 
} 

回答

2

你可以運行方法在自己的線程中花費太多時間,允許主程序繼續執行其他操作:

new Thread(new Runnable() { 
    public void run() { 
     tr.send(message); 
     tr.close(); 
    } 
}).start(); 

ps:您需要使trmessage爲最終值,並且您需要在run方法中添加一些錯誤處理。

+1

非常感謝你,我已經在上面嘗試過了,建議你還是需要時間來發送郵件。 – user1548560 2012-08-13 10:35:27

2

發送電子郵件不會對交貨時間提供任何保證或期望。 JavaMail API不會對流程施加或添加任何延遲,它會立即將電子郵件發送到指定的SMTP服務器。從那裏到轉發到實際收件人郵箱的電子郵件需要多長時間不受您的控制。根據情況,消息可能必須通過多箇中間服務器,並且可能在運輸過程中的幾個點(病毒檢查等)處理或不處理。

如果您有特定的要求,必須在特定時間內發送郵件,則電子郵件是非常糟糕的交通選擇。我的建議是,重新思考你的架構要麼接受一個可變的,非確定性的交付時間,要麼考慮使用其他一些提供同步通信的消息傳遞方法。