Не удается отправить электронную почту из Google App Engine с помощью JavaMailSender Spring - PullRequest
1 голос
/ 22 апреля 2010

Отлично работает без составных частей (изменено из примера в документации Spring ):

final MimeMessagePreparator preparator = new MimeMessagePreparator() {
    public void prepare(final MimeMessage mimeMessage) throws Exception {
        final MimeMessageHelper message = new MimeMessageHelper(
                mimeMessage);
        message.setTo(toAddress);
        message.setFrom(fromAddress);
        message.setSubject(subject);
        final String htmlText = FreeMarkerTemplateUtils
                .processTemplateIntoString(configuration
                        .getTemplate(htmlTemplate), model);
        message.setText(htmlText, true);
    }
};
mailSender.send(preparator);

Но как только я изменил его на:

final MimeMessagePreparator preparator = new MimeMessagePreparator() {
    public void prepare(final MimeMessage mimeMessage) throws Exception {
        final MimeMessageHelper message = new MimeMessageHelper(
                mimeMessage, true);
...
        message.setText(plainText, htmlText);
    }
};
mailSender.send(preparator);

Я получаю:

Failed message 1:
javax.mail.MessagingException: Converting attachment data failed
    at com.google.appengine.api.mail.stdimpl.GMTransport.sendMessage(GMTransport.java:231)
    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:402)
...

Поскольку GMTransport является проприетарным классом Google, и источник недоступен, довольно сложно определить проблему (по крайней мере, с моими навыками). У кого-нибудь есть идеи, что попробовать дальше?

My bean config, за помощь вам , чтобы помочь мне:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"
        p:username="${mail.username}" p:password="${mail.password}"
        p:protocol="gm" />

Ответы [ 2 ]

0 голосов
/ 09 мая 2016

Я столкнулся с этим недавно и не смог найти решение ни на одном веб-сайте. Проблема заключается в параметре multipartMode, используемом по умолчанию конструкторами MimeMessageHelper.

Изменение:

MimeMessageHelper h = new MimeMessageHelper(mimeMessage, true);

Кому:

MimeMessageHelper h = new MimeMessageHelper(
    mimeMessage,
    MimeMessageHelper.MULTIPART_MODE_RELATED);

Первая форма по умолчанию будет MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED. В документации говорится:

Это значение по умолчанию с весны 1.2.1. Это, пожалуй, самая правильная структура MIME, согласно спецификации MIME: известно, что она правильно работает в Outlook, Outlook Express, Yahoo Mail и Lotus Notes. Не работает должным образом на Mac Mail. Если вы нацелены на Mac Mail или испытываете проблемы с определенными письмами в Outlook, рассмотрите вариант использования MULTIPART_MODE_RELATED.

Вероятно, его следует обновить, указав, что он не работает с почтовым API AppEngine. Режим замены может быть менее корректным, но выглядит более совместимым.

0 голосов
/ 07 июля 2010

У меня не было проблем с использованием ванильных (javax.mail. *) Библиотек JavaMail. Посмотреть здесь http://code.google.com/appengine/docs/java/mail/usingjavamail.html#Multi_Part_Messages

...