2011-03-07 14 views
51

Devo inviare file HTML via email ma non come allegato.come inviare 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(); 
} 

Sta inviando e-mail semplicemente con un messaggio di testo. Voglio inviare contenuto HTML che viene memorizzato in un altro file, ma non come allegato

+3

Si dovrebbe davvero [accettare alcune risposte alle vostre domande] (http://stackoverflow.com/faq#howtoask). – dkarp

risposta

104

Non upcast tua MimeMessage-Message:

MimeMessage simpleMessage = new MimeMessage(mailSession); 

Poi, quando si desidera impostare il corpo del messaggio, sia chiamata

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

o chiamare

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

Se preferisci usare un set di caratteri diverso da utf-8, sostituirlo nella posizione appropriata.

JavaMail ha un extra, inutile livello di astrazione che spesso ti lascia tenendo classi come Multipart, Message, e Address, che tutti hanno molto meno funzionalità rispetto alle sottoclassi reali (MimeMultipart, MimeMessage, e InternetAddress), che sono in realtà sempre costruiti ...

+0

Sto usando il codice in questione con 'simpleMessage.setContent (testo," text/html; charset = utf-8 ");' per impostare il contenuto ma quando lo si fa, ogni dove nel contenuto ho un punto interrogativo '=' è convertito in '= 3D' che impedisce l'impostazione corretta delle proprietà HTML, qualche idea del perché? – mohamnag

+1

@mohamnag Probabilmente noterete che il messaggio risultante ha un'intestazione che legge 'Content-Transfer-Encoding: quoted-printable'. (Questo è probabile perché stai includendo il testo non ASCII nella tua parte HTML e l'email non gradisce il contenuto non ASCII.) Il destinatario del messaggio dovrà trasferire-decodificare il contenuto del messaggio per convertire quelli '= 3D' torna a '=' s. Prova a utilizzare 'MimeMessage.getInputStream' invece di' MimeMessage.getContentStream' sul lato del destinatario. – dkarp

+0

@dkrap, grazie per averlo menzionato, ho ignorato la codifica del trasferimento e ho riscontrato che HTML non veniva visualizzato correttamente. – mohamnag