代码之家  ›  专栏  ›  技术社区  ›  hleinone

使用Spring的JavaMailSender从Google App Engine发送多部分电子邮件失败

  •  1
  • hleinone  · 技术社区  · 14 年前

    example in Spring documentation ):

    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类,没有可用的源代码,很难解决这个问题(至少用我的技能)。有人知道下一步该怎么做吗?

    我的豆豆配置,谢谢你的帮助 为了帮助我:

    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"
            p:username="${mail.username}" p:password="${mail.password}"
            p:protocol="gm" />
    
    2 回复  |  直到 14 年前
        1
  •  0
  •   user2465454    8 年前

    我最近遇到了这个问题,在任何网站上都找不到解决方案。问题在于mimessagehelper构造函数默认使用的multipartMode参数。

    改变:

    MimeMessageHelper h = new MimeMessageHelper(mimeMessage, true);
    

    致:

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

    第一个表单将默认为 MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED .文件说明:

    这是自Spring 1.2.1以来的默认设置。根据MIME规范,这可以说是最正确的MIME结构:它可以在Outlook、Outlook Express、Yahoo Mail和Lotus Notes上正常工作。在Mac Mail上无法正常工作。如果您的目标是Mac Mail或Outlook上的特定邮件出现问题,请考虑改用多部分模式。

    它可能应该更新,以包括它不适用于AppEngine的邮件API。更换模式可能不太正确,但似乎更兼容。

        2
  •  -1
  •   klonq    14 年前

    我在使用vanilla(javax.mail.*)JavaMail库时没有遇到任何问题。看这里 http://code.google.com/appengine/docs/java/mail/usingjavamail.html#Multi_Part_Messages

    推荐文章