2013-08-28 4 views
4

Comme beaucoup de gens ne le savent pas, les adresses e-mail nécessitent une bibliothèque à analyser. Les expressions régulières simples, comme @(.*), ne sont pas suffisantes. Les adresses e-mail peuvent même contenir des commentaires, qui peuvent contenir des caractères comme @, brisant des expressions rationnelles simples.Parse RFC 2822 adresses e-mail en Java

Il y a un Node.js library qui parse adresses RFC 2822:

var address = addresses[0]; 
console.log("Email address: " + address.address); 
console.log("Email name: " + address.name()); 
console.log("Reformatted: " + address.format()); 
console.log("User part: " + address.user()); 
console.log("Host part: " + address.host()); 

qui est un port presque direct du module perl Mail::Address.

C'est quelque chose que je m'attendrais à exister dans la classe InternetAddress de Java, mais il ne casse pas les choses plus loin que l'adresse complète, qui peut inclure par exemple. [email protected]. Mais j'essaye d'extraire la partie gmail.com, qu'elle n'inclut pas une méthode à faire. Je suis surpris que je ne trouve pas de bibliothèque commune qui résout cela, mais sans doute beaucoup de gens ont ce problème. Comment cela peut-il être résolu en utilisant une bibliothèque ou non?

+1

Can les commentaires apparaissent dans le nom de domaine? Si non, il suffit d'analyser l'adresse e-mail après le 'lastIndexOf (" @ ")' –

+0

@SotiriosDelimanolis oui, ils peuvent. – djechlin

Répondre

0

La plupart du temps, il n'est pas nécessaire de diviser l'adresse en plusieurs parties, car vous ne pouvez rien faire avec les pièces. En supposant que vous ayez un besoin valide, il existe des bibliothèques qui effectueront une validation plus complète que JavaMail. Here's one I found quickly. Je suis sûr qu'il y en a d'autres.

+1

Eh bien en particulier, j'ai besoin du domaine en ce moment - en essayant par exemple de extrait "gmail.com" de "[email protected]". J'ai été vraiment surpris de ne pas trouver ça dans Javamail ou Apache, mais je regarderai votre lien. Je suppose que cela pourrait être moins utile du point de vue de la construction d'un client ou d'un serveur IMAP ou SMTP, mais nous utilisons ce genre de choses pour l'analyse des emails (catégorisation comme personnel/abonnement, etc.) – djechlin

1

Si vous devez juste obtenir une partie de domaine de l'adresse e-mail (être au courant des groupes de diffusion, car ils n'ont pas @) vous pouvez faire comme ceci:

int index = "[email protected]".lastIndexOf("@"); 
String domain = "[email protected]".substring(index+1); 

je lastIndexOf ici depuis par adresse e-mail RFC2822 peut contenir plus d'un symbole @ (s'il est échappé). Si vous voulez sauter des groupes de diffusion, il est procédé, il pourrait en IsGroup classe InternetAddress()

PS aussi que l'adresse contient des informations de routage:

@donald.mit.edu,@mail.mit.edu:[email protected] 

ou l'adresse littéraux:

[email protected][192.168.134.1]