当我在本地运行应用程序时,我有一个可以正常使用IE的邮件程序类,但是在服务器上部署后它会一直发送gobbledygook和不可读的字符,我不知道问题出在哪里,一切都是utf8,这是我的代码:
public static void sendHTMLEmail(String to, String subject, String body)
throws EmailException {
HtmlEmail email = new HtmlEmail();
email.setSmtpPort(25);
email.setAuthenticator(new DefaultAuthenticator("myMail","myPass"));
email.setDebug(false);
email.setHostName("smtp.gmail.com");
email.setFrom("webmail@mysite.com","Webmail@mysite");
email.setCharset("UTF-8");
email.setSubject(subject);
// --set Body--
String HTMLBody ="<html xmlns='http://www.w3.org/1999/xhtml'>";
HTMLBody += "<head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /></head>";
HTMLBody += "<body><div dir='rtl'>";
HTMLBody += body;
HTMLBody += "</div></body></html>";
// -----------
email.setHtmlMsg(HTMLBody);
email.setTextMsg("Your email client does not support HTML messages");
email.addTo(to);
email.setTLS(true);
email.send();
}
这是我的图书馆:
import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.Email;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.SimpleEmail;
thnx你的时间
答案 0 :(得分:2)
我假设String body
方法参数实际上是用户提供的数据,该数据已在某些<input>
或<textarea>
中输入并由<form method="post">
提交一个JSP页面。
将使用charset提交数据,如包含表单的页面的Content-Type
标题中所指定的那样。如果Content-Type
标题中没有字符集,那么浏览器只会做出最佳猜测,而MSIE通常不像其他人那样聪明,它只会抓住客户端平台的默认编码。
您需要确保完成以下三项工作:
确保包含<form>
的HTTP响应已与charset=UTF-8
标头中的Content-Type
一起发送。您可以通过在负责生成响应的JSP顶部添加以下行来实现此目的:
<%@page pageEncoding="UTF-8" %>
这不仅将响应编码设置为UTF-8,还隐式将Content-Type
标头设置为text/html;charset=UTF-8
。
确保处理表单提交的servlet使用相同的字符编码处理获取的HTTP请求中的输入数据。您可以通过在之前添加以下行来获得此请求,例如getParameter()
。
request.setCharacterEncoding("UTF-8");
一种更方便的方法是将该行放在某些Filter
中,该行已映射到感兴趣的URL模式上,这样您就不需要在所有servlet上复制该行了。
确保不使用accept-charset
的{{1}}属性。 MSIE对此有严重的错误。