it-swarm.com.de

wie lösen Sie Adresse Ungültige Ausnahme

Wir haben versucht, E-Mails mit javax.mail zu senden. Beim Versenden von Mails haben wir folgende Ausnahme erhalten:

    **sendMail - Message Sending Failed: Invalid Addresses;
    nested exception is: 
javax.mail.SendFailedException: 550 #5.1.0 Address rejected.2013-02-28 13:17:08,236** 

Was könnte das Problem sein?

8
user2060679

Dies bedeutet, dass der empfangende Server das Postfach (den Teil vor dem "@") der E-Mail-Adresse nicht erkennt. Es könnte sein, dass es falsch geschrieben wurde, dass es sich einfach um einen nicht vorhandenen Namen handelt, oder es könnte sogar sein, dass der empfangende Server so eingestellt ist, dass er eine Nachricht (z. B. Spam) durch Antworten mit dem Code 550 abweist.

Hier ist eine von vielen Seiten, die die SMTP-Antwortcodes zusammenfassen und Links zu verschiedenen relevanten RFCs enthalten:  http://www.greenend.org.uk/rjk/tech/smtpreplies.html.

BEARBEITEN: Ich brauche ein bisschen mehr Platz, um Ihre Frage zu beantworten, als es die Kommentare erlauben.

@RaghuKing, wenn Sie den Javadoc für javax.mail.SendFailedException betrachten, werden Sie feststellen, dass Sie 3 Methoden für ein solches Ausnahmeobjekt (innerhalb des catch-Blocks) aufrufen können:

  • getInvalidAddresses(), um ein Array von Adressen zu erhalten, die ungültig sind und daher nicht an gesendet werden.
  • getValidSentAddresses(), um ein Array von Adressen zu erhalten, an das diese Nachricht erfolgreich gesendet wurde, und
  • getValidUnsentAddresses(), um ein Array von Adressen zu erhalten, die gültig sind, an die die Nachricht jedoch nicht gesendet wurde. 

(Wenn eine Nachricht an mehrere Empfänger gesendet wird, sind einige möglicherweise erfolgreich und einige schlagen fehl, aber die Ausnahme wird ausgelöst, wenn mindestens ein Fehler aufgetreten ist, unabhängig von der Anzahl der Erfolge. Selbstverständlich auch, wenn Sie nur an eine Adresse senden wird diese eine Adresse nur in einem dieser Arrays haben, und es wird sich wahrscheinlich NICHT in der Liste ValidSent befinden.

Diese Arrays geben Ihnen weitere Informationen zum Umgang mit der Ausnahme, abhängig vom Typ des Arrays, in dem sich die Adresse befindet. Dies hängt natürlich von Ihrer Anwendung ab. Diese Vorschläge können jedoch sinnvoll sein:

  • Ungültige Adressen : Informieren Sie den Benutzer für jede ungültige Adresse in der Liste, dass die Nachricht nicht gesendet wurde, weil die Adresse falsch war, und geben Sie eine Möglichkeit zum Korrigieren der Adresse an. Versuchen Sie dann, erneut an die richtige Adresse zu senden ( oder abbrechen, wenn der Benutzer keine andere Adresse angibt);
  • Gültige gesendete Adressen : Nicht erneut senden;
  • Gültige nicht gesendete Adressen : Versuchen Sie, erneut an diese Adressen zu senden. Das Senden wurde wahrscheinlich vor dem Erreichen dieser Adressen wegen einer zuvor falschen Adresse angehalten.

Aber am Ende müssen Sie den gesunden Menschenverstand anwenden und vielleicht ein wenig mit den Funktionen experimentieren, die Sie nicht verstehen, bis Sie sie verstehen.

12
fr13d

Dieser Code kann Protokolle für ungültige Adressen drucken:

    try {
        sender.send(message);
    }catch (MailSendException me){
        detectInvalidAddress(me);
    } 

private void detectInvalidAddress(MailSendException me) {
    Exception[] messageExceptions = me.getMessageExceptions();
    if (messageExceptions.length > 0) {
        Exception messageException = messageExceptions[0];
        if (messageException instanceof SendFailedException) {
            SendFailedException sfe = (SendFailedException) messageException;
            Address[] invalidAddresses = sfe.getInvalidAddresses();
            StringBuilder addressStr = new StringBuilder();
            for (Address address : invalidAddresses) {
                addressStr.append(address.toString()).append("; ");
            }

            logger.error("invalid address(es):{}", addressStr);
            return;
        }
    }

    logger.error("exception while sending mail.", me);
}
1
Clement.Xu

Hatte dieselbe Ausnahme erlebt. Ich erkannte, dass ich keine E-Mail an unbekannte Benutzer senden konnte. Nach Rücksprache stellte ich fest, dass unser SMTP-Server kein offener Mail-Relay-Server war. Lesen Mail-Relay öffnen .

0
kabugima2