Comment envoyer un e-mail HTML?

118

J'ai réussi à envoyer un e-mail dans mon application Web à l'aide de JMS, mais le résultat ne s'affiche qu'en texte brut. Je veux que le contenu puisse afficher du HTML. Comment fait-on ça? Voici à peu près ce que j'ai:

Message msg = new MimeMessage(mailSession);
try{
    msg.setSubject("Test Notification");
    msg.setRecipient(Message.RecipientType.TO, new InternetAddress(sentTo, false));
    String message = "<div style=\"color:red;\">BRIDGEYE</div>";
    msg.setContent(message, "text/html; charset=utf-8");
    msg.setSentDate(new Date());
    Transport.send(msg);
}catch(MessagingException me){
    logger.log(Level.SEVERE, "sendEmailNotification: {0}", me.getMessage());
}
Thang Pham
la source

Réponses:

266

Selon Javadoc, le MimeMessage#setText()définit un type de mime par défaut text/plain, alors que vous en avez besoin text/html. Utilisez MimeMessage#setContent()plutôt à la place.

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

Pour plus de détails, consultez:

BalusC
la source
Merci, au début, je n'ai pas lu attentivement, j'ai mis setText et setContent ensemble, donc cela ne fonctionne pas, mais maintenant après avoir sorti setText (), cela fonctionne maintenant. Je vous remercie.
Thang Pham
19

Définissez le type de contenu. Regardez cette méthode .

message.setContent("<h1>Hello</h1>", "text/html");
Fèves fraîches
la source
Pour Groovy. N'oubliez pas de vous convertir GString en java.lang.String.
it3xl
13

Si vous utilisez le moteur d'application Google / Java, utilisez ce qui suit ...

MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(SENDER_EMAIL_ADDRESS, "Admin"));
msg.addRecipient(Message.RecipientType.TO,
                 new InternetAddress(toAddress, "user");

msg.setSubject(subject,"UTF-8");

Multipart mp = new MimeMultipart();
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(message, "text/html");
mp.addBodyPart(htmlPart);
msg.setContent(mp);
Transport.send(msg);
Service de connaissances
la source
msg.setSubject(subject,"UTF-8");ne marche pas. Ça devrait êtremsg.setSubject(subject);
Fizer Khan
@FizerKhan - vraiment? docs.oracle.com/javaee/6/api/javax/mail/internet/…
Nick Grealy
5

Depuis la version 1.4 de JavaMail, il existe une surcharge de setTextméthode qui accepte le sous-type.

// Passing null for second argument in order for the method to determine
// the actual charset on-the fly.
// If you know the charset, pass it. "utf-8" should be fine
msg.setText( message, null, "html" );
Alexander Pogrebnyak
la source
4

tu dois appeler

msg.saveChanges();

après avoir défini le type de contenu.

Afodunrinbi Lanre
la source
0

Vous pouvez trouver une classe java complète et très simple pour envoyer des e-mails à l'aide d'un compte Google (gmail) ici, Envoyer un e-mail à l'aide de l'application java

Il utilise les propriétés suivantes

Properties props = new Properties();
  props.put("mail.smtp.auth", "true");
  props.put("mail.smtp.starttls.enable", "true");
  props.put("mail.smtp.host", "smtp.gmail.com");
  props.put("mail.smtp.port", "587");
Lasa
la source
2
Cela ne répond pas du tout à la question. Le PO demandait d'envoyer des courriels spécifiquement HTML.
Bassinator
0

Le "loginVo.htmlBody (messageBodyPart);" contiendra les informations conçues au format html, mais dans le courrier ne les reçoit pas.

JAVA - STRUTS2

package com.action;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import com.opensymphony.xwork2.Action;
import com.bo.LoginBo;
import com.manager.AttendanceManager;
import com.manager.LoginManager;
import com.manager.SSLEmail;
import com.vo.AttendanceManagementVo;
import com.vo.LeaveManagementVo;
import com.vo.LoginVo;
import com.sun.corba.se.impl.protocol.giopmsgheaders.Message;
import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeBodyPart;

public class InsertApplyLeaveAction implements Action {
private AttendanceManagementVo attendanceManagementVo;

public AttendanceManagementVo getAttendanceManagementVo() {
    return attendanceManagementVo;
}

public void setAttendanceManagementVo(
        AttendanceManagementVo attendanceManagementVo) {
    this.attendanceManagementVo = attendanceManagementVo;
}

@Override
public String execute() throws Exception {
    String empId=attendanceManagementVo.getEmpId();
    String leaveType=attendanceManagementVo.getLeaveType();
    String leaveStartDate=attendanceManagementVo.getLeaveStartDate();
    String leaveEndDate=attendanceManagementVo.getLeaveEndDate();
    String reason=attendanceManagementVo.getReason();
    String employeeName=attendanceManagementVo.getEmployeeName();
    String manageEmployeeId=empId;
    float totalLeave=attendanceManagementVo.getTotalLeave();
    String leaveStatus=attendanceManagementVo.getLeaveStatus();
//  String approverId=attendanceManagementVo.getApproverId();
    attendanceManagementVo.setEmpId(empId);
    attendanceManagementVo.setLeaveType(leaveType);
    attendanceManagementVo.setLeaveStartDate(leaveStartDate);
    attendanceManagementVo.setLeaveEndDate(leaveEndDate);
    attendanceManagementVo.setReason(reason);
    attendanceManagementVo.setManageEmployeeId(manageEmployeeId);
    attendanceManagementVo.setTotalLeave(totalLeave);
    attendanceManagementVo.setLeaveStatus(leaveStatus);
    attendanceManagementVo.setEmployeeName(employeeName);

    AttendanceManagementVo attendanceManagementVo1=new AttendanceManagementVo();
    AttendanceManager attendanceManager=new AttendanceManager();    
    attendanceManagementVo1=attendanceManager.insertLeaveData(attendanceManagementVo);
    attendanceManagementVo1=attendanceManager.getApproverId(attendanceManagementVo);
    String approverId=attendanceManagementVo1.getApproverId();
    String approverEmployeeName=attendanceManagementVo1.getApproverEmployeeName();
    LoginVo loginVo=new LoginVo();
    LoginManager loginManager=new LoginManager();
    loginVo.setEmpId(approverId);
    loginVo=loginManager.getEmailAddress(loginVo);
    String emailAddress=loginVo.getEmailAddress();
    String subject="LEAVE IS SUBMITTED FOR AN APPROVAL BY THE  - " +employeeName;
//  String body =   "Hi "+approverEmployeeName+" ," + "\n" + "\n" +
//          leaveType+" is Applied for "+totalLeave+" days by the  " +employeeName+ "\n" + "\n" +
//          " Employee Name: " + employeeName +"\n" +
//          " Applied Leave Type: " + leaveType +"\n" +
//          " Total Days: " + totalLeave +"\n" + "\n" +
  //        " To view Leave History, Please visit the employee poratal or copy and paste the below link in your browser: " + "\n" +  

  //        " NOTE : This is an automated message. Please do not reply."+ "\n" +  "\n" +                        

    Session session = null;

    MimeBodyPart messageBodyPart = new MimeBodyPart();
    MimeMessage message = new MimeMessage(session);
    Multipart multipart = new MimeMultipart();

    String htmlText = ("<div style=\"color:red;\">BRIDGEYE</div>");
    messageBodyPart.setContent(htmlText, "text/html");

    loginVo.setHtmlBody(messageBodyPart);

    message.setContent(multipart);
    Transport.send(message);


    loginVo.setSubject(subject);
//  loginVo.setBody(body);
    loginVo.setEmailAddress(emailAddress);
    SSLEmail sSSEmail=new SSLEmail();
    sSSEmail.sendEmail(loginVo);
    return "success";
 }

 }
Pradap Adwani A
la source
0

Je ne suis pas sûr que cela fonctionne pour toutes les primitives CSS

En définissant la propriété d'en-tête "Content-Type" sur "text / html"

mimeMessage.setHeader("Content-Type", "text/html");

maintenant je peux faire des trucs comme

mimeMessage.setHeader("Content-Type", "text/html");

mimeMessage.setText ("`<html><body><h1 style =\"color:blue;\">My first Header<h1></body></html>`")

Cordialement

Balint
la source
0

Vous pouvez utiliser setText (java.lang.String text, boolean html) à partir de MimeMessageHelper:

MimeMessage mimeMsg = javaMailSender.createMimeMessage();
MimeMessageHelper msgHelper = new MimeMessageHelper(mimeMsg, false, "utf-8");
boolean isHTML = true;
msgHelper.setText("<h1>some html</h1>", isHTML);

Mais vous devez:

mimeMsg.saveChanges();

Avant:

javaMailSender.send(mimeMsg);
Tout comme
la source