2011-01-05 20 views
3

Ich habe Probleme mit Parse-Methode habe, wenn usising ñ Charakter:Javamail Problem mit ñ Zeichen in Mail-Adressen

essage.setRecipients(Message.RecipientType.TO, internetAddress.parse("somedir.withñ[email protected] ailserver.com",false)); 

ich vorbei false für die strengen Parameter, aber ich bekomme immer die Fehlermeldung:

javax.mail.internet.AddressException: Local address contains control or whitespace in string ``somedir.with±[email protected]'' 
at Mailer.main(Mailer.java:386) 
Caused by: javax.mail.internet.AddressException: Local address contains control 
or whitespace in string ``somedir.with±[email protected]'' 
     at javax.mail.internet.InternetAddress.checkAddress(InternetAddress.java 
:1155) 
     at javax.mail.internet.InternetAddress.parse(InternetAddress.java:1044) 
     at javax.mail.internet.InternetAddress.parse(InternetAddress.java:575) 
     at Mailer.main(Mailer.java:377) 

Antwort

-1

Erstellen Sie eine neue Klasse, erweitern Sie sie und überschreiben Sie die Validierungsfunktion. Aber ich verstehe nicht, warum du das willst.

public class invalidInternetAddress extends internetAddress { 

    @Override 
    private static void checkAddress() throws AddressException { 
    } 
} 
2

Stellen Sie sicher, dass Ihre ñ tatsächlich ein n-Tilde ist. Die folgenden funktioniert perfekt für mich

InternetAddress[] list = InternetAddress.parse("fred.joñ[email protected]", false); 
for (InternetAddress a : list) { 
    System.out.println("[" + a + "]"); 
} 

Es funktioniert auch, wenn die ñ mit einem Escape-Unicode zu ersetzen (in der Quelle .java-Datei)

InternetAddress[] list = InternetAddress.parse("fred.jo\[email protected]", false); 

Sie könnten versuchen, es so zu ersetzen nur als Test .

Edit: BTW Ich hatte auch Parse ("...") mit der Adresse und keinen zweiten Parameter verwendet, und bestanden true für streng, die beide auch funktionierte.

+1

Ich habe beide versucht, aber mit dem gleichen Ergebnis. Welche Version von Javamail benutzt du? – Guille

+0

Funktioniert nicht für mich, entweder mit Java Mail 1.4.7 – user871611

+0

@ user871611 Dies funktioniert für mich seit Java Mail 1.4.4 und funktioniert noch. Bevor Sie mich abwählen, stellen Sie sicher, dass Sie tatsächlich ein U + 00F1 'ñ' Unicode _" LATIN KLEINER BUCHSTABE N MIT TILDE "_ und nicht ein' n' U + 006E _ "LATIN KLEINER BUCHSTABE N" _ gefolgt von einem U + 0303 _ "COMBINING TILDE" _ –

0

Vielleicht speichert Ihr Texteditor Ihre Quelldatei nicht als UTF8, sondern als ASCII, so dass Ihr Nya durcheinander gerät. Stellen Sie sicher, dass Sie es als UTF8 speichern. Es kann auch eine Kompilierungsoption geben, die erforderlich ist, um eine .java-Datei zu kompilieren, wenn sie als UTF8 gespeichert wird. Ich habe es eine ganze Weile nicht mehr gemacht, aber ich erinnere mich, dass es so war.

1

Der Mail-Parser von JavaMail sagt Ihnen hier etwas sehr Wichtiges: Sie dürfen nur normale druckbare ASCII-Zeichen auf der linken Seite des @-Zeichens in einer E-Mail-Adresse verwenden. Schauen Sie sich RFC 5322 für die ABNF for valid email addresses:

addr-spec  = local-part "@" domain 

local-part  = dot-atom/quoted-string/obs-local-part 

dot-atom  = [CFWS] dot-atom-text [CFWS] 

dot-atom-text = 1*atext *("." 1*atext) 

atext   = ALPHA/DIGIT/ ; Printable US-ASCII 
        "!"/"#"/  ; characters not including 
        "$"/"%"/  ; specials. Used for atoms. 
        "&"/"'"/
        "*"/"+"/
        "-"/"/"/
        "="/"?"/
        "^"/"_"/
        "`"/"{"/
        "|"/"}"/
        "~" 

quoted-string = [CFWS] 
        DQUOTE *([FWS] qcontent) [FWS] DQUOTE 
        [CFWS] 

qcontent  = qtext/quoted-pair 

quoted-pair  = ("\" (VCHAR/WSP))/obs-qp 

qtext   = %d33/   ; Printable US-ASCII 
        %d35-91/  ; characters not including 
        %d93-126/  ; "\" or the quote character 
        obs-qtext 

Vergewissern Sie sich, dass die Adresse korrekt ist, bevor Sie weiter gehen.

+2

Dies gilt nicht mehr mit der neuesten Version von RFC 6532, die UTF-8-Zeichen ermöglicht. –

4

Wenn Sie immer noch mit diesem Problem sind, empfehle ich Ihnen hinzufügen doppelte Anführungszeichen an Ihre ungewöhnliche E-Mail-Adresse wie ich es tat. Es funktionierte für mich, weil checkAddress-Methode von InternetAddress aufgeben, um zitierte Adresse zu validieren. Das ist die einfache und schnelle Lösung.

Beispiel:

unusual_email_without_at_sign_or_with_accentuátion (won't work) 
"unusual_email_without_at_sign_or_with_accentuátion" (it works!) 

Die perfekte und richtige Lösung Java-Team würde INTERNET Klasse Bug, die sogar Empfang "strict = false" im Konstruktor zu beheben, um die E-Mail-Prüfung Syntax, wenn es nicht sollte.

Beispiel des Fehlers:

InternetAddress i = new InternetAddress("unusual_email_without_at_sign_or_with_accentuátion ", false) 

Beispiel der Umgehungslösung:

InternetAddress i = new InternetAddress("\"unusual_email_without_at_sign_or_with_accentuátion\"", false) 

Der Ansatz, eine neue Klasse zu schaffen, die Adresse erweitert wird nicht funktionieren, da Transport .send() scheint aus irgendeinem Grund die Adresse erneut zu validieren und die Ausnahme wird ebenfalls gestartet.

Bitte lassen Sie uns wissen, wenn es geholfen hat!

+0

Danke! Das hat bei mir funktioniert (ich habe '_' im Bereich der Absender-Mail)! – higuaro