21xrx.com
2024-12-22 21:30:12 Sunday
登录
文章检索 我的文章 写文章
Java发送包含Excel附件的邮件
2023-07-05 07:22:50 深夜i     --     --
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程序来处理邮件,实现自动发送、接收、删除等功能,提高我们的工作效率和编程水平。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复