JAVA利用MimeMessage实现发送带附件的邮件

1, 配置邮件服务器

// 设置邮件端口信息
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
props.setProperty("mail.smtp.host", "smtp.xxx.com"); // 发件人的邮箱的 SMTP 服务器地址
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.port", "000");
session = javax.mail.Session.getInstance(props);

2,准备邮件内容

//设置端口信息
MimeMessage message = new MimeMessage(session);
// 2. From: 发件人
message.setFrom(new InternetAddress("xxxx@xx.com", "人名", "UTF-8"));
// 3. To: 收件人(可以增加多个收件人、抄送、密送)
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("xxx@xx.com"));

// 4,抄送人
message.addRecipient(MimeMessage.RecipientType.CC, new InternetAddress("xxx@.com"));
       
// 5. Subject: 邮件主题
message.setSubject("xxx标题", "UTF-8");

// 6,设置邮件内容,混合模式
MimeMultipart msgMultipart = new MimeMultipart("mixed");
message.setContent(msgMultipart);

// 7,设置消息正文
MimeBodyPart content = new MimeBodyPart();
msgMultipart.addBodyPart(content);

// 8,设置正文格式
MimeMultipart bodyMultipart = new MimeMultipart("related");
content.setContent(bodyMultipart);

// 9,设置正文内容
MimeBodyPart htmlPart = new MimeBodyPart();
bodyMultipart.addBodyPart(htmlPart);
htmlPart.setContent("邮件内容,html格式", "text/html;charset=UTF-8");

// 10,设置附件
if (CollectionUtils.isNotEmpty(fileList)) {
    fileList.stream().forEach(file -> {
       if (file == null || !file.exists()) {
           return;
       }
       try {
           //设置相关文件
           MimeBodyPart filePart = new MimeBodyPart();
           FileDataSource dataSource = new FileDataSource(file);
           DataHandler dataHandler = new DataHandler(dataSource);
           // 文件处理
           filePart.setDataHandler(dataHandler);
           // 附件名称
           filePart.setFileName(file.getName());
           // 放入正文(有先后顺序,所以在正文后面)
           msgMultipart.addBodyPart(filePart);
       } catch (Exception e) {
           logger.error("send mail file error fileName={}", file.getName(), e);
       }
    });
}

// 11. 设置发件时间
message.setSentDate(new Date());

// 12. 保存文件准备发送
message.saveChanges();

return message;

3,采用线程异步进行邮件发送

emailPool.execute(() -> {
    Transport transport = session.getTransport();
    // a,连接邮箱
    transport.connect(“xxx@xxx.com”, "password");

    // b,第2步中准备的邮件内容
    MimeMessage message = createMimeMessage(mail);

    // c,开始发送邮件
    transport.sendMessage(message, message.getAllRecipients());
});

4,一些引入的类

import java.io.File;
​​​​​​​import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.MessagingException;
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;

 

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以通过JavaMail API来实现发送附件邮件。以下是一个简单的示例代码: ```java import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; public class SendEmailWithAttachment { public static void main(String[] args) { // 收件人电子邮箱 String to = "receiver@example.com"; // 发件人电子邮箱 String from = "sender@example.com"; // 指定发送邮件的主机为 smtp.qq.com String host = "smtp.qq.com"; // 获取系统属性 Properties properties = System.getProperties(); // 设置邮件服务器 properties.setProperty("mail.smtp.host", host); // 设置邮件服务器需要认证 properties.setProperty("mail.smtp.auth", "true"); // 获取默认session对象 Session session = Session.getDefaultInstance(properties, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("sender_email", "sender_email_password"); } }); try { // 创建默认的 MimeMessage 对象 MimeMessage message = new MimeMessage(session); // 设置 From: 头部头字段 message.setFrom(new InternetAddress(from)); // 设置 To: 头部头字段 message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 设置 Subject: 头部头字段 message.setSubject("邮件主题"); // 创建消息部分 BodyPart messageBodyPart = new MimeBodyPart(); // 设置消息部分内容 messageBodyPart.setText("邮件正文"); // 创建多重消息 Multipart multipart = new MimeMultipart(); // 设置文本消息部分 multipart.addBodyPart(messageBodyPart); // 创建附件部分 messageBodyPart = new MimeBodyPart(); // 设置要发送的文件路径 String filename = "path_to_file"; // 创建数据源 DataSource source = new FileDataSource(filename); // 添加附件 messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); multipart.addBodyPart(messageBodyPart); // 发送完整消息 message.setContent(multipart); // 发送消息 Transport.send(message); System.out.println("邮件发送成功!"); } catch (MessagingException mex) { mex.printStackTrace(); } } } ``` 在代码中,需要替换以下内容: - `to`:收件人的电子邮箱地址 - `from`:发件人的电子邮箱地址 - `host`:邮件服务器主机名 - `sender_email`:发件人的电子邮箱账号 - `sender_email_password`:发件人的电子邮箱密码 - `filename`:要发送附件的文件路径 以上代码只是一个简单的示例,实际使用中可能需要进行更多的配置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值