Java如何发送带有附件的电子邮件?

在此示例中,我们创建了一个小程序来发送带有文件附件的电子邮件。要发送带有附件的消息,我们需要创建一个javax.mail.Multipart对象为电子邮件的对象,该对象基本上将包含电子邮件文本消息,然后将文件添加到第二个块中,这两个对象都是的对象javax.mail.internet.MimeBodyPart。在此示例中,我们还使用javax.activation.FileDataSource。

package org.nhooo.example.mail;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Properties;

public class SendEmailWithAttachment {
    public static void main(String[] args) {
        SendEmailWithAttachment demo = new SendEmailWithAttachment();
        demo.sendEmail();
    }

    public void sendEmail() {
        // 定义电子邮件信息。
        String from = "nhooo@gmail.com";
        String to = "nhooo@gmail.com";
        String subject = "Important Message";
        String bodyText = "This is a important message with attachment.";

        // 附件文件名。
        String attachmentName = "D:/Temp/hello.txt";

        // 创建具有以下属性的会话。
        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.port", "587");
        Session session = Session.getDefaultInstance(props);

        try {
            InternetAddress fromAddress = new InternetAddress(from);
            InternetAddress toAddress = new InternetAddress(to);

            // 创建一个Internet邮件味精。
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(fromAddress);
            msg.setRecipient(Message.RecipientType.TO, toAddress);
            msg.setSubject(subject);
            msg.setSentDate(new Date());

            // 设置电子邮件信息文本。
            MimeBodyPart messagePart = new MimeBodyPart();
            messagePart.setText(bodyText);

            // 设置电子邮件附件文件
            FileDataSource fileDataSource = new FileDataSource(attachmentName);

            MimeBodyPart attachmentPart = new MimeBodyPart();
            attachmentPart.setDataHandler(new DataHandler(fileDataSource));
            attachmentPart.setFileName(fileDataSource.getName());

            // 创建多部分电子邮件。
            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(messagePart);
            multipart.addBodyPart(attachmentPart);

            msg.setContent(multipart);

            //发送信息。不要忘记设置用户名和密码
            // 验证邮件服务器。
            Transport.send(msg, "nhooo", "********");
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

Maven依赖

<!-- http://repo1.maven.org/maven2/javax/mail/javax.mail-api/1.5.6/javax.mail-api-1.5.6.jar -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.5.6</version>
</dependency>
<!-- http://repo1.maven.org/maven2/javax/mail/mail/1.4.7/mail-1.4.7.jar -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>