2011-03-07 6 views
51

Je dois envoyer un fichier HTML par email mais pas en pièce jointe.comment envoyer un email HTML

Message simpleMessage = new MimeMessage(mailSession); 
try { 
    fromAddress = new InternetAddress(from); 
    toAddress = new InternetAddress(to); 

} catch (AddressException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

try { 
    simpleMessage.setFrom(fromAddress); 
    simpleMessage.setRecipient(RecipientType.TO, toAddress); 

    simpleMessage.setSubject(subject); 
    simpleMessage.setText(text); 

    Transport.send(simpleMessage); 
} catch (MessagingException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

Il envoie un courriel simplement avec un message texte. Je veux envoyer du contenu HTML qui est stocké dans un autre fichier, mais pas en pièce jointe

+3

Vous devriez vraiment [accepter quelques réponses à vos questions] (http://stackoverflow.com/faq#howtoask). – dkarp

Répondre

104

Ne pas upCast votre MimeMessage-Message:

MimeMessage simpleMessage = new MimeMessage(mailSession); 

Ensuite, lorsque vous voulez définir le corps du message, soit appel

simpleMessage.setText(text, "utf-8", "html"); 

ou appelez

simpleMessage.setContent(text, "text/html; charset=utf-8"); 

Si vous préférez utiliser un jeu de caractères autre que utf-8, remplacez-le à l'emplacement approprié.

JavaMail a une somme supplémentaire, couche inutile d'abstraction qui laisse souvent vous tenir des classes comme Multipart, Message et Address, qui ont tous beaucoup moins de fonctionnalités que les véritables sous-classes (MimeMultipart, MimeMessage et InternetAddress) qui sont effectivement se construit ...

+0

J'utilise le code en question avec 'simpleMessage.setContent (text," text/html; jeu de caractères = utf-8 ");' pour définir le contenu mais quand je le fais, partout dans le contenu que j'ai un point d'interrogation '=' il est converti en '= 3D' qui empêche le paramétrage correct des propriétés HTML, pourquoi? – mohamnag

+1

@mohamnag Vous remarquerez probablement que le message résultant a un en-tête 'Content-Transfer-Encoding: quoted-printable'. (Ceci est probablement dû au fait que vous incluez du texte non-ASCII dans votre partie HTML et que le courrier électronique n'aime pas le contenu non-ASCII.) Le destinataire du message devra transférer-décoder le contenu du message pour convertir ces '= 3D' s retour à '=' s. Essayez d'utiliser 'MimeMessage.getInputStream' au lieu de' MimeMessage.getContentStream' du côté du destinataire. – dkarp

+0

@dkrap merci de le mentionner, j'ignorais l'encodage de transfert et le résultat HTML ne s'affichait pas correctement. – mohamnag