邮件即使很小也会被剪掉,元音重音问题(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 á, é, í, ó, ú)

我正在发送一封电子邮件,其中 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>";

**查看元音 **查看 "mexico"、"invalidos" 和 "dia"****[= 中的元音 (a, e, i) 15=]

邮件已正确完美发送。

有什么线索吗?

您的电子邮件编辑器 'folds' 当 'body height' 是软件监视的 'beyond certain height' 时的邮件正文。

现在,您的总体 'mail body height' 是邮件正文中每一行的总和。现在每个字母都有一个高度,这会根据您是否使用带有 'accents' 的字母而有所不同,带重音字符和不带重音字符的字母的 'height' 不必相同。

在这个特定的例子中,前者没有吸引 'folding',而后者在您使用的电子邮件软件中有。

假设您在浏览器中查看这三行,您可以在浏览器中研究 'line heights' 'developer tools',最终确定使用重音字符时个别行高更多。

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

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

我尝试了什么:

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 clips emails that have a message size larger than 102 KB, and hides the full content behind a View entire message link.

因此,如果您想避免消息被截断,则必须将消息大小保持在 102 KB 以内。

最终在@Anish B 的间接帮助下。我找到了解决方案:

有一个 class MimeMessageHelper 并且 class 有几个构造函数:

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 主题编码的一部分。

所以最终通过正确给出编码解决了问题。

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)

第 1 点:以前关于 UTF-8 和 GMail 的 Whosebug 回答

utf 8 charset doesn't work with javax mail

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

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