我有一個發送電子郵件的Grails應用程序。郵件服務器沒有SMTP認證,所以它需要「SMTP之前的POP」,這意味着我需要在通過SMTP發送之前對POP帳戶進行認證。大多數情況下它可以正常工作,但偶爾會發生,郵件服務器不能從屬性中獲取,而是嘗試連接到「localhost」。這裏是屬性:JavaMail SMTP主機錯誤
Properties props = new Properties();
props.setProperty("mail.store.protocol", "pop3")
props.setProperty("mail.pop3.host", "mail.xxxxx.com")
props.setProperty("mail.pop3.port", "110")
props.setProperty("mail.smtp.host", "mail.xxxxx.com")
props.setProperty("mail.smtp.port", "25")
props.setProperty("mail.smtp.sendpartial", "true")
props.setProperty("mail.pop3.socketFactory.port", "110")
props.setProperty("mail.pop3.socketFactory.class","javax.net.SocketFactory")
props.setProperty("mail.pop3.socketFactory.fallback", "false")
Transport t = null
def store
try {
URLName url = new URLName("pop3", "mail.xxxxxxx.com", 110,
"INBOX", "username", "password");
Session session = Session.getDefaultInstance(props, null)
store = session.getStore(url)
store.connect("mail.xxxxxx.com", "username", "password")
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(toAddress, true));
message.setSubject(mailTitle);
message.setContent(messageBody, "text/html");
message.setSentDate(new Date());
t = session.getTransport("smtp")
t.connect()
t.send(message)
return true
}
catch (AddressException e) {
e.printStackTrace()
return false
}
catch (MessagingException e) {
e.printStackTrace()
return false
}
finally {
store?.close()
}
通常情況下,這個工程。但是,當一個Quartz Job正在發送時,來自Properties的郵件服務器條目沒有兌現,它使用「localhost」代替,然後無法發送電子郵件。
我可以連接Telnet並使用提到的屬性發送。
它可能是超時問題?根據我在文檔中讀到的內容,超時是默認的「無限」,所以「應該」不是問題。
它可能是一個性能問題?我創建了一個「虛擬應用程序」,它或多或少地具有相同的功能,但不會從Grails服務發出,而是直接從控制器發出。那個人一直都在工作,但那個應用總是處於閒置狀態。
我沒有使用Grails郵件插件,因爲我看不到它可以處理「smtp之前彈出」-paradigm。
在此先感謝。
請問如果更換'Session.getDefaultInstance'用'Session.getInstance'幫助?它執行較少的魔法,所以可能在石英線程內工作更好(雖然只是一個瘋狂的猜測) – Martin
試過,馬丁,但它沒有效果。問題依然存在。另外,我嘗試使用主機,端口,用戶名和密碼連接到Transport對象:t.connect(主機,端口,用戶名,密碼),但也失敗了,因爲沒有SMTP認證。 –
我正在嘗試使用新的屬性; 「mail.smtp.localhost」並將該值設置爲與「mail.smtp.host」相同。到目前爲止,它看起來很有希望...... –