Java實(shí)現(xiàn)發(fā)送郵件并攜帶附件
本文實(shí)例為大家分享了Java實(shí)現(xiàn)發(fā)送郵件并攜帶附件的具體代碼,供大家參考,具體內(nèi)容如下
一、 郵件服務(wù)器與傳輸協(xié)議
要在網(wǎng)絡(luò)上實(shí)現(xiàn)郵件功能,必須要有專門的郵件服務(wù)器。主要負(fù)責(zé)接收用戶投遞過來的郵件,并把郵件投遞到郵件接收者的電子郵箱中。
- SMTP服務(wù)器地址:一般是 smtp.xxx.com,163郵箱是smtp.163.com,qq郵箱是smtp.qq.com。
- SMTP協(xié)議
通常把處理用戶smtp請(qǐng)求(郵件發(fā)送請(qǐng)求)的服務(wù)器稱之為SMTP服務(wù)器(郵件發(fā)送服務(wù)器)。
- POP3協(xié)議
通常把處理用戶pop3請(qǐng)求(郵件接收請(qǐng)求)的服務(wù)器稱之為POP3服務(wù)器(郵件接收服務(wù)器)。
二、 在發(fā)送人郵箱中開啟POP3/SMTP服務(wù)
qq郵箱
登錄qq郵箱后 → 設(shè)置 → 賬戶 → POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù) → POP3/SMTP服務(wù)點(diǎn)擊開啟(需要綁定手機(jī)號(hào)發(fā)送驗(yàn)證短信)→ 獲得了一串授權(quán)碼(后續(xù)發(fā)送郵件需要)
163郵箱
登錄163郵箱 → 設(shè)置 → POP3/SMTP/IMAP → POP3/SMTP服務(wù) 點(diǎn)擊開啟(需要郵箱app認(rèn)證) → 獲取到一串授權(quán)碼
三、 導(dǎo)入依賴
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.5.0-b01</version>
</dependency>
四、 編寫工具類
import lombok.extern.slf4j.Slf4j;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;
import java.util.Date;
import java.util.Properties;
@Slf4j
public class EmailUtils {
public static final String SenderEmail = "xxxxx@qq.com";//發(fā)送人郵箱
public static final String senderCode = "ixxxxxxxxxxxdcd";//發(fā)送人郵箱授權(quán)碼
public static final String emailSMTPHost = "smtp.qq.com";//服務(wù)器地址
public static final String receiveMailAccount = "xxxxx@qq.com";//收件人郵箱
public static final String ccMailAccount = "xxxxx@163.com";//抄送人郵箱
public static final String bccmailAccount = "xxxxxx@qq.com";//密送人郵箱
/*發(fā)送郵件*/
public static void sendMail() {
try {
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");// 使用的協(xié)議
props.setProperty("mail.smtp.host", emailSMTPHost);// 發(fā)件人的郵箱的SMTP服務(wù)器地址
props.setProperty("mail.smtp.auth", "true");// 需要請(qǐng)求認(rèn)證
Session session = Session.getInstance(props);//得到會(huì)話對(duì)象實(shí)例
session.setDebug(false);//是否打印詳細(xì)日志
MimeMessage message = createMimeMessage(session);//獲取郵件對(duì)象(封裝了一個(gè)方法)
Transport transport = session.getTransport();
transport.connect(SenderEmail, senderCode);//連接發(fā)送人的郵箱賬戶
// 6. 發(fā)送郵件, 發(fā)到所有的收件地址, message.getAllRecipients() 獲取到的是在創(chuàng)建郵件對(duì)象時(shí)添加的所有收件人, 抄送人, 密送人
transport.sendMessage(message, message.getAllRecipients());
// 7. 關(guān)閉連接
transport.close();
log.info("郵件發(fā)送成功");
} catch (Exception e) {
log.error("發(fā)送郵件失敗");
}
}
public static MimeMessage createMimeMessage(Session session) throws Exception {
// 1. 創(chuàng)建一封郵件
MimeMessage message = new MimeMessage(session);
// 2. From: 發(fā)件人
message.setFrom(new InternetAddress(SenderEmail, "發(fā)件人", "UTF-8"));
// 3. 設(shè)置收件人、抄送人、密送人
//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(ccMailAccount, "抄送人", "UTF-8"));
message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress(bccmailAccount, "密送人", "UTF-8"));
// 4. Subject: 郵件主題
message.setSubject("這是郵件的主題", "UTF-8");
// 5. Content: 郵件正文(可以使用html標(biāo)簽)
message.setContent("這是郵件正文", "text/html;charset=UTF-8");
*****************以下部分為攜帶附件代碼,不需要攜帶附件的可刪除星號(hào)圈起的部分*************************
MimeMultipart multipart = new MimeMultipart();
MimeBodyPart file1 = new MimeBodyPart();
DataHandler handler = new DataHandler(new FileDataSource("文件路徑"));
file1.setDataHandler(handler);
//對(duì)文件名進(jìn)行編碼,防止出現(xiàn)亂碼
String fileName = MimeUtility.encodeWord("文件名", "utf-8", "B");
file1.setFileName(fileName);
multipart.addBodyPart(file1);
message.setContent(multipart);
*******************************************************************************************
// 6. 設(shè)置發(fā)件時(shí)間
message.setSentDate(new Date());
// 7. 保存設(shè)置
message.saveChanges();
return message;
}
}
五、最后
在同時(shí)設(shè)置正文和附件時(shí),導(dǎo)致發(fā)送郵件后正文不顯示,請(qǐng)大佬們指點(diǎn)。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springBoot Maven 剔除無用的jar引用問題記錄
這篇文章主要介紹了springBoot Maven 剔除無用的jar引用問題記錄,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-12-12
Spring Boot 快速搭建微服務(wù)框架詳細(xì)教程
SpringBoot是為了簡化Spring應(yīng)用的創(chuàng)建、運(yùn)行、調(diào)試、部署等而出現(xiàn)的,使用它可以做到專注于Spring應(yīng)用的開發(fā),而無需過多關(guān)注XML的配置。本文重點(diǎn)給大家介紹Spring Boot 快速搭建微服務(wù)框架詳細(xì)教程,需要的的朋友參考下吧2017-09-09
Elasticsearch查詢之Match Query示例詳解
這篇文章主要為大家介紹了Elasticsearch查詢之Match查詢示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Java中連接Mongodb進(jìn)行增刪改查的操作詳解
MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫,由C++語言編寫,旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案,本文給大家介紹了Java中連接Mongodb進(jìn)行操作,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-06-06
IDEA 的基本介紹使用及斷點(diǎn)調(diào)試技巧
IDEA 是 JetBrains 公司的產(chǎn)品,總部位于捷克的首都布拉格,IDEA在業(yè)界被公認(rèn)為最好的 Java 開發(fā)工具,今天通過本文給大家介紹IDEA 的基本介紹使用及斷點(diǎn)調(diào)試技巧,感興趣的朋友跟隨小編一起看看吧2021-11-11
SpringBoot全局異常處理機(jī)制和配置攔截器方式
這篇文章主要介紹了SpringBoot全局異常處理機(jī)制和配置攔截器方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

