[英]Authentication Failed exception - In the middle of bulk mail sending code
我們有一個發送批量郵件的線程程序。 像這樣的信息
1. To
2. Subject
Etc.
從數據庫中提取郵件,然后編寫郵件並將其推送到SMTP服務器。 我們的一位客戶發送了包含2390電子郵件的批量郵件。 發送40封電子郵件后,突然發生以下異常
EXCEPTION
javax.mail.AuthenticationFailedException
STACKTRACE
javax.mail.Service.connect(Service.java:306)
javax.mail.Service.connect(Service.java:156)
javax.mail.Service.connect(Service.java:105)
...............
java.lang.Thread.run(Thread.java:619)
其余2350封電子郵件失敗。
為什么會發生這種情況?
感謝您的建議和幫助
伊士希爾
==============================================
我的代碼:
Session session = Session.getInstance(properties, new SMTPAuthenticator(smtpAuthenticationBean.getUserName(), smtpAuthenticationBean.getPassword()))) : (Session.getInstance(properties, null))
for each email id
{
InternetAddress iAddress = new InternetAddress(getFromHeader(jobListBean.getFromDisplayName(), jobListBean.getFromEmail()));
Multipart multipart = new MimeMultipart(); // By default, Content Type is "mixed"
msg.setSubject(jobListBean.getSubject());
msg.setSentDate(new Date());
// Set Internet Headers
msg.setHeader("Importance", priorityType);
msg.setHeader("Disposition-Notification-To", jobListBean.getFromEmail());
FileDataSource fds = new FileDataSource(tempAbsoluteFileName);
MimeBodyPart htmlBodyPart = new MimeBodyPart();
String fileContent = org.objectstyle.woproject.util.FileStringScanner.stringFromFile(new File(tempAbsoluteFileName));
htmlBodyPart.setText(fileContent);
multipart.addBodyPart(htmlBodyPart);
msg.setContent(multipart);
InternetAddress address[] = InternetAddress.parse(emailList.toString(), true);
Transport smtpTransport = session.getTransport();
smtpTransport.addTransportListener(this);
smtpTransport.connect();
smtpTransport.sendMessage(msg, address);
smtpTransport.close();
File file = new File(tempAbsoluteFileName);
file.delete();
}
====================================
是的,由於其線程程序,smtp服務器有機會斷開連接或不響應,我可以說在最大情況下,可以同時將超過1000封郵件推送到smtp服務器。
在任何演員表上,SMTP服務器都將拋出
EXCEPTION
javax.mail.AuthenticationFailedException
STACKTRACE
javax.mail.Service.connect(Service.java:306)
javax.mail.Service.connect(Service.java:156)
javax.mail.Service.connect(Service.java:105)
...............
java.lang.Thread.run(Thread.java:619)
如果它不能滿足我們的要求
=============
我仍然需要查看SMTP服務器日志。
伊士希爾
AuthenticationFailedException
與您的代碼無關,當SMTP服務器返回身份驗證失敗時引發。
從javadoc :
當存儲或傳輸對象上的connect方法由於身份驗證失敗(例如,錯誤的用戶名或密碼)而失敗時,將引發此異常。
因此,您將需要調查郵件服務器,以找出為什么它接受某些郵件但不接受其他郵件的原因。 我能想到的一件事是某種限速機制。
一遍又一遍地將相同的消息發送到郵件服務器嗎?
而不是對每個電子郵件地址進行for循環,您應該使用sendMessage在一次呼叫中發送所有電子郵件。 (您的代碼似乎確實在這樣做)
smtpTransport.sendMessage(msg, address);
然后,郵件服務器將獲取郵件的一個副本,並將其發送到多個地址。
可能會阻止速率閾值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.