IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java mail发送邮件 -> 正文阅读

[Java知识库]java mail发送邮件

支持发送多人、抄送,密送,多个附件

1、引入maven依赖

<dependency>
? ? <groupId>javax.mail</groupId>
? ? <artifactId>mail</artifactId>
? ? <version>1.4.7</version>
</dependency>

2、编写发送邮件工具类

package cn.ccb.qcy.common.utils;

import java.io.File;
import java.util.Date;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
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 javax.mail.internet.MimeUtility;

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;

import lombok.extern.slf4j.Slf4j;

@Component
@Slf4j
public class MailPublish {

?? ?private static final String smtpHost = "smtp.qq.com";// 主机名
?? ?private static final String fromMail = "1047082173@qq.com";// 发件箱
?? ?private static final String password = "mtklxmxinfnrbccg";// 授权码

?? ?/**
?? ? * 发送邮件,支持多个附件
?? ? *?
?? ? * @param toMails ?主收件人,多个收件人用,分隔(必传)
?? ? * @param ccMails ?抄送人,多个收件人用,分隔(非必传)
?? ? * @param bccMails 密送人,多个收件人用,分隔(非必传)
?? ? * @param title ? ?标题(必传)
?? ? * @param content ?内容(支持html文本)(必传)
?? ? * @param path ? ? 单个附件传文件路径,多个附件传文件夹路径 (非必传)
?? ? * @throws Exception
?? ? */
?? ?public static boolean sendMail(String toMails, String ccMails, String bccMails, String title, String content,
?? ??? ??? ?String path) throws Exception {
?? ??? ?boolean result = false;
?? ??? ?try {
?? ??? ??? ?Properties props = new Properties();
?? ??? ??? ?props.setProperty("mail.transport.protocol", "SMTP");
?? ??? ??? ?props.setProperty("mail.host", smtpHost);
?? ??? ??? ?props.setProperty("mail.smtp.auth", "true");
?? ??? ??? ?Authenticator auth = new Authenticator() {
?? ??? ??? ??? ?public PasswordAuthentication getPasswordAuthentication() {
?? ??? ??? ??? ??? ?return new PasswordAuthentication(fromMail, password);
?? ??? ??? ??? ?}
?? ??? ??? ?};
?? ??? ??? ?Session session = Session.getInstance(props, auth);
?? ??? ??? ?Message message = new MimeMessage(session);
?? ??? ??? ?message.setFrom(new InternetAddress(fromMail));
?? ??? ??? ?message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toMails));
?? ??? ??? ?// Cc: 抄送(可选)
?? ??? ??? ?if (StringUtils.isNotBlank(ccMails)) {
?? ??? ??? ??? ?message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccMails));
?? ??? ??? ?}
?? ??? ??? ?// Bcc: 密送(可选)
?? ??? ??? ?if (StringUtils.isNotBlank(bccMails)) {
?? ??? ??? ??? ?message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(bccMails));
?? ??? ??? ?}

?? ??? ??? ?message.setSubject(title);

?? ??? ??? ?// 邮件正文
?? ??? ??? ?MimeBodyPart body = new MimeBodyPart();
?? ??? ??? ?body.setContent(content, "text/html;charset=utf-8");
?? ??? ??? ?// 将正文和附件放入multipart
?? ??? ??? ?Multipart multipart = new MimeMultipart();
?? ??? ??? ?multipart.addBodyPart(body);
?? ??? ??? ?if (StringUtils.isNotBlank(path)) {
?? ??? ??? ??? ?File file = new File(path);
?? ??? ??? ??? ?if (file.isFile()) {// 单个附件
?? ??? ??? ??? ??? ?// 准备附件
?? ??? ??? ??? ??? ?DataSource source = new FileDataSource(new File(path));
?? ??? ??? ??? ??? ?DataHandler handler = new DataHandler(source);
?? ??? ??? ??? ??? ?// 添加附件
?? ??? ??? ??? ??? ?MimeBodyPart attachment = new MimeBodyPart();
?? ??? ??? ??? ??? ?attachment.setDataHandler(handler);
?? ??? ??? ??? ??? ?attachment.setFileName(MimeUtility.encodeText(handler.getName()));
?? ??? ??? ??? ??? ?multipart.addBodyPart(attachment);
?? ??? ??? ??? ?} else if (file.isDirectory()) {
?? ??? ??? ??? ??? ?for (File dFile : file.listFiles()) {
?? ??? ??? ??? ??? ??? ?if (dFile.isFile()) {
?? ??? ??? ??? ??? ??? ??? ?// 准备附件
?? ??? ??? ??? ??? ??? ??? ?DataSource source = new FileDataSource(dFile);
?? ??? ??? ??? ??? ??? ??? ?DataHandler handler = new DataHandler(source);
?? ??? ??? ??? ??? ??? ??? ?// 添加附件
?? ??? ??? ??? ??? ??? ??? ?MimeBodyPart attachment = new MimeBodyPart();
?? ??? ??? ??? ??? ??? ??? ?attachment.setDataHandler(handler);
?? ??? ??? ??? ??? ??? ??? ?attachment.setFileName(MimeUtility.encodeText(handler.getName()));
?? ??? ??? ??? ??? ??? ??? ?multipart.addBodyPart(attachment);
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}

?? ??? ??? ??? ?} else {
?? ??? ??? ??? ??? ?log.info("路径:", file.getAbsolutePath());
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?message.setContent(multipart);
?? ??? ??? ?// 发送邮件
?? ??? ??? ?Transport.send(message);
?? ??? ??? ?result = true;
?? ??? ??? ?System.out.println("发送邮件成功");
?? ??? ?} catch (Exception e) {
?? ??? ??? ?log.error("发送邮件失败", e);
?? ??? ??? ?System.out.println("发送邮件异常:" + e);
?? ??? ??? ?result = false;
?? ??? ?}
?? ??? ?return result;
?? ?}

?? ?/**
?? ? * 校验邮箱格式
?? ? *?
?? ? * @param email
?? ? * @return
?? ? */
?? ?public static boolean checkEmail(String email) {
?? ??? ?boolean flag = false;
?? ??? ?try {
?? ??? ??? ?String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
?? ??? ??? ?Pattern regex = Pattern.compile(check);
?? ??? ??? ?Matcher matcher = regex.matcher(email);
?? ??? ??? ?flag = matcher.matches();
?? ??? ?} catch (Exception e) {
?? ??? ??? ?flag = false;
?? ??? ?}
?? ??? ?return flag;
?? ?}

?? ?public static void main(String[] args) throws Exception {
?? ??? ?String content = "<p>\r\n"
?? ??? ??? ??? ?+ " ? ?<span class=\"content\" style=\"line-height: 26px; display: block; padding: 40px 20px;\">QQ邮箱APP,让高效触手可及。在这里,你可以登录多个邮箱账号、便捷存储微信邮件、多窗口编辑邮件......还有更多功能,等你探索!</span>\r\n"
?? ??? ??? ??? ?+ "</p>\r\n" + "<h1 style=\"font-size: 30px; margin: 0px;\">\r\n" + " ? ?01\r\n" + "</h1>\r\n"
?? ??? ??? ??? ?+ "<h2 style=\"font-size: 20px; margin: 0px 0px 14px;\">\r\n" + " ? ?多帐号登录\r\n" + "</h2>\r\n"
?? ??? ??? ??? ?+ "<p style=\"line-height: 22.1px; margin-bottom: 0px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
?? ??? ??? ??? ?+ " ? ?可以同时登录多个邮箱帐号\r\n" + "</p>\r\n"
?? ??? ??? ??? ?+ "<p style=\"line-height: 22.1px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
?? ??? ??? ??? ?+ " ? ?一站式灵活管理各类邮件信息\r\n" + "</p>\r\n" + "<p>\r\n"
?? ??? ??? ??? ?+ " ? ?<img src=\"https://rescdn.qqmail.com/qqmail/images/manyAccountLoginImg.png\" alt=\"\"/>\r\n"
?? ??? ??? ??? ?+ "</p>\r\n" + "<h1 style=\"font-size: 30px; margin: 0px;\">\r\n" + " ? ?02\r\n" + "</h1>\r\n"
?? ??? ??? ??? ?+ "<h2 style=\"font-size: 20px; margin: 0px 0px 14px;\">\r\n" + " ? ?文件中转站\r\n" + "</h2>\r\n"
?? ??? ??? ??? ?+ "<p style=\"line-height: 22.1px; margin-bottom: 0px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
?? ??? ??? ??? ?+ " ? ?把各类文件存在云端\r\n" + "</p>\r\n"
?? ??? ??? ??? ?+ "<p style=\"line-height: 22.1px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
?? ??? ??? ??? ?+ " ? ?还能便捷导入微信文件,过期烦恼不再有\r\n" + "</p>\r\n" + "<p>\r\n"
?? ??? ??? ??? ?+ " ? ?<img src=\"https://rescdn.qqmail.com/qqmail/images/fileTransferStation.png\" alt=\"\"/>\r\n"
?? ??? ??? ??? ?+ "</p>\r\n" + "<h1 style=\"font-size: 30px; margin: 0px;\">\r\n" + " ? ?03\r\n" + "</h1>\r\n"
?? ??? ??? ??? ?+ "<h2 style=\"font-size: 20px; margin: 0px 0px 14px;\">\r\n" + " ? ?多窗口编辑\r\n" + "</h2>\r\n"
?? ??? ??? ??? ?+ "<p style=\"line-height: 22.1px; margin-bottom: 0px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
?? ??? ??? ??? ?+ " ? ?写邮件、写记事、写日程都可收起为浮窗\r\n" + "</p>\r\n"
?? ??? ??? ??? ?+ "<p style=\"line-height: 22.1px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
?? ??? ??? ??? ?+ " ? ?编辑内容的同时不错过重要邮件\r\n" + "</p>\r\n" + "<p>\r\n"
?? ??? ??? ??? ?+ " ? ?<img src=\"https://rescdn.qqmail.com/qqmail/images/edit.png\" alt=\"\"/>\r\n" + "</p>\r\n"
?? ??? ??? ??? ?+ "<h1 style=\"font-size: 30px; margin: 0px;\">\r\n" + " ? ?04\r\n" + "</h1>\r\n"
?? ??? ??? ??? ?+ "<h2 style=\"font-size: 20px; margin: 0px 0px 14px;\">\r\n" + " ? ?富文本信息一键添加\r\n" + "</h2>\r\n"
?? ??? ??? ??? ?+ "<p style=\"line-height: 22.1px; margin-bottom: 0px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
?? ??? ??? ??? ?+ " ? ?日程邀请、地理位置、记事本、在线文档\r\n" + "</p>\r\n"
?? ??? ??? ??? ?+ "<p style=\"line-height: 22.1px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
?? ??? ??? ??? ?+ " ? ?这些重要内容可以一键加入邮件正文\r\n" + "</p>\r\n" + "<p>\r\n"
?? ??? ??? ??? ?+ " ? ?<img src=\"https://rescdn.qqmail.com/qqmail/images/language.png\" alt=\"\"/>\r\n" + "</p>\r\n"
?? ??? ??? ??? ?+ "<h1 style=\"font-size: 30px; margin: 0px;\">\r\n" + " ? ?05\r\n" + "</h1>\r\n"
?? ??? ??? ??? ?+ "<h2 style=\"font-size: 20px; margin: 0px 0px 14px;\">\r\n" + " ? ?灵活管理日程\r\n" + "</h2>\r\n"
?? ??? ??? ??? ?+ "<p style=\"line-height: 22.1px; margin-bottom: 0px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
?? ??? ??? ??? ?+ " ? ?全新日历功能、日程列表更清晰,重要事件不错过\r\n" + "</p>\r\n"
?? ??? ??? ??? ?+ "<p style=\"line-height: 22.1px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
?? ??? ??? ??? ?+ " ? ?还可以邀请伙伴共同参与,提升合作效率\r\n" + "</p>\r\n" + "<p>\r\n"
?? ??? ??? ??? ?+ " ? ?<img src=\"https://rescdn.qqmail.com/qqmail/images/routin.png\" alt=\"\"/>\r\n" + "</p>\r\n"
?? ??? ??? ??? ?+ "<p>\r\n"
?? ??? ??? ??? ?+ " ? ?<img class=\"bottomErweima\" src=\"https://rescdn.qqmail.com/qqmail/images/emailDownloadErweima.png\" alt=\"\"/>\r\n"
?? ??? ??? ??? ?+ "</p>\r\n" + "<p>\r\n" + " ? ?<br/>\r\n" + "</p>";
?? ??? ?MailPublish.sendMail("1047082173@qq.com,zhangliangqi@git.com.cn",null, null, new Date()+"【测试邮件】", content,
?? ??? ??? ??? ?"C:\\upload\\20220323");
?? ??? ?// System.out.println(checkEmail("104708;2173@qq.com"));
?? ?}
}

功能比较全,细节有待完善。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-06-01 15:02:20  更:2022-06-01 15:05:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:37:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码