java实现发送邮件附件功能

记录一下在java中发送邮件的实现方式,下面这个工具类是根据在网上查阅的资料自己整理出来的。

类中只有两个方法:1.第一个就是普通的发送文本内容邮件的方法。2.第二个是能发送附件邮件的方法。如果还想实现更复杂的可以自行百度。

一、pom依赖

1.maven项目

<dependencies>
    <!-- JavaMail API -->
    <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>javax.mail</artifactId>
        <version>1.6.2</version>
    </dependency>
    
    <!-- JavaBeans Activation Framework (JAF) -->
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>
</dependencies>


上述依赖项包含了JavaMailAPI和JavaBeans Activation Framework(JAF)。JavaMail API用于发送和接收电子邮件,而JAF用于处理邮件附件的类型和编码。

2.SpringBoot项目

<dependencies>
    <!-- Spring Boot Mail Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
</dependencies>


要在Spring Boot项目中发送电子邮件,你可以使用Spring Boot提供的spring-boot-starter-mail依赖项。该依赖项集成了JavaMail API,并提供了更方便的配置和使用方式。上述依赖项将自动引入Spring Boot Mail Starter,并解决其所需的传递依赖关系。它包含了JavaMail API以及Spring Boot中发送电子邮件所需的其他组件。

二、代码

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;
import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.Properties;
public class MailUtil{
    
    // 发件人邮箱的邮件服务器地址(SMTP)
    // 必须准确,不同邮件服务器地址不同,QQ邮箱的 SMTP 服务器地址为: smtp.qq.com
    public static String myEmailSMTPHost = "smtp.qq.com";

    /**
     * 发送纯文本邮件
     * 
     * @param mailTitle 邮件主题
     * @param content 邮件内容
     * @param sendMail 发件人邮箱地址
     * @param sendName 发件人姓名
     * @param receiveMail 收件人
     * @param sendMailPassword 发送人邮箱密码
     *            某些邮箱服务器为了增加邮箱本身密码的安全性,给SMTP客户端设置了独立密码(有的邮箱称为“授权码”),
     *            对于开启了独立密码的邮箱,这里的邮箱密码必需使用这个独立密码(授权码)。
     * 
     * @return
     * @throws Exception
     */

     public static void sendEmail(String mailTitle, String content, String sendMail, String sendName,
                   String receiveMail, String sendMailPassword)
 throws Exception
{
         Properties p = new Properties();
         p.setProperty("mail.transport.protocol""smtp");// 使用的协议
         p.setProperty("mail.smtp.host", myEmailSMTPHost);
         p.setProperty("mail.smtp.localhost""localhost");// 不加的话在linux报错:501 syntax:ehlo hostname
         p.setProperty("mail.smtp.auth""true");// 需要请求认证
         
         Session session = Session.getInstance(p);
         //设置为debug模式,可以查看详细的发送log
         session.setDebug(true);
         
         MimeMessage message = new MimeMessage(session);
         //发件人
         message.setFrom(new InternetAddress(sendMail, sendName, "UTF-8"));

         //收件人
         message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, receiveMail, "UTF-8"));

         //邮件主题
         message.setSubject(mailTitle, "UTF-8");

         //邮件正文
         message.setContent(content, "text/html;charset=UTF-8");

         //设置显示的发件时间
         message.setSentDate(new Date());

         //保存前面的设置
         message.saveChanges();

         //根据session获取邮件传输对象
         Transport transport = session.getTransport();
         //连接邮箱服务器
         transport.connect(sendMail, sendMailPassword);
         //发送邮件到所有的收件地址
         transport.sendMessage(message, message.getAllRecipients());
         transport.close();
     }

      //和上边方法基本相同,只不过可以添加附件发送邮件
      public static void sendEmailWithFile(String mailTitle, String content, String sendMail, String sendName,
                   List<String> receiveMailList, String sendMailPassword)
 throws Exception
{
         Properties p = new Properties();
         p.setProperty("mail.transport.protocol""smtp");
         p.setProperty("mail.smtp.host", myEmailSMTPHost);
         //p.setProperty("mail.smtp.localhost", "localhost");//不加的话在linux报错:501 syntax:ehlo hostname
         p.setProperty("mail.smtp.auth""true");
   
         Session session = Session.getInstance(p);
         //设置为debug模式,可以查看详细的发送log
         session.setDebug(true);
         
         MimeMessage message = new MimeMessage(session);
         //发件人
         message.setFrom(new InternetAddress(sendMail, sendName, "UTF-8"));

         //收件人
         for(String receiveAddress : receiveMailList){
             message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveAddress, receiveAddress, "UTF-8"));
         }

         //邮件主题
         message.setSubject(mailTitle, "UTF-8");

         //向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
         MimeMultipart multipart = new MimeMultipart();
         //设置邮件的文本内容
         MimeBodyPart contentPart = new MimeBodyPart();
         contentPart.setContent(content, "text/html;charset=UTF-8");
         multipart.addBodyPart(contentPart);
         //添加附件
         MimeBodyPart filePart = new MimeBodyPart();
         DataSource source = new FileDataSource("E:\file_path" + File.separator + "附件.xlsx");
         //添加附件的内容
         filePart.setDataHandler(new DataHandler(source));
         //添加附件的标题
         filePart.setFileName(MimeUtility.encodeText("附件.xlsx"));
         multipart.addBodyPart(filePart);
         multipart.setSubType("mixed");
         //将multipart对象放到message中
         message.setContent(multipart);

         //设置显示的发件时间
         message.setSentDate(new Date());

         //保存前面的设置
         message.saveChanges();

         //根据session获取邮件传输对象
         Transport transport = session.getTransport();
         //连接邮箱服务器
         transport.connect(sendMail, sendMailPassword);
         //发送邮件到所有的收件地址
         transport.sendMessage(message, message.getAllRecipients());
         transport.close();
     }
}



另外,邮件的内容(content)也可以通过拼接html代码来发送文本内容格式是表格的邮件,如下:

content = "<html><head><head><body><table>" +
          "<tr>" + 
          "<td>第一个单元格</td>" +
          "<td>第二个单元格</td>" +
          "</tr>" + 
          "</table></body></html>"


按上边这个content发送的邮件内容将展示为一个表格。

好了,有不同意见的欢迎留言哈~

出处:https://blog.csdn.net/sfh2018/article/details/104652557


原文始发于微信公众号(知识追寻者):java实现发送邮件附件功能

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/291573.html

(0)
葫芦侠五楼的头像葫芦侠五楼

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!