阿拉伯语和JavaMail问题

时间:2012-03-20 09:41:33

标签: java email encoding outlook javamail

我在我的一个struts应用程序中遇到了一个问题。我有JSP页面,它接受来自用户的输入并发送到电子邮件地址。我在JSP页面中设置了如下编码。

<%@ page  pageEncoding="UTF-8"  contentType="text/html; charset=UTF-8" language="java"%>

现在,当用户将表单提交给操作时,我使用以下代码向收件人发送电子邮件。

Properties properties = new Properties();
    properties.put("mail.smtp.host", "10.51.10.44");
    properties.put("mail.smtp.port", "25");
    properties.setProperty("charset","utf-8");
    Session session = Session.getDefaultInstance(properties, null);
    try  {

            MimeMessage message = new MimeMessage(session);
            String msg = formatEmail(userForm.getContent(),userForm.getUsername(),ip,host);
            message.setFrom(new InternetAddress(from));
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject(subject,  "UTF-8");
            BodyPart messageBodyPart = new MimeBodyPart(); 
            messageBodyPart.setHeader("Content-Type","text/plain; charset=UTF-8"); 
            System.out.println("subject :-"+subject);
            System.out.println("MESSAGE :-"+msg);
            messageBodyPart.setContent(msg.toString(), "text/html;charset=UTF-8");
            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart( messageBodyPart ); 
            message.setContent( multipart); 
            Transport.send(message);

但是我的收件人正在收到阿拉伯语电子邮件的内容和主题,如下所示。

سيسيششسيؕكنشسيكتسيشماسيشنلاسيشتلشسيتلشسيجشسيلجسشتنسي

请帮忙......我知道这是一个编码问题。如果我将jsp的编码更改为

,我会获得成功
<%@ page  pageEncoding="UTF-8"  contentType="text/html; charset=iso-8859-1" language="java"%>

但是通过这样做,从DB重试并在JSP页面中显示的所有其他文本都作为问号。

2 个答案:

答案 0 :(得分:3)

也设置内容。

msg.setContent(text, "text/plain;Charset=UTF-8");

答案 1 :(得分:0)

很确定原作者不再关心这个问题,但对于未来的读者,这就是解决它的方法:

  • 对于纯文本正文部分:

    new MimeBodyPart().setText(text, "UTF-8")
    
  • 用于设置电子邮件主题:

    msg.setSubject(subject, "UTF-8")
    
  • 如果您要添加名称为阿拉伯语的附件,则需要设置此系统属性:

    System.setProperty("mail.mime.charset", "UTF-8")
    

    JavaMail 在内部使用此属性来获取用于附件文件名的默认编码。