Wie sende ich eine HTML-E-Mail?

117

Ich habe in meiner Webanwendung erfolgreich E-Mails mit JMS gesendet, aber das Ergebnis wird nur im Klartext angezeigt. Ich möchte, dass der Inhalt HTML anzeigen kann. Wie mache ich es? Hier ist ungefähr das, was ich habe:

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
quelle

Antworten:

264

Gemäß Javadoc wird MimeMessage#setText()ein Standard-MIME-Typ festgelegt text/plain, während Sie ihn benötigen text/html. Verwenden Sie MimeMessage#setContent()stattdessen lieber.

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

Weitere Einzelheiten finden Sie unter:

BalusC
quelle
Danke, zuerst habe ich nicht sorgfältig gelesen, ich habe setText und setContent zusammen, also funktioniert es nicht, aber jetzt, nachdem ich setText () herausgenommen habe, funktioniert es jetzt. Danke dir.
Thang Pham
19

Legen Sie den Inhaltstyp fest. Schauen Sie sich diese Methode an .

message.setContent("<h1>Hello</h1>", "text/html");
Kühle Bohnen
quelle
Für Groovy. Vergessen Sie nicht , konvertieren GString zu java.lang.String.
it3xl
13

Wenn Sie Google App Engine / Java verwenden, verwenden Sie Folgendes ...

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);
Wissensdienst
quelle
msg.setSubject(subject,"UTF-8");funktioniert nicht. Es sollte seinmsg.setSubject(subject);
Fizer Khan
@FizerKhan - wirklich? docs.oracle.com/javaee/6/api/javax/mail/internet/…
Nick Grealy
5

Seit JavaMail Version 1.4 gibt es eine Überladung von setTextMethoden, die den Subtyp akzeptieren.

// 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
quelle
4

du musst anrufen

msg.saveChanges();

nach dem Einstellen des Inhaltstyps.

Afodunrinbi Lanre
quelle
0

Eine vollständige und sehr einfache Java-Klasse zum Senden von E-Mails mit dem Google-Konto (Google Mail) finden Sie hier. E-Mail-Nachricht mit der Java-Anwendung senden

Es werden die folgenden Eigenschaften verwendet

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
quelle
2
Dies spricht die Frage überhaupt nicht an. Das OP bat darum, speziell HTML-E-Mails zu senden.
Bassinator
0

Der "loginVo.htmlBody (messageBodyPart);" enthält die HTML-formatierten gestalteten Informationen, erhält sie jedoch per E-Mail nicht.

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.
quelle
0

Ich fand auf diese Weise nicht sicher, ob es für alle CSS-Grundelemente funktioniert

Durch Setzen der Header-Eigenschaft "Content-Type" auf "text / html"

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

Jetzt kann ich Sachen machen wie

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

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

Grüße

Balint
quelle
0

Sie können setText (java.lang.String text, boolean html) verwenden aus MimeMessageHelper:

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

Aber Sie müssen:

mimeMsg.saveChanges();

Vor:

javaMailSender.send(mimeMsg);
Genauso wie
quelle