即使太小,元音中的重音问题(a,e,i,o,u到á,é,í,ó,ú)也被邮件剪断

时间:2019-06-25 19:28:48

标签: java html email mime-message

我要发送一封电子邮件,其中带有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”中的元音(á,é,í)

邮件被剪裁发送,告诉我还有待观察:

Mail body

通知零件:

...

[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)****

邮件已正确正确发送。

Correct mail Body

有任何线索吗?

5 个答案:

答案 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);

邮件的屏幕截图(所有元音和重音都存在):

enter image description here

希望这对您有所帮助:)

通过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");

在这里找到: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/mail/javamail/MimeMessageHelper.html

它在他们的示例中作为抽象对象定义实现:

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答案

  

utf 8 charset doesn't work with javax mail

第2点:您可能要添加此行,它适用于HTML页面,并且可能适用于您的问题:

<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />