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

Prz*_*k85 2 java email spring-boot

我卡住了,无法弄清楚发送带附件的电子邮件的问题.

一切都很好,没有附件.当我尝试添加附件时,我得到例外:

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"
Run Code Online (Sandbox Code Playgroud)

这是我的属性文件:

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
Run Code Online (Sandbox Code Playgroud)

和使用它的类:

@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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

猜测MimeMessageHelper存在问题,但无法单独解决.有人可以帮我吗?

Ami*_*ati 6

错误是因为你是因为

试图用空体零件发送邮件.

@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());
            }
Run Code Online (Sandbox Code Playgroud)