使用JAVA Mail API在主题字段中设置中文名称时出现UnsupportedEncodingException

使用JAVA Mail API在主题字段中设置中文名称时出现UnsupportedEncodingException,java,encoding,utf-8,Java,Encoding,Utf 8,我使用JAVA-MAIL API发送主题行包含用户名的用户邮件。对于任何英文字母表名称,名称都会正确显示在主题行中(我正在使用message.setSubject()设置该行),但当我输入中文名称时,它没有正确反映在主题行中 在我试图用setContent()显示这些捕获实体的主体部分中,完全显示了相同的中文名称。我试图更改编码格式,但随后出现UnsupportedEncodingException错误。请帮助我如何获得主题行中的名称(可能是英文/中文/日文) 以下是我正在使用的代码: publ

我使用JAVA-MAIL API发送主题行包含用户名的用户邮件。对于任何英文字母表名称,名称都会正确显示在主题行中(我正在使用message.setSubject()设置该行),但当我输入中文名称时,它没有正确反映在主题行中

在我试图用setContent()显示这些捕获实体的主体部分中,完全显示了相同的中文名称。我试图更改编码格式,但随后出现UnsupportedEncodingException错误。请帮助我如何获得主题行中的名称(可能是英文/中文/日文)

以下是我正在使用的代码:

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!!");