서블릿 클래스를 작성하고 Javamail을 보내기 위해 메일 클래스를 보냈습니다. 영어 메시지는 잘 작동하지만 지금은 중국어도 보내고 싶습니다. MimeMessage의 setSubject 및 setText 메소드에 UTF-8을 추가한다고 가정합니다. 나는 그랬지만 모든 중국어 문자는받은 편지함에서 손상되었습니다.Javamail을 중국어 문자로 어떻게 보냅니 까?
이메일 메시지는 제출 양식의 사용자 입력에서 온 것입니다. (이메일을 보내도록)
package com.lsp.web;
import com.lsp.service.Mailer;
import org.springframework.beans.factory.annotation.Autowired;
import javax.mail.MessagingException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "contact", urlPatterns = {"/contact"})
public class ContactServlet extends SpringInjectedServlet {
@Autowired
private Mailer mailer;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("contact.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String customerEmail = req.getParameter("email");
String subject = req.getParameter("subject");
String body = req.getParameter("message");
String name = req.getParameter("name");
body = "YOU HAVE A MESSAGE FROM " + name + "<" + customerEmail +">.\n" + body;
String error = null;
String succMess = null;
try {
javax.mail.internet.InternetAddress ia = new javax.mail.internet.InternetAddress(customerEmail);
ia.validate();
mailer.send(customerEmail, subject, body);
succMess = "你的消息已成功发送";
req.setAttribute("succMessage", succMess);
req.getRequestDispatcher("sent.jsp").forward(req, resp);
} catch (javax.mail.internet.AddressException ae) {
error = "您指出的邮箱地址不存在";
req.setAttribute("errorMessage", error);
req.getRequestDispatcher("contact.jsp").forward(req, resp);
}
catch (MessagingException mex) {
error = "发送失败";
req.setAttribute("errorMessage", error);
req.getRequestDispatcher("contact.jsp").forward(req, resp);
}
}
}
메일러 클래스 : 나는 감사
package com.lsp.service;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
@Component
public class Mailer {
private static final Logger log = Logger.getLogger(Mailer.class);
public Mailer() {
log.info("I'm newed.");
}
public void send(String custMail, String subject, String body) {
String from = "[email protected]";
String to = "[email protected]";
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
//body = "YOU HAVE A MESSEGE FROM " + custMail + "." + body;
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("[email protected]","SOMEPASSWORD");//change accordingly
}
});
try{
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setHeader("Content-Type", "text/plain; charset=UTF-8");
// Set Subject: header field
message.setSubject(subject, "UTF-8");
// Send the actual HTML message, as big as you like
message.setText(body, "UTF-8");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
을 누군가가 나를 도울 수 있다면
여기 내 서블릿이다.
감사합니다.
UTF-8은 주제가 아니며 charset입니다. 제목은 이메일이 무엇이든지해야합니다. HTML을 보내는 경우 content-type 헤더에서 그렇게 말합니다. – EJP
당신이 의미하는 것은 : message.setHeader ("Content-Type", "text/plain; charset = UTF-8"); 제목과 메시지 본문에 모두 중국어가 포함되면 어떻게됩니까? – user3014926
좀 더 구체적으로 알려주세요. – user3014926