Java发送带附件的邮件

1. 整体流程

可以按照以下步骤实现Java发送带附件的邮件:

步骤 描述
步骤1 创建一个Java Mail Session,配置SMTP服务器的参数
步骤2 创建一个MimeMessage对象,设置发件人、收件人、主题和正文等信息
步骤3 创建一个Multipart对象,用于存储邮件的文本和附件
步骤4 创建一个MimeBodyPart对象,用于存储邮件的正文
步骤5 创建一个MimeBodyPart对象,用于存储邮件的附件
步骤6 将正文和附件添加到Multipart对象中
步骤7 将Multipart对象设置为MimeMessage的内容
步骤8 使用Transport发送邮件

接下来,我们将逐步介绍每个步骤需要做什么,以及涉及的代码和注释。

2. 步骤详解

步骤1:创建一个Java Mail Session

import javax.mail.Session;
import java.util.Properties;

// 创建Java Mail Session
Properties props = new Properties();
props.put("mail.smtp.auth", "true"); // 设置SMTP服务器需要身份验证
props.put("mail.smtp.host", "smtp.example.com"); // 设置SMTP服务器地址
props.put("mail.smtp.port", "587"); // 设置SMTP服务器端口号
Session session = Session.getInstance(props);
  • mail.smtp.auth:设置SMTP服务器需要身份验证,值为"true"表示需要验证,值为"false"表示不需要验证。
  • mail.smtp.host:设置SMTP服务器的地址,例如"smtp.example.com"。
  • mail.smtp.port:设置SMTP服务器的端口号,一般为587。

步骤2:创建一个MimeMessage对象

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.*;

// 创建MimeMessage对象
MimeMessage message = new MimeMessage(session);
try {
    message.setFrom(new InternetAddress("sender@example.com")); // 设置发件人
    message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@example.com")); // 设置收件人
    message.setSubject("Java邮件发送测试"); // 设置主题
    message.setText("这是一封Java邮件发送测试的邮件!"); // 设置正文
} catch (MessagingException e) {
    e.printStackTrace();
}
  • setFrom:设置发件人的地址。
  • setRecipients:设置收件人的地址,参数Message.RecipientType.TO表示主要收件人。
  • setSubject:设置邮件的主题。
  • setText:设置邮件的正文。

步骤3:创建一个Multipart对象

import javax.mail.Multipart;
import javax.mail.internet.MimeMultipart;

// 创建Multipart对象
Multipart multipart = new MimeMultipart();

步骤4:创建一个MimeBodyPart对象(正文)

import javax.mail.internet.MimeBodyPart;

// 创建MimeBodyPart对象(正文)
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText("这是一封Java邮件发送测试的邮件!");

步骤5:创建一个MimeBodyPart对象(附件)

import javax.mail.internet.MimeBodyPart;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;

// 创建MimeBodyPart对象(附件)
MimeBodyPart attachmentPart = new MimeBodyPart();
DataHandler dataHandler = new DataHandler(new FileDataSource("/path/to/attachment.txt"));
attachmentPart.setDataHandler(dataHandler);
attachmentPart.setFileName("attachment.txt");
  • DataHandler:用于处理附件数据的类,参数为文件路径。
  • setFileName:设置附件的文件名。

步骤6:将正文和附件添加到Multipart对象中

try {
    multipart.addBodyPart(textPart); // 添加正文
    multipart.addBodyPart(attachmentPart); // 添加附件
} catch (MessagingException e) {
    e.printStackTrace();
}

步骤7:将Multipart对象设置为MimeMessage的内容

try {
    message.setContent(multipart);
} catch (MessagingException e) {
    e.printStackTrace();
}

步骤8:发送邮件

import javax.mail.Transport