簡體   English   中英

身份驗證失敗異常-在批量郵件發送代碼中間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM