2013-09-29 106 views
0

我需要設計一個可以像200-300郵件/秒發送的Java應用程序。如何完成它。我嘗試了一次發送一個郵件的簡單的Transport.send(),但本身需要大約2-3秒。谷歌smtp也會讓我發送這麼多的郵件每秒?!如何實現像批量郵件發送或可以像多線程幫助?java批量電子郵件發件人

+0

我認爲它不會被允許不僅通過谷歌,但也是由ISP。如果您以有害的方式使用垃圾郵件等,可能會遭到禁止或類似的行爲。 – porfiriopartida

+0

別擔心。不會用它來發送垃圾郵件或其他東西。只需要爲某個項目設計一個這樣的系統。 –

+0

Transport.send()本身不應該是一個限制,它可以處理200郵件/秒,特別是如果你使用多線程。問題是如果目標郵件服務器能夠收到快速的電子郵件?如果您使用SSL/TLS,那麼SSL/TLS也可能會顯着降低速度。 – Jk1

回答

1

是的,你需要一個多線程服務器。正如你寫的,你將使用大約1000個線程進行發送,從CPU性能角度來看這在任何硬件上都是可行的,但是你也必須有足夠的內存。

1

Transport.send()不是發送羣發郵件的有效方式,因爲它會爲每條消息打開新的連接。每封郵件的平均時間約爲4秒。

試試下面的代碼:

Session session = Session.getDefaultInstance(props,new javax.mail.Authenticator() { 
     protected PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication("FROM","PASSWORD"); 
     } 
    }); 
Transport transport = session.getTransport("smtp"); 
transport.connect(); 
try{ 
    for(Message m : messages) { 
    transport.sendMessage(m, m.getAllRecipients()); // time decreased to 2 second/message 
    } 
}finally { 
t.close(); 
} 

而且您可以嘗試使用具有取決於您所遇到的系統固定數量的線程的線程池實現。