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

Posted

技术标签:

【中文标题】邮件即使很小也会被剪裁,元音中的重音问题(a、e、i、o、u 到 á、é、í、ó、ú)【英文标题】:Mail is being clipped even when is so small, problem with accent in vowels (a, e, i, o, u to á, é, í, ó, ú) 【发布时间】:2019-11-07 16:36:04 【问题描述】:

我正在发送一封带有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);

看看“México”、“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>";

**查看元音 **查看元音 (a, e, i),在“mexico”、“invalidos”和“dia”****

邮件已正确且完美地发送。

有什么线索吗?

【问题讨论】:

【参考方案1】:

我尝试了什么:

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】:

第 1 点:关于 UTF-8 和 GMail 的上一个 *** 答案

utf 8 charset doesn't work with javax mail

第 2 点:您可能想要添加这一行,它适用于 HTML 页面,它可能适用于您的问题:

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

【讨论】:

【参考方案3】:

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】:

最后在@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”,该助手的默认编码是 null。即使我将 html 设置为“UTF-8”,它也无法识别它。我不得不把它作为 mime 主题编码的一部分。

所以最后通过正确的编码解决了问题。

【讨论】:

【参考方案5】:

当“正文高度”“超出软件监视的特定高度”时,您的电子邮件编辑器会“折叠”邮件正文。

现在,您的整体“邮件正文高度”是邮件正文中每一行的总和。现在每个字母都有一个高度,这取决于您是否使用带有“重音”的字母,带有和不带有重音字符的字母的“高度”不必相同。

在这个特定的例子中,前者不会吸引“折叠”,而后者在您使用的电子邮件软件中会。

假设您在浏览器中查看这三行,您可以在浏览器“开发者工具”中研究“行高”,最终确定使用重音字符时单个行高更高。

我敢打赌,缩小字体大小,你不应该得到那个“...”(省略号)。下面是一个更具爆炸性的讨论,其中包含详尽的历史和规范参考,以及在技术上剖析字体的内容。

When setting a font-size in CSS, what is the real height of the letters?

【讨论】:

问题出在编码上,在本例中为 UTF-8,如果您发布完整的答案并附上邮件示例而没有被剪裁,我将很乐意接受并向您提供赏金

以上是关于邮件即使很小也会被剪裁,元音中的重音问题(a、e、i、o、u 到 á、é、í、ó、ú)的主要内容,如果未能解决你的问题,请参考以下文章

即使电子邮件有效,电子邮件检查也会给出错误消息

美语听力与发音 1-16

即使已经安装了应用程序,分支深度链接也会打开 App Store 而不是 App

Visual Studio 2010 编辑器意外自动更正

cpp中的析构函数会自动调用吗?即使析构函数没有提及非动态变量,它们是不是也会被删除?

为啥即使我在后台请求位置更新,我的 iOS 应用程序也会被杀死?