Весеннее письмо - проблема с польскими символами в теме электронной почты - PullRequest
0 голосов
/ 03 октября 2019

У меня есть фрагмент кода, который генерирует сообщение электронной почты.

@Override
public void sendMessageWithAttachment(List<Approver> approvers, String contractorEmail, InvoiceData invoice, File file, boolean isAccountancy) {

    try {
        String content;
        MimeMessage message = emailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        String fullName = invoice.getData().getFirstName() + " " + invoice.getData().getLastName();
        helper.setSubject(fullName
                + SUBJECT + getMonthAndYearFromDate(invoice.getReceptionDate()));
        helper.setText("test");
        content = mailContentBuilder.build(invoice.getId(), fullName, contractorEmail);
        helper.setText(content, true);
        helper.addAttachment(invoice.getData().getFirstName() + "_" + invoice.getData().getLastName()
                + PZD + getMonthAndYearFromDate(invoice.getReceptionDate()).toUpperCase() + ".pdf", file);

        String mainEmail = approvers.get(0).getEmail();
        helper.setTo(mainEmail);
        if (approvers.size() > 1) {
            approvers.stream()
                    .filter(i -> mainEmail.equals(i.getEmail())).findAny()
                    .ifPresent(i -> approvers.remove(i));
            String[] emailList = (approvers.stream().map(Approver::getEmail).toArray(String[]::new));
            helper.setCc(emailList);
        }
        helper.setFrom(new InternetAddress("noreply@l4a-soft.com", "L4A Website", "UTF8"));
        emailSender.send(message);

    } catch (MessagingException | UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

он использует следующие операции импорта, связанные с электронной почтой:

import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

Когда яЗапустив мое приложение на тестовом сервере, все работает нормально, письма отправляются правильно.

На производительном сервере - заголовки писем теряют польские символы, превращая их в мерзость, подобную этой:

=UTF-8_Q_Grzegorz=5F=C5=BB=C3=B3=C5=82tek-PZD-WRZESIE_;_filename_1==C5=83

И это должно выглядеть так - Grzegorz Żółtek-PZD-WRZESIEŃ.pdf

У меня была проблема с этим классом ранее, на тестовом сервере он правильно писал названия месяцев (пример: WRZESIEŃ - SEPTEMBER). Но после перехода к профессии он начал менять название с польского на английский. Код, ответственный за это:

private static String getMonthAndYearFromDate(Date date) {
    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Warsaw"));
    cal.setTime(date);
    return new SimpleDateFormat("MMMM");
}

Я исправил это, изменив его на:

private static String getMonthAndYearFromDate(Date date) {
    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Warsaw"));
    cal.setTime(date);
    return new SimpleDateFormat("MMMM", new Locale("pl")).format(cal.getTime());
}

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

...