Postat la
01-Feb-2009
ora
07:41 pm
de
[Chetroesu]
Trimiterea unui e-mail in java se face utilizand libraria JavaMail. Probabil ca majorittea programatorilor java s-au intalnit cu aceasta nevoie, adica cea de trimitere de email-uri. Problema devine putin mai complicata in momentul incare se doreste trimiterea de email-uri in format HTML, care sa contina atat definitii de stil, cat si imagini.
Functie care implementeaza trimiterea de mesaje:
public void sendMail() throws Exception{ Properties props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.host", "smtp.mailserver.com"); props.setProperty("mail.user", "user"); props.setProperty("mail.password", "pwd");
Session mailSession = Session.getInstance(props);
MimeMessage message = new MimeMessage(mailSession); message.setSubject("Subiect mesaj"); message.setFrom(new InternetAddress("me@sender.com")); message.setContent("Bloc mesaj, sursa html", "text/html"); message.addRecipient(Message.RecipientType.TO, new InternetAddress("you@receiver.com"));
Transport transport = mailSession.getTransport(); transport.connect(); transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO)); transport.close(); } |
Dupa cum se stie, un bloc HTML complez are nevoie si de resurse cum ar fi fisiere .css si imaginile. Exista 2 moduri prin care se pot asocia aceste resurse mesajului:
- referire prin url-uri catre o locatie existenta (o adresa web unde acestea sunt accesibile). Aceasta varianta, din pacate, nu afiseaza continutul mesajului formatat si cu imaginile vizibile, acestea trebuind descarcate la citirea mesajului
- includerea resurselor ca atasamente la mesaj.
Mesaj continand o imagine, referentiata prin url:
message.setContent ("<h1>This is a test</h1>" + "<img src=\"http://it.blogiq.ro/samplepicture.jpg\">", "text/html"); |
In cazul resurselor .css cel mai simplu este includerea continutului acestora direct in mesaj, prin utilizarea tagurilor <style> specifice html. In acest mod stilul va fi aplicat direct la deschiderea mesajului si nu va necesita alte operatiuni.
In cazul resurselor de tip imagine nu se poate face acest lucru. Pentru a putea crea mesaje la care sa nu fie nevoie de descarcarea manuala a pozelor, este necesara includerea acestora in continutul mesajului. HTML-ul poate referentia imagini din atasamentul mesajului utilizant prefixul cid: plus id-ul de atasament:
public void sendMail() throws Exception{ Properties props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.host", "smtp.mailserver.com"); props.setProperty("mail.user", "user"); props.setProperty("mail.password", "pwd");
Session mailSession = Session.getInstance(props);
MimeMessage message = new MimeMessage(mailSession); message.setSubject("Subiect mesaj"); message.setFrom(new InternetAddress("me@sender.com")); message.addRecipient(Message.RecipientType.TO, new InternetAddress("you@receiver.com"));
// acest HTML are 2 parti, BODY-ul si imaginile incluse MimeMultipart multipart = new MimeMultipart("related");
// prima parte (HTML-ul) BodyPart messageBodyPart = new MimeBodyPart(); String htmlText = "<img src=\"cid:image\">"; messageBodyPart.setContent(htmlText, "text/html"); multipart.addBodyPart(messageBodyPart); // a doua parte (imaginea) messageBodyPart = new MimeBodyPart(); DataSource fds = new FileDataSource("C:\\images\\jht.gif"); messageBodyPart.setDataHandler(new DataHandler(fds)); messageBodyPart.setHeader("Content-ID","<image>"); multipart.addBodyPart(messageBodyPart);
// punem totul la un loc message.setContent(multipart);
Transport transport = mailSession.getTransport(); transport.connect(); transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO)); transport.close(); } |