Java mail - pièces jointes && images en ligne
J'ai eu un problème déjà résolu ce matin:
Java Mail, envoi de pièces jointes multiples ne fonctionne pas
Ce moment j'ai un peu plus compliqué problème: je voudrais combiner des fichiers joints avec des images.
import java.io.IOException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class MailTest
{
public static void main(String[] args) throws AddressException, MessagingException, IOException
{
String host = "***";
String from = "***";
String to = "***";
//Get system properties
Properties props = System.getProperties();
//Setup mail server
props.put("mail.smtp.host", host);
//Get session
Session session = Session.getDefaultInstance(props, null);
//Define message
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("Hello JavaMail");
//Handle attachment 1
MimeBodyPart messageBodyPart1 = new MimeBodyPart();
messageBodyPart1.attachFile("c:/Temp/a.txt");
//Handle attachment 2
MimeBodyPart messageBodyPart2 = new MimeBodyPart();
messageBodyPart2.attachFile("c:/Temp/b.txt");
FileDataSource fileDs = new FileDataSource("c:/Temp/gti.jpeg");
MimeBodyPart imageBodypart = new MimeBodyPart();
imageBodypart.setDataHandler(new DataHandler(fileDs));
imageBodypart.setHeader("Content-ID", "<myimg>");
imageBodypart.setDisposition(MimeBodyPart.INLINE);
//Handle text
String body = "<html><body>Elotte<img src=\"cid:myimg\" width=\"600\" height=\"90\" alt=\"myimg\" />Utana</body></html>";
MimeBodyPart textPart = new MimeBodyPart();
textPart.setHeader("Content-Type", "text/plain; charset=\"utf-8\"");
textPart.setContent(body, "text/html; charset=utf-8");
MimeMultipart multipart = new MimeMultipart("mixed");
multipart.addBodyPart(textPart);
multipart.addBodyPart(imageBodypart);
multipart.addBodyPart(messageBodyPart1);
multipart.addBodyPart(messageBodyPart2);
message.setContent(multipart);
//Send message
Transport.send(message);
}
}
Quand j'ai ouvert l'e-mail dans Gmail, tout est parfait: j'ai les deux pièces jointes, et l'image est affichée dans le contenu du mail (dans la balise img).
Le problème est avec Thunderbird et avec RoundCubic webmail: chacun montrant comme l'image est manquante et l'afficher dans le bas de la pièce jointe.
Comment puis-je faire ce travail?
- Microsoft Outlook 2010 ne permet pas inline-images plus! Est-ce un lourd Problème pour vous?
- Bien que je n'étais pas à l'aide d'Outlook, mais Thunderbird. Avant, j'ai changé le multipart de "lié" à "mixte", c'était le travail. Pls. voir le lié stackoverflow question.
- Je me suis donc cette triés à l'aide de ceci: static.springsource.org/spring/docs/1.2.x/reference/mail.html le Printemps est en train de faire le tour dans l'arrière-plan. Mais je ne peux pas fermer la question parce que mon rep n'est pas assez élevé.
Vous devez vous connecter pour publier un commentaire.
Assez convient également à l'utilisation de ImageHtmlEmail de la org.apache.commons.mail de la bibliothèque. (Mise à JOUR: il est seulement inclus dans l'instantané de 1.3) Par exemple:
Je me suis donc cette triés par laisser les javamail aller et utiliser le printemps wrapper:
http://static.springsource.org/spring/docs/1.2.x/reference/mail.html
Je ne sais pas ce que la magie c'est de le faire dans le fond, mais il fonctionne.
Merci pour tout le monde!