Postat la
29-May-2009
ora
12:48 pm
de
[Chetroesu]
In incercarea de a trimite mail-uri in care senderul sa nu contina o adresa de email ci un text (nume) asociat acesteia, am identificat o posibila exceptie pe care o poate arunca JavaMail in conditiile in care adresa de e-mail specificata nu este formatata bine.
De exemplu, daca vrem sa afisam textul "FirstName LastName" in locul my_name@mailserver.ro, nu este suficient sa scriem textul ca atare. In conditiile in care acest text contine spatii, javaMail va arunca o exceptie "Illegal whitespace...". Cum putem evita astfel de situatii?
In primul rand trebuie remarcat faptul ca functia de trimitere mail-uri functioneaza foarte bine in cazul in care adresa de mail este pecificata in clar, sau textul nu contine spatii libere.
Functia folosita de mine pentru trimiterea de email-uri este urmatoarea:
public static void postMail(String recipients, String subject, String message, String from) throws MessagingException {
Properties props = new Properties();
props.setProperty("mail.debug", "true");
props.setProperty("mail.transport.protocol", "smtp");
Session session = Session.getDefaultInstance(props);
Message msg = new MimeMessage(session);
Address addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);
Address[] addressTo = InternetAddress.parse(recipients, true);
msg.setRecipients(Message.RecipientType.TO, addressTo);
msg.setSubject(subject);
msg.setContent(message, "text/plain");
t = session.getTransport();
t.connect("company specific smtp server", null, null);
msg.saveChanges();
t.sendMessage(msg, addressTo);
t.close();
}
iar eroarea returnata este:
Caused by: javax.mail.internet.AddressException: Illegal whitespace in address in string "FirstName LastName"
at javax.mail.internet.InternetAddress.checkAddress(InternetAddress.java:926)
at javax.mail.internet.InternetAddress.parse(InternetAddress.java:819)
at javax.mail.internet.InternetAddress.parse(InternetAddress.java:555)
at javax.mail.internet.InternetAddress.<init>(InternetAddress.java:91)
Este evident faptul ca nu exista o eroare fatala de programare in aceasta functie. Pur si simplu, formatul pe care il asteapta clasa InternetAddress este altul decat un simlpu text continand spatii. Forma corecta a unei adrese de e-mail, prin care putem evida exceptia este urmatoarea:
FistName LastName<my_name@mailserver.ro>
Folosing acest format, mailul va contine in dreptul adresei de sender, textul specificat in fata adresei de e-mail.