Почта обрезается, даже когда она так мала, проблема с ударением в гласных - PullRequest
6 голосов
/ 25 июня 2019

Я отправляю электронное письмо с 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>";

** посмотрите на гласные ** Посмотрите на гласные, (a, e, i), в «mexico», «invalidos» и «dia» ****

Почта отправлена ​​правильно и отлично.

Correct mail Body

Есть какие-нибудь подсказки?

Ответы [ 5 ]

3 голосов
/ 02 июля 2019

Ваш редактор электронной почты «сворачивает» почтовое тело, когда «высота тела» «превышает определенную высоту», которую отслеживает программное обеспечение.

Теперь ваш общий «почтовый рост» представляет собой сумму каждогострока в вашем почтовом теле.Теперь каждая буква имеет высоту, и она варьируется в зависимости от того, используете ли вы буквы с «акцентами» на ней, «высота» буквы с и без символа ударения не обязательно должна быть одинаковой.

Вв этом конкретном примере первый не привлек «сворачивание», а второй - в используемом вами почтовом программном обеспечении.

Предполагая, что вы просматриваете эти три строки в браузере, вы можете исследовать «высоту строк».в браузере «инструменты разработчика» и, наконец, определите, что высота отдельных строк больше, когда вы используете акцентированные символы.

Бьюсь об заклад, уменьшите размер шрифта, и вы не должны получать это «...» (многоточие).Ниже приведено гораздо более взрывное обсуждение с подробным описанием истории и спецификаций, а не с технической точки зрения на анализ шрифта.

При установке размера шрифта в CSS какова реальная высота букв?

2 голосов
/ 07 июля 2019

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.Возможно, вам даже будет проще, если вы сделаете свою подпись небольшим ресурсом изображения в Кб и отправите его таким образом.Это избавит вас от необходимости беспокоиться о UTF-8 в этом сценарии.

message.addInline("signature.png", new ClassPathResource("img/signature.png"));

В любом случае, надеюсь, это поможет.Дайте мне знать, если я попытаюсь объяснить это лучше для вас.(UTF-8)

2 голосов
/ 05 июля 2019

Наконец, при косвенной помощи @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.

Итак, наконец, проблема решается путем правильного задания кодировки.

2 голосов
/ 05 июля 2019

Что я пробовал:

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 об обрезке Gmail )

Gmail отсекает электронные письма, размер сообщения которых превышает 102 КБ , и скрывает весь контент за ссылкой Просмотреть сообщение полностью.

Таким образом, если вы хотите избежать обрезки сообщений, вы должны сохранить размер сообщения менее 102 КБ.

1 голос
/ 07 июля 2019

Точка # 1: предыдущий ответ StackOverflow относительно UTF-8 и GMail

utf 8 кодировка не работает с почтой javax

Пункт № 2: Возможно, вы захотите добавить эту строку, она работает для HTML-страниц и может работать для вашей проблемы:

<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...