使用JAVA Mail API在主题字段中设置中文名称时出现UnsupportedEncodingException
我使用JAVA-MAIL API发送主题行包含用户名的用户邮件。对于任何英文字母表名称,名称都会正确显示在主题行中(我正在使用message.setSubject()设置该行),但当我输入中文名称时,它没有正确反映在主题行中 在我试图用setContent()显示这些捕获实体的主体部分中,完全显示了相同的中文名称。我试图更改编码格式,但随后出现UnsupportedEncodingException错误。请帮助我如何获得主题行中的名称(可能是英文/中文/日文) 以下是我正在使用的代码:使用JAVA Mail API在主题字段中设置中文名称时出现UnsupportedEncodingException,java,encoding,utf-8,Java,Encoding,Utf 8,我使用JAVA-MAIL API发送主题行包含用户名的用户邮件。对于任何英文字母表名称,名称都会正确显示在主题行中(我正在使用message.setSubject()设置该行),但当我输入中文名称时,它没有正确反映在主题行中 在我试图用setContent()显示这些捕获实体的主体部分中,完全显示了相同的中文名称。我试图更改编码格式,但随后出现UnsupportedEncodingException错误。请帮助我如何获得主题行中的名称(可能是英文/中文/日文) 以下是我正在使用的代码: publ
public class RegistrationController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String name = request.getParameter("fullname");
String Addr = request.getParameter("address");
String age = request.getParameter("age");
String Qual = request.getParameter("qual");
String Persent = request.getParameter("percent");
String Year = request.getParameter("yop");
if (name.isEmpty() || Addr.isEmpty() || age.isEmpty() || Qual.isEmpty()
|| Persent.isEmpty() || Year.isEmpty()) {
RequestDispatcher rd = request
.getRequestDispatcher("registration.jsp");
out.println("<font color=red>OOPS!! YOU MISSED OUT SOME FIELDS. FILL THEM AGAIN</font>");
rd.include(request, response);
} else {
try {
final String username = "abc@gmail.com";
final String password = "*****";
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");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username,
password);
}
});
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("abc@gmail.com"));
message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("xyz@gmail.com"));
message.setSubject("THANK YOU " +name+ " FOR SUBSCRIBING WITH US!!");
message.setContent(
"<h3>Please review your entered details below.</h3><table><tr><td>Name</td><td>"
+ name
+ "</td></tr><tr><td>Address</td><td>"
+ Addr
+ "</td></tr><tr><td>Age</td><td>"
+ age
+ "</td></tr><tr><td>Qualification</td><td>"
+ Qual
+ "</td></tr><tr><td>Percentage</td><td>"
+ Persent
+ "</td></tr><tr><td>Passout</td><td>"
+ Year
+ "</td></tr></table>", "text/html");
Transport.send(message);
System.out.println("mail sent successful");
} catch (MessagingException ex) {
ex.printStackTrace();
} finally {
RequestDispatcher rd = request.getRequestDispatcher("home.jsp");
rd.forward(request, response);
}
}
}
作为参考,你检查过了吗?在检查这篇文章之前,我已经尝试过上面提到的这些解决方案。具体地说,setSubject(subject,charset)在EclipseIDE中不起作用。只进行了一次辩论。可能是读了这篇文章后,我认为我的输入在收集时没有编码。有人能告诉我如何使用setText()和charset参数来设置主题吗?邮件标题的字符集始终是US-ASCII(如果您对SMTP功能没有任何假设的话)。您可以使用base-64编码,也可以使用quoted printable。
message.setSubject("THANK YOU " +new String(name.getBytes("UTF-8"))+ " FOR SUBSCRIBING WITH US!!");