Wie wird die Internetadresse verschlüsselt?

8

Code zum Senden von E-Mails folgt:

%Vor%

Mein probelem ist, dass, wie ich in UTF-8 das Subjekt kodiert habe, wie kann ich Empfängeradresse, dh. new InternetAddress(address)

    
Romi 31.05.2012, 09:22
quelle

2 Antworten

14

Die E-Mail-Adresse sollte dem RFC822-Standard entsprechen

JavaMail verwendet MimeMessage InternetAddress :

  

Diese Klasse repräsentiert eine Internet-E-Mail-Adresse mit der Syntax von   RFC822. Die typische Adressensyntax hat die Form "[email protected]" oder   "Persönlicher Name & lt; [email protected] & gt;".

RFC822-Format sagt:

  

Beachten Sie, dass RFC 822 das Zeichenrepertoire auf ASCII beschränkt. Im   Üblicherweise arbeiten andere Zeichen (wie ä oder é) in der Regel in Anführungszeichen   Zeichenfolgen, die für Kommentare (und Kommentare) verwendet werden, aber nicht   in den richtigen Adressen verwendet werden.

Persönliche Namen für die Adresse unterstützen verschiedene Zeichensätze

Internetadresse verwendet einen persönlichen Namen:

  

Wenn der Name Nicht-US-ASCII-Zeichen enthält,   dann wird der Name mit dem angegebenen Zeichensatz gemäß RFC codiert   2047. Wenn der Name nur US-ASCII-Zeichen enthält, wird keine Codierung vorgenommen und der Name wird unverändert verwendet.

Um den Zeichensatz für die Codierung festzulegen, gibt es einen InternetAddress # -Konstruktor . Quellen betrachten:

%Vor%

es ruft einfach setPersonal (..) , also wähle es aus der Weg, der für dich am bequemsten ist.

Um nach einem Zeichensatz zu suchen, verwenden Sie Charset.forName () .

    
JMelnik 31.05.2012, 09:40
quelle
3

Ich mache das, wo addressString eine Email-Adresse mit NLS-Zeichen ist:

%Vor%

getPersonal() erhält den rohen persönlichen Namen, wenn es einen gibt, denn wenn Sie die Internetadresse mit einer einzelnen Zeichenfolge oder mit InternetAddress.parse() erstellt haben, haben Sie den persönlichen Namensteil nicht in einer separaten Zeichenfolge:

  

public java.lang.String getPersonal ()

     

Erhalte den persönlichen Namen. Wenn der Name gemäß RFC 2047 kodiert ist, wird er entschlüsselt und in Unicode konvertiert. Wenn die Decodierung oder Konvertierung fehlschlägt, werden die Rohdaten unverändert zurückgegeben.

Dann setzt setPersonal() die Zeichenkette wieder zurück, aber diesmal mit InternetAddress , um sie zu codieren:

  

public void setPersonal (java.lang.String-Name, java.lang.String-Zeichensatz)

     

Legen Sie den persönlichen Namen fest. Wenn der Name Nicht-US-ASCII-Zeichen enthält, wird der Name mit dem angegebenen Zeichensatz gemäß RFC 2047 codiert. Wenn der Name nur US-ASCII-Zeichen enthält, wird keine Codierung durchgeführt und der Name wird unverändert verwendet.

    
DSeager 12.03.2014 21:38
quelle

Tags und Links