分享做项目时写的邮件的工具类:

一、准备工作:

1.使用java邮箱发送邮件,需要在邮箱设置中申请开通 POP3/SMTP 服务,以163邮箱为例:

在网页上打开登录163邮箱,点击设置-POP3/SMTP/IMAP。

2.点击开启IMAP/SMTP服务。

3.用手机扫二维码发送短信。

4.发送完短信后,点击“我已发送”,会得到授权密码,记得保存,只会显示一次。

准备工作到此完成。

二、在项目中配置邮件发送功能

1.引入邮件的maven依赖

2.编写发送邮件工具类

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Properties;/*** @author qingdan.li* @date 2022/8/11 11:43*/
public class MailUtil {private static final Logger log = LoggerFactory.getLogger(SendMailUtils.class);private final static String SenderEmail = "tpai18522947960@163.com";//开启授权码的邮箱private final static String senderCode = "OAYMRZLWIYSWUYZD";//授权码public static final String emailSMTPHost = "smtp.163.com";//服务器地址/*** 发送邮件** @param receiveMailAccount 收件人* @param ccMailAccounts     抄送人* @param bccMailAccount     密送人* @param subject            主题* @param content            内容* @param filePath           附件路径* @param fileName           附件名*/public static void sendMail(String receiveMailAccount, List<String> ccMailAccounts, String bccMailAccount,String subject, String content, String filePath, String fileName) {try {Properties props = new Properties();props.setProperty("mail.transport.protocol", "smtp");// 使用的协议props.setProperty("mail.smtp.host", emailSMTPHost);// 发件人的邮箱的SMTP服务器地址props.setProperty("mail.smtp.auth", "true");// 需要请求认证;props.setProperty("mail.smtp.timeout", "60000");props.setProperty("mail.smtp.ssl.enable", "true");Session session = Session.getInstance(props);//得到会话对象实例session.setDebug(true);//是否打印详细日志MimeMessage message = createMimeMessage(session, receiveMailAccount, ccMailAccounts, bccMailAccount, subject, content, filePath, fileName);//获取邮件对象(封装了一个方法)Transport transport = session.getTransport();transport.connect(emailSMTPHost, "xxxx", senderCode);//连接发送人的邮箱账户// 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人transport.sendMessage(message, message.getAllRecipients());// 7. 关闭连接transport.close();log.info("邮件发送成功");} catch (Exception e) {log.error("发送邮件失败");}}/*** 创建邮件** @param session 会话* @param receiveMailAccount 收件人* @param ccMailAccounts 抄送人* @param bccMailAccount 密送人* @param subject 主题* @param content 内容* @param filePath 附件路径* @param fileName 附件名* @return * @throws Exception*/public static MimeMessage createMimeMessage(Session session, String receiveMailAccount, List<String> ccMailAccounts, String bccMailAccount,String subject, String content, String filePath, String fileName) throws Exception {// 1. 创建一封邮件MimeMessage message = new MimeMessage(session);// 2. From: 发件人message.setFrom(new InternetAddress(SenderEmail, "发件人", "UTF-8"));// 3. 设置收件人、抄送人、密送人//MimeMessage.RecipientType.TO:收件类型;MimeMessage.RecipientType.CC:抄送类型;MimeMessage.RecipientType.BCC:密送类型message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMailAccount, "收件人", "UTF-8"));message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress(getAddress(ccMailAccounts), "抄送人", "UTF-8"));message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress(bccMailAccount, "密送人", "UTF-8"));// 4. Subject: 邮件主题message.setSubject(subject, "UTF-8");// 5. Content: 邮件正文(可以使用html标签)message.setContent(content, "text/html;charset=UTF-8");MimeMultipart multipart = new MimeMultipart();MimeBodyPart file = new MimeBodyPart();DataHandler handler = new DataHandler(new FileDataSource(filePath));file.setDataHandler(handler);//对文件名进行编码,防止出现乱码String document = MimeUtility.encodeWord(fileName, "utf-8", "B");file.setFileName(document);multipart.addBodyPart(file);message.setContent(multipart);// 6. 设置发件时间message.setSentDate(new Date());// 7. 保存设置message.saveChanges();return message;}//邮箱地址转换private static String getAddress(List<String> mailList) throws AddressException {Address[] address = new InternetAddress[mailList.size()];for (int i = 0; i < mailList.size(); i++) {address[i] = new InternetAddress(mailList.get(i));}return Arrays.toString(address);}}

ok,写完收工,自己做测试吧,有问题留言哦~

MailUtil-Java发送邮件工具类相关推荐

  1. java发送邮件工具类的编写直接复制版(兼补上篇邮箱改密发送邮件)

    上篇关于如何通过邮箱发送修改密码的链接的教程我取的名字叫作<炫酷又实用的发送邮箱链接修改密码保姆级教程>,文章发表之后发现炫酷呢?炫酷在那里?除了几段乏味的代码之外,什么也没有啊,甚至连怎 ...

  2. Java发送邮件工具类(可发送匿名邮件)

    为什么80%的码农都做不了架构师?>>>    为了不想到处去下载jar包,我使用maven为我管理,在开始编码这些东西之前,我们先在pom.xml文件中<dependenci ...

  3. Hutool Java常用工具类汇总

    简介 Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以"甜甜的". Hu ...

  4. jmail组件 java_Jmail发送邮件工具类分享

    import lombok.extern.slf4j.Slf4j; import java.util.Properties; import javax.mail.*; import javax.mai ...

  5. day037 listener Timer 发送邮件工具类

    1 WEB监听器 1.1 概述 Web监听器就是一个组件,可以对其他的内容,进行监视控制,当被监视的内容,发生指定的行为时,web监听器就可以给出相应的处理方案. 事件源:被监视的内容. 监听器:监视 ...

  6. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  7. Java并发工具类(闭锁CountDownLatch)

    并发工具类系列: Java并发工具类(闭锁CountDownLatch) Java并发工具类(栅栏CyclicBarrier) Java并发工具类(信号量Semaphore) 闭锁是一种同步工具类,可 ...

  8. java日期工具类DateUtil

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. DateUtil类 [java] view plain copy package com.util; ...

  9. Java常用工具类StringUtils的常用方法

    Java常用工具类StringUtils的常用方法 1.该工具类是用于操作Java.lang.String类的. 2.StringUtils类在操作字符串是安全的,不会报空指针异常,也正因此,在操作字 ...

最新文章

  1. linux java内存分析_Java内存分析利器MAT使用详解
  2. Linux运维工程师发展前景
  3. 杭电多校(六)2019.08.07--暑假集训
  4. 认识哈希函数(散列函数)
  5. android录音功能的实现
  6. 2 中ascii函数_C语言编程预备知识--字节、ASCII
  7. java中你知道的这四种代码块吗?
  8. linux判断内存并释放,linux 内存清理/释放命令
  9. IO中同步、异步与阻塞、非阻塞的区别
  10. python骗局-如何识破python小课骗局_怎样选择学校呢
  11. android webkit案例,移动互联网时代--Android上的一个例子
  12. labview混合编程学习
  13. 营养保健品公司网站建设策划书
  14. 广东工业大学化学工程考研情况
  15. mini-itx PC:推测Intel D525MW支持UEFI
  16. APP推广有哪些渠道
  17. eversync safari_Eversync:书签同步插件
  18. canvas效果案例:安卓机器人
  19. 【操作系统基础】文件管理系统(二)
  20. oracle 视图怎样修改,ORACLE视图的修改

热门文章

  1. 国产沁恒CH32F103C8T6使用指南
  2. 服务器系统大容量硬盘的分区方式,大容量硬盘分区窍门:合理分区技巧
  3. Python爬虫实战:世纪佳缘爬取近6万条小姐姐数据!脱单的有望!
  4. celery介绍、安装和使用
  5. 计算机音乐制作专业艺考,音乐艺考的专业有哪些
  6. internal:gem_prelude:4:in `require': cannot load such file -- rubygems.rb (LoadError) from intern
  7. GBase 8s SQL 指南:教程———7修改数据
  8. C++优雅的捕获处理crash
  9. PPP及pap和chap
  10. linux启动nginx命令行_Linux环境下启动、停止、重启nginx