我們打算開發一種服務,它始終將保持連接到電子郵件服務器,以便每當用戶觸發郵件時,它將通過使用連接發送而不是獲得新連接併發送郵件。 是否有可能我們總是使用JAVA Mail API保持與電子郵件服務器的連接? 請在此幫助我。連續郵件服務器使用JAVA郵件API連接
1
A
回答
3
當您連接到SMTP服務器時(同樣在使用javax.mail
API時),您使用套接字連接(請參閱SMTPTransport and Transport classes的src)。套接字允許您連接到遠程服務器,並且該連接保持打開狀態,直到明確關閉。這意味着理論上你可以創建一個連接並重用它。
但是,許多SMTP服務器非常邪惡,將終止連接if you are using it "too slow"或if you try to resuse your SMTP session to often。 (我查找了postfix設置。)
Java郵件API允許您創建連接並在需要時關閉它。水木清華。像這樣:
Transport transport = session.getTransport("smtp");
transport.connect();
transport.sendMessage(msg, addressArray);
// you can do transport.close(); later
然而,因爲事實的SMTP服務器是如何,你不能只執行一次connect()
和忘記它。最多可以做的是通過重新連接來正確處理強制斷開連接。還有就是Java郵件API做,在一個通知機制(以在notifyConnectionListeners
方法的用法看看)
0
然而,因爲事實的SMTP服務器是如何,你不能只是 執行連接()一次並忘記它。至多,你可以做什麼, 通過重新連接再次正確處理強制斷開連接。
同意!
可事實上重複使用下面的邏輯了JavaMail SMTP連接:
Transport transport = null;
MimeMessage message = null;
Properties prop = new Properties();
// load all smtp properties
Session session = Session.getDefaultInstance(prop, null);
transport = session.getTransport("smtp");
for (EachMail eachMail : list) {
if (!transport.isConnected()) {
if (port != null && port.length() > 0) {
transport.connect(host, Integer.parseInt(port), "<username>", "<password>");
} else {
transport.connect(host, "<username>", "<password>");
}
}
// set all mail attributes from eachMail object
message.saveChanges();
transport.sendMessage(message, message.getAllRecipients());
}
就像一個魅力。乾杯!
0
如果你想要一個總是連接的連接,你應該在發送方法之外創建你的傳輸,但是爲了避免在發送時出現錯誤(SMTPSendFailedException 421超時數據客戶端),你應該檢查傳輸是否連接,如果不連接再次befor發送:
if (!transport.isConnected())//make sure the connection is alive
transport.connect();
transport.sendMessage(message, message.getAllRecipients());
相關問題
- 1. 連接失敗POP3使用Java郵件API到Exchange服務器
- 2. Java郵件iCloud郵件連接到IMAP服務器
- 3. 無法連接郵件服務器
- 4. 連接到郵件服務器
- 5. 郵件服務器連接失敗
- 6. PHP郵件:無法連接到郵件服務器
- 7. 警告:郵件()[function.mail]:無法連接到郵件服務器
- 8. 如何連接郵件服務器並檢索郵件?
- 9. Java郵件API連接存儲在本地服務器但未連接到開發服務器
- 10. 使用域名郵件時拒絕使用Java郵件連接
- 11. fasteR在郵件服務器上使用java郵件API搜索特定郵件
- 12. Mercury郵件服務器的JavaMail API連接錯誤
- 13. 無法連接到我的郵件服務器(JAVA)
- 14. smtp服務器用於通過java郵件api發送郵件
- 15. 如何連接郵件服務器以使用mime4j?
- 16. 使用IMAP連接到Exchange郵件服務器
- 17. 使用Win API通過Gmail郵件服務器發送郵件
- 18. 本地SMTP郵件服務器無法發送郵件(連接超時)
- 19. 警告:郵件():無法連接到郵件服務器; localhost端口25
- 20. 使用自己的郵件服務器的Java郵件
- 21. 使用java郵件API發送郵件
- 22. Java郵件服務
- 23. 如何從沒有互聯網連接的服務器使用Web服務器發送Java郵件API的郵件?
- 24. 郵件客戶端無法連接到代理服務器後面的郵件服務器
- 25. 發送郵件失敗:傳輸失敗連接到服務器
- 26. C#IMAP客戶端 - 與郵件服務器的多個連接
- 27. 嘗試連接到POP3服務器郵件
- 28. 如何從Firefox擴展連接到郵件服務器?
- 29. Perl:SMTP無法連接到郵件服務器
- 30. 本地主機不會連接到郵件服務器
感謝您的快速回復,我會檢查這個並回來給你。 – vairam
嗨,我試過上面的代碼,它的工作正常,但有一個問題在那裏。如果我想連續發送消息使用與消息類型相同的連接作爲html(MinmeMessage和MimeBodyPart),則先前的消息將附加到下一封郵件中。你知道它附加的原因嗎? – vairam
嗨,忽略上面的評論,我試了上面的代碼,它的工作正常,再次感謝。 – vairam