Bagaimana cara mengirim email HTML?

117

Saya sudah berhasil mengirimkan email di aplikasi web saya menggunakan JMS, namun hasilnya hanya ditampilkan dalam bentuk teks biasa. Saya ingin konten dapat menampilkan html. Bagaimana saya melakukannya? Berikut ini kira-kira apa yang saya miliki:

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
sumber

Jawaban:

265

Sesuai Javadoc, MimeMessage#setText()set jenis mime default text/plain, sementara Anda membutuhkannya text/html. Lebih baik gunakan MimeMessage#setContent()saja.

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

Untuk detail tambahan, lihat:

BalusC
sumber
Terima kasih, pada awalnya saya tidak membaca dengan cermat, saya memiliki setText dan setContent bersama-sama, jadi ini tidak berfungsi, tetapi sekarang setelah mengeluarkan setText (), itu berfungsi sekarang. Terima kasih.
Thang Pham
19

Atur tipe konten. Lihat metode ini .

message.setContent("<h1>Hello</h1>", "text/html");
CoolBeans
sumber
Untuk Groovy. Jangan lupa untuk mengonversi GString ke java.lang.String.
it3xl
13

Jika Anda menggunakan mesin aplikasi Google / Java, gunakan yang berikut ini ...

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);
Sajian Pengetahuan
sumber
msg.setSubject(subject,"UTF-8");tidak bekerja. Seharusnyamsg.setSubject(subject);
Fizer Khan
@ FizerKhan - benarkah? docs.oracle.com/javaee/6/api/javax/mail/internet/…
Nick Grealy
5

Sejak JavaMail versi 1.4, ada kelebihan setTextmetode yang menerima subtipe tersebut.

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

kamu harus menelepon

msg.saveChanges();

setelah mengatur tipe konten.

Afodunrinbi Lanre
sumber
0

Anda dapat menemukan kelas java yang lengkap dan sangat sederhana untuk mengirim email menggunakan akun Google (gmail) di sini, Kirim pesan email menggunakan aplikasi java

Ini menggunakan properti berikut

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
sumber
2
Ini sama sekali tidak menjawab pertanyaan itu. OP meminta untuk mengirim email HTML khusus.
Bassinator
0

The "loginVo.htmlBody (messageBodyPart);" akan berisi informasi yang dirancang dengan format html, tetapi di mail tidak menerimanya.

JAWA - 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
sumber
0

Saya menemukan cara ini tidak yakin itu berfungsi untuk semua primitif CSS

Dengan menyetel properti header "Content-Type" menjadi "text / html"

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

sekarang saya bisa melakukan hal-hal seperti

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

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

Salam

Balint
sumber
0

Anda dapat menggunakan setText (teks java.lang.String, boolean html) dari MimeMessageHelper:

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

Tetapi Anda perlu:

mimeMsg.saveChanges();

Sebelum:

javaMailSender.send(mimeMsg);
Justas
sumber