我要发送一封电子邮件,其中带有JavaMailSender,正文中带有html,如下所示:
String html = "<h2>RFC INVALIDOS en México:</h2>"+
"<h4>Se adjunta el siguiente listado de RFC inválidos al día de la fecha.</h4>" +
"<h3>Saludos!!!</h3>";
MimeMessageHelper helper = return new MimeMessageHelper(mimeMessage, true); // some helper
helper.setSubject(message.getSubject());
helper.setText(html, true);
看看“墨西哥”,“inválidos”和“día”中的元音(á,é,í)
邮件被剪裁发送,告诉我还有待观察:
通知零件:
...
[Mensaje recortado] Ver todo el mensaje
但是,如果我不引用元音就发送它:
String html = "<h2>RFC INVALIDOS en Mexico:</h2>"+
"<h4>Se adjunta el siguiente listado de RFC invalidos al dia de la fecha.</h4>" +
"<h3>Saludos!!!</h3>";
**看元音**看“墨西哥”,“ invalidos”和“ dia”中的元音(a,e,i)****
邮件已正确正确发送。
有任何线索吗?
答案 0 :(得分:3)
当邮件的“正文高度”“超出特定高度”时,您的电子邮件编辑器会“折叠”邮件正文。
现在,您的整体“邮件正文高度”是邮件正文中每行的总和。现在,每个字母都有一个高度,并且根据您是否使用带重音符号的字母而有所不同,带有或不带有重音符号的字母的“高度”不必相同。
在此特定示例中,前者没有吸引“折叠”,而后者在您使用的电子邮件软件中吸引了。
假设您正在浏览器中查看这三行,则可以在浏览器“开发人员工具”中研究“行高”,并最终确定使用重音符号时各个行高更大。
我敢打赌,减小字体大小,您不应该得到该'...'(省略号)。下面是一个更具爆炸性的讨论,其中有完整的历史和规范参考,以及从技术上讲解字体时不涉及的内容。
When setting a font-size in CSS, what is the real height of the letters?
答案 1 :(得分:2)
我尝试过的事情:
MimeMessage message = new MimeMessage(session);
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("subject", "UTF-8"); // add encoding to support different languages...
message.setSentDate(new java.util.Date());
MimeBodyPart messageBodyPart = new MimeBodyPart();
String html = "<h2>RFC INVALIDOS en México:</h2>"+
"<h4>Se adjunta el siguiente listado de RFC inválidos al día de la fecha.</h4>" +
"<h3>Saludos!!!</h3>";
messageBodyPart.setContent(html, "text/html");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
// send message
Transport.send(message);
邮件的屏幕截图(所有元音和重音都存在):
希望这对您有所帮助:)
通过Gmail剪切邮件的原因(来自MailChimp Article on Gmail Clipping)
Gmail剪辑邮件大小大于 102 KB 的电子邮件,以及 将全部内容隐藏在“查看整个消息”链接的后面。
因此,如果要避免剪切消息,则必须使消息大小小于102 KB。
答案 2 :(得分:2)
最后在@Anish B的间接帮助下,我找到了解决方案:
有一个MimeMessageHelper类,该类具有几个构造函数:
public MimeMessageHelper(MimeMessage mimeMessage)
public MimeMessageHelper(MimeMessage mimeMessage, String encoding)
public MimeMessageHelper(MimeMessage mimeMessage, boolean multipart)
public MimeMessageHelper(MimeMessage mimeMessage, boolean multipart, String encoding)
我正在使用:
public MimeMessageHelper(MimeMessage mimeMessage, boolean multipart)
我将其更改为:
public MimeMessageHelper(MimeMessage mimeMessage, boolean multipart, String encoding)
它看起来像:
protected MimeMessageHelper createMimeMsg(MimeMessage mimeMessage) throws MessagingException {
return new MimeMessageHelper(mimeMessage, true, "UTF-8");
}
看起来默认编码不是“ UTF-8”,该帮助程序的默认编码为空。即使我将html设置为“ UTF-8”,它也无法识别。我不得不把它作为mime主题编码的一部分。
所以最终,通过正确地提供编码可以解决问题。
答案 3 :(得分:2)
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8");
它在他们的示例中作为抽象对象定义实现:
mailSender.send(new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage) throws MessagingException {
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8"); // Here is where it seems the encoding can be set, through this helper class.
//...
我现在也正在查看api,发现一些很棒的东西。如果您可以将签名做成一个很小的kb图像资源,然后以这种方式发送,则对您来说甚至更容易。这使您不必担心这种情况下的UTF-8。
message.addInline("signature.png", new ClassPathResource("img/signature.png"));
无论如何,希望这会有所帮助。让我知道是否可以为您更好地解释它。 (UTF-8)
答案 4 :(得分:1)
第1点:以前关于UTF-8和GMail的StackOverflow答案
第2点:您可能要添加此行,它适用于HTML页面,并且可能适用于您的问题:
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />