发送带附件的电子邮件 - 空的多部分。

6

我卡住了,无法解决发送带附件的电子邮件的问题。

没有附件时一切正常。但当我尝试添加附件时,会出现异常:

Failed messages: javax.mail.MessagingException: IOException while sending message;nested exception is:
java.io.IOException: javax.mail.MessagingException: Empty multipart: multipart/related; 
boundary="----=_Part_1_733213598.1441009036818"

这是我的属性文件:

reports.mailSender.clientEmail=zyx@gmail.com 
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=xyz@gmail.com
spring.mail.password=****
spring.mail.properties.mail.mime.multipart.allowempty=true
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.ssl.trust=smtp.gmail.com

并使用它的类:

@Component
public class MailSenderService {

    @Autowired
    JavaMailSender javaMailSender;

    @Value("${reports.mailSender.clientEmail}")
    private String clientEmail;

    public void sendMessage() {

        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        FileSystemResource file = new FileSystemResource(new File("c:\\simple.jpg"));
        try {
            mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(clientEmail));
            mimeMessage.setFrom("xyz@gmail.com");
            mimeMessage.setText(
                    "Hi");
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.addAttachment(file.getFilename(), file);
        } catch (MessagingException e) {
            e.printStackTrace();
        }

        try {
            this.javaMailSender.send(mimeMessage);
        } catch (MailException ex) {
            // simply log it and go on...
            System.err.println(ex.getMessage());
        }
    }
}

我猜测MimeMessageHelper可能存在问题,但是我自己无法解决。有人能帮我吗?


6
请尽量使用helper.setText()来替代mimeMessage.setText() - Jens
1个回答

10
错误是由于您尝试发送空邮件正文引起的。
@Jen在评论中说得对,您设置邮件文本的方式不正确。
您的代码有误,请更改如下并尝试:
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
FileSystemResource file = new FileSystemResource(new File("c:\\simple.jpg"));
try {
    MimeMessageHelper helper = new MimeMessageHelper(message, true);
    helper.addRecipient(Message.RecipientType.TO, new InternetAddress(clientEmail));
    helper.setFrom("xyz@gmail.com");
    helper.setText("Hi");
    helper.addAttachment(file.getFilename(), file);
} catch (MessagingException e) {
    e.printStackTrace();
}

try {
    this.javaMailSender.send(mimeMessage);
} catch (MailException ex) {
    // simply log it and go on...
    System.err.println(ex.getMessage());
}

谢谢你的帮助,异常问题已经解决了 - 你能解释一下为什么在我移动MimeMessageHelper时没有异常吗?另一个问题是收到的电子邮件中没有附件 - 不知道为什么。编辑:现在一切都好了 - 谢谢大家的帮助 - 非常感激 :) - Przemek85
问题不在于移动MimeMessageHelper,而是您将内容设置在错误的位置。您应该在helper中设置这些内容,而不是在mimeMessage中设置。 - Amit Bhati
检查指定位置是否存在文件。 - Amit Bhati
我该如何感谢你和Jens的回答? - Przemek85

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接