21xrx.com
2025-04-14 01:54:07 Monday
文章检索 我的文章 写文章
Java发送包含Excel附件的邮件
2023-07-05 07:22:50 深夜i     20     0
Java 邮件 Excel 附件 发送

随着信息化的快速发展,电子邮件已成为人们日常生活和工作中必不可少的一部分。特别是在企业、学校、政府等机构中,人们经常需要使用邮件进行信息传递和沟通。而对于程序员来说,邮件的功能也是十分重要的,他们需要使用代码自动发送邮件、处理邮件等。本文将介绍如何使用Java发送包含Excel附件的邮件。

Java是一种广泛使用的编程语言,其邮件发送功能是强大的。使用Java发送邮件,需要用到JavaMail API和Java Activation Framework(JAF)两个库。

下面是使用Java发送包含Excel附件的邮件的步骤:

1. 导入所需的库文件

首先需要在项目中导入JavaMail API和JAF库文件,这两个文件可以从官网上下载。

2. 创建一个Session

在发送邮件之前,需要创建一个Session对象。Session对象表示JavaMail与邮件服务器之间的通信会话。在创建Session时,需要指定邮件服务器的信息(如主机名、协议等)和身份验证信息(如用户名、密码等)。

Properties props = new Properties();
props.put("mail.smtp.host", "smtp.example.com");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props,
    new javax.mail.Authenticator() {
      protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("user@example.com", "password");
      }
    });

3. 创建一个MimeMessage

MimeMessage是JavaMail API中表示一封电子邮件的类。在创建MimeMessage时,需要指定邮件的发件人、收件人、主题和内容等信息。

MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("user@example.com"));
message.addRecipient(Message.RecipientType.TO, new InternetAddress("recipient@example.com"));
message.setSubject("Test email with Excel attachment");

4. 创建一个Multipart

Multipart是JavaMail API中表示邮件正文和附件的类。在创建Multipart时,需要指定其类型。通常情况下,multipart/mixed表示邮件正文和附件两者都存在的情况。

Multipart multipart = new MimeMultipart("mixed");

5. 创建一个BodyPart

BodyPart是JavaMail API中表示邮件正文和附件中的一个部分的类。在创建BodyPart时,需要设置其内容和类型。例如,可以创建一个包含Excel数据的BodyPart。下面的代码演示了如何从Excel文件中获取数据,并将其写入到一个ByteArrayOutputStream中。

ByteArrayOutputStream baos = new ByteArrayOutputStream();
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet("Sheet1");
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("Hello, world!");
wb.write(baos);
byte[] bytes = baos.toByteArray();
DataSource source = new ByteArrayDataSource(bytes, "application/vnd.ms-excel");
BodyPart attachment = new MimeBodyPart();
attachment.setDataHandler(new DataHandler(source));
attachment.setFileName("example.xlsx");

6. 将所有的BodyPart添加到Multipart中

multipart.addBodyPart(attachment);

7. 将Multipart添加到MimeMessage中

message.setContent(multipart);

8. 发送邮件

最后,使用Transport类的send方法将邮件发送出去。

Transport.send(message);

完整代码示例:

import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class SendEmailWithAttachmentExample {
  public static void main(String[] args) throws Exception {
    // Step 1: Configuring mail properties
    Properties props = new Properties();
    props.put("mail.smtp.host", "smtp.example.com");
    props.put("mail.smtp.auth", "true");
    // Step 2: Creating a session
    Session session = Session.getDefaultInstance(props,
        new javax.mail.Authenticator() {
          protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("user@example.com", "password");
          }
        });
    // Step 3: Creating a message
    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress("user@example.com"));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("recipient@example.com"));
    message.setSubject("Test email with Excel attachment");
    // Step 4: Creating a multipart
    Multipart multipart = new MimeMultipart("mixed");
    // Step 5: Creating a bodypart
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    Workbook wb = new XSSFWorkbook();
    Sheet sheet = wb.createSheet("Sheet1");
    Row row = sheet.createRow(0);
    Cell cell = row.createCell(0);
    cell.setCellValue("Hello, world!");
    wb.write(baos);
    byte[] bytes = baos.toByteArray();
    DataSource source = new ByteArrayDataSource(bytes, "application/vnd.ms-excel");
    BodyPart attachment = new MimeBodyPart();
    attachment.setDataHandler(new DataHandler(source));
    attachment.setFileName("example.xlsx");
    // Step 6: Adding all the bodyparts to multipart
    multipart.addBodyPart(attachment);
    // Step 7: Adding multipart to message
    message.setContent(multipart);
    // Step 8: Sending the message
    Transport.send(message);
    System.out.println("Message sent successfully...");
  }
}

使用Java发送包含Excel附件的邮件十分简单,只需按照上述步骤操作即可。对于需要处理邮件的程序员来说,JavaMail API和JAF库是必不可少的工具。通过它们,我们可以方便地编写Java程序来处理邮件,实现自动发送、接收、删除等功能,提高我们的工作效率和编程水平。

  
  

评论区

请求出错了