基於javaMail的郵件傳送--excel作為附件
基於JavaMail的Java郵件傳送
Author [email protected]
Desc 簡單郵件傳送
Date 2017/12/8
專案中需要根據物料資質的狀況實時給使用者傳送郵件,然後我就簡單學習了SMTP.
電子郵件的在網路中傳輸和網頁一樣需要遵從特定的協議,常用的電子郵件協議包括 SMTP,POP3,IMAP。其中郵件的建立和傳送只需要用到 SMTP協議,所以本文也只會涉及到SMTP協議。SMTP 是 Simple Mail Transfer Protocol 的簡稱,即簡單郵件傳輸協議。
1.匯入jar包javax.mail.jar
特別注意:
- 本測試用例用的 JavaMail 版本是 1.6.0,如果下載到其他版本的 JavaMail 執行時出現問題,請使用 JavaMail 1.6.0 版本再進行嘗試。
- 使用 JavaMail 1.6.0 要求的 JDK 版本必須是 JDK 1.7 以上(建議使用最新版 JDK)。
- 不要直接就完完全全複製我的程式碼,需要 修改一下發送的標題、內容、使用者暱稱,要不然所有人都直接複製我的程式碼傳送,內容一致,郵箱伺服器就可能會檢測到這些內容是垃圾廣告內容,不讓你傳送,會返回錯誤碼,查詢錯誤碼也能查詢到失敗原因。
2.建立一封簡單的電子郵件
首先建立一個 Java 工程,把下載好的 javax.mail.jar
郵件建立步驟:
- 配置連線郵件伺服器的引數( 郵件伺服器SMTP, 是否需要SMTP驗證 )
- 建立一個郵件物件( MimeMessage )
- 設定發件人,收件人 ( 可增加多個收件人,抄送人,密送人 )
- 設定郵件標題, 正文 , 附件等
- 設定顯示的傳送時間
public void sendMail() throws Exception{
System.out.println("sendMailServlet-----start");
//1.建立郵件物件
Properties properties = new Properties();
properties.put("mail.smtp.host" , "mail.hand-china.com"); // 指定SMTP伺服器
properties.put("mail.smtp.auth", "true"); // 指定是否需要SMTP驗證
Session session = Session.getInstance(properties);
MimeMessage mimeMessage =new MimeMessage(session);
/*2.設定發件人
* 其中 InternetAddress 的三個引數分別為: 郵箱, 顯示的暱稱(只用於顯示, 沒有特別的要求), 暱稱的字符集編碼
* */
mimeMessage.setFrom(new InternetAddress("[email protected]","xiuhong","UTF-8"));
/*3.設定收件人
To收件人 CC 抄送 BCC密送*/
mimeMessage.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress("17862***@qq.com","xiuhong","UTF-8"));
mimeMessage.addRecipient(MimeMessage.RecipientType.TO,new InternetAddress("178622***@qq.com","xiuhong","UTF-8"));
/*4.設定標題和內容*/
mimeMessage.setSubject("測試郵件","UTF-8");
mimeMessage.setContent("Test Content:這是一封測試郵件...","text/html;charset=UTF-8");
mimeMessage.setSentDate(new Date());
/*5.儲存郵件*/
mimeMessage.saveChanges();
Transport transport = session.getTransport("smtp"); //獲取郵件傳輸物件
transport.connect("mail.hand-china.com","[email protected]","*******");
transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
transport.close();
System.out.println("sendMailServlet-----end");
}
檢視郵箱客戶端,可以接收到郵件
某些郵箱伺服器要求 SMTP 連線需要使用 SSL 安全認證 (為了提高安全性, 郵箱支援SSL連線, 也可以自己開啟),
如果無法連線郵件伺服器, 仔細檢視控制檯列印的 log, 如果有有類似 “連線失敗, 要求 SSL 安全連線” 等錯誤,需要開啟SSL安全連線,如下程式碼:
/*SMTP 伺服器的埠 (非 SSL 連線的埠一般預設為 25, 可以不新增, 如果開啟了 SSL 連線,需要改為對應郵箱的 SMTP 伺服器的埠, 具體可檢視對應郵箱服務的幫助,
QQ郵箱的SMTP(SLL)埠為465或587, 其他郵箱自行去檢視)*/
final String smtpPort = "465";
props.setProperty("mail.smtp.port", smtpPort);
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.socketFactory.port", smtpPort);
3.建立一封包含圖片和附件的複雜郵件
一封複雜的郵件內容可以看做是由很多節點(或者可以說是“片段”/“部分”/“零件”)組成,文字、圖片、附件等都可以看成是郵件內容中的一個節點。這些節點之間又可以相互關聯組合成一個節點。最終組合成一個大節點就是郵件的正文內容。
比如圖片和文字是關聯關係related,和簡單郵件不同之處在於設定圖片節點和文字節點
/*建立複雜郵件*/
public void sendMail2()throws Exception{
System.out.println("sendMailServlet-----start2");
//1.建立郵件物件
Properties properties = new Properties();
properties.put("mail.smtp.host", "mail.hand-china.com"); // 指定SMTP伺服器
properties.put("mail.smtp.auth", "true"); // 指定是否需要SMTP驗證
Session session = Session.getInstance(properties);
MimeMessage message =new MimeMessage(session);
/*2.設定發件人
* 其中 InternetAddress 的三個引數分別為: 郵箱, 顯示的暱稱(只用於顯示, 沒有特別的要求), 暱稱的字符集編碼
* */
message.setFrom(new InternetAddress("[email protected]","xiuhong","UTF-8"));
/*3.設定收件人
To收件人 CC 抄送 BCC密送*/
message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress("17862****@qq.com","xiuhong","UTF-8"));
message.addRecipient(MimeMessage.RecipientType.TO,new InternetAddress("17862*****@qq.com","xiuhong","UTF-8"));
/*4.設定標題*/
message.setSubject("測試郵件","UTF-8");
//message.setContent("Test Content:這是一封測試郵件...","text/html;charset=UTF-8");
/*5.設定郵件正文*/
//一個Multipart物件包含一個或多個bodypart物件,組成郵件正文
MimeMultipart multipart = new MimeMultipart();
//讀取本地圖片,將圖片資料新增到"節點"
MimeBodyPart image = new MimeBodyPart();
DataHandler dataHandler1 = new DataHandler(new FileDataSource("C:\\Users\\Chen Xiuhong\\Pictures\\suo.png"));
image.setDataHandler(dataHandler1);
image.setContentID("image_suo");
//建立文字節點
MimeBodyPart text = new MimeBodyPart();
text.setContent("這張圖片是��鎖<br/><img src='cid:image_suo'/>","text/html;charset=UTF-8");
//將文字和圖片新增到multipart
multipart.addBodyPart(text);
multipart.addBodyPart(image);
multipart.setSubType("related");//關聯關係
message.setContent(multipart);
message.setSentDate(new Date());
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect("mail.hand-china.com","[email protected]","******");
transport.sendMessage(message,message.getAllRecipients());
transport.close();
System.out.println("sendMailServlet-----end2");
}
下邊傳送一封即有圖片文字,又有多個附件的郵件,設定節點關係為混合關係mixed
public void sendMail2()throws Exception{
System.out.println("sendMailServlet-----start2");
//1.建立郵件物件
Properties properties = new Properties();
properties.put("mail.smtp.host", "mail.hand-china.com"); // 指定SMTP伺服器
properties.put("mail.smtp.auth", "true"); // 指定是否需要SMTP驗證
Session session = Session.getInstance(properties);
MimeMessage message =new MimeMessage(session);
/*2.設定發件人
* 其中 InternetAddress 的三個引數分別為: 郵箱, 顯示的暱稱(只用於顯示, 沒有特別的要求), 暱稱的字符集編碼
* */
message.setFrom(new InternetAddress("[email protected]","xiuhong","UTF-8"));
/*3.設定收件人
To收件人 CC 抄送 BCC密送*/
message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress("178622****@qq.com","xiuhong","UTF-8"));
message.addRecipient(MimeMessage.RecipientType.TO,new InternetAddress("17862****[email protected]","xiuhong","UTF-8"));
/*4.設定標題*/
message.setSubject("測試郵件","UTF-8");
//message.setContent("Test Content:這是一封測試郵件...","text/html;charset=UTF-8");
/*5.設定郵件正文*/
//一個Multipart物件包含一個或多個bodypart物件,組成郵件正文
MimeMultipart multipart = new MimeMultipart();
//讀取本地圖片,將圖片資料新增到"節點"
MimeBodyPart image = new MimeBodyPart();
DataHandler dataHandler1 = new DataHandler(new FileDataSource("C:\\Users\\Chen Xiuhong\\Pictures\\suo.png"));
image.setDataHandler(dataHandler1);
image.setContentID("image_suo");
//建立文字節點
MimeBodyPart text = new MimeBodyPart();
text.setContent("這張圖片是��鎖<br/><img src='cid:image_suo'/>","text/html;charset=UTF-8");
//建立附件節點 讀取本地檔案,並讀取附件名稱
MimeBodyPart file1 = new MimeBodyPart();
DataHandler dataHandler2 = new DataHandler(new FileDataSource("C:\\Users\\Chen Xiuhong\\Pictures\\clothes.png"));
file1.setDataHandler(dataHandler2);
file1.setFileName(MimeUtility.encodeText(dataHandler2.getName()));
MimeBodyPart file2 = new MimeBodyPart();
DataHandler dataHandler3 = new DataHandler(new FileDataSource("C:\\Users\\Chen Xiuhong\\Downloads\\list.xlsx"));
file2.setDataHandler(dataHandler3);
file2.setFileName(MimeUtility.encodeText(dataHandler3.getName()));
//將文字和圖片新增到multipart
multipart.addBodyPart(text);
multipart.addBodyPart(image);
multipart.addBodyPart(file1);
multipart.addBodyPart(file2);
multipart.setSubType("mixed");//混合關係
message.setContent(multipart);
message.setSentDate(new Date());
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect("mail.hand-china.com","[email protected]","*******");
transport.sendMessage(message,message.getAllRecipients());
transport.close();
Boolean isFlag = true;
logger.info(Calendar.getInstance().getTime()+" : # Send mail to "+" success #");
System.out.println("sendMailServlet-----end2");
}
截圖如下:
一般專案中是不會從本地讀取檔案,需要動態生成檔案,這個時候我們可以把生成的檔案寫入inputStream中,然後傳遞到sendmail方法中,來建立附件節點,具體程式碼如下:
MimeBodyPart fileBody = new MimeBodyPart();
DataSource source = new ByteArrayDataSource(inputStream, "application/msexcel");
fileBody.setDataHandler(new DataHandler(source));
fileBody.setFileName(MimeUtility.encodeText(fileName));
4.HAP框架郵件模組詳解
HAP框架提供了郵件賬戶,郵件模板和郵件狀態查詢三個功能, 我們可以在郵件賬戶中配置郵件伺服器,埠號,以及賬戶名和密碼. 在郵件模板中配置好將要傳送的郵件模板,這個模板是HTML格式的,便於我們設定郵件正文格式.下邊詳細介紹每個模組的功能:
1)郵件賬戶配置介面:
SYS_MESSAGE_EMAIL_CONFIG : 存放配置程式碼config_id, 郵件伺服器host, 埠號port, account_id
SYS_MESSAGE_EMAIL_ACCOUNT: 存放郵件賬戶配置Id, 賬戶程式碼,使用者名稱userName 密碼password
在該介面配置了傳送郵件時需要準備的資訊, 方便使用者在前臺介面動態維護, 不需要改變後臺程式碼.
2)郵件模板配置介面
SYS_MESSAGE_TEMPLATE: 存放模板程式碼, 模板型別, 傳送型別(直接傳送/定時傳送), 郵件賬戶(在郵件賬戶介面配置的賬戶資訊) , 郵件標題和內容
其中郵件標題和正文可以設定變數, 後臺在程式碼中可以動態改變這些變數的value 如:
MessageTemplate messageTemplate = messageTemplateMapper.getMsgTemByCode(null,"MQ_EMAIL");
String subject = messageTemplate.getSubject(); //郵件標題
subject = subject.replaceAll("company",companyName);
String content = messageTemplate.getContent(); //郵件content
Date d = new Date();
String newContent=content.replaceAll("time",sdf1.format(d))
.replaceAll("company",companyName)
.replaceAll("expireDate", String.valueOf(count2))
.replaceAll("warnDate", String.valueOf(count1));
5.傳送郵件帶excel附件
業務背景: 以物料為例,將非有效狀態的資質資料以excel附件的形式傳送郵件提醒客戶. 具體步驟如下:
a. 首先要查詢出非有效狀態的資料 —此處不展示
b. 其次將資料寫入Excel中 ( 此處是提前設定好的模板, 只需要在程式碼中讀取模板,寫入資料 )
c. 建立郵件標題和內容 ( 此處是根據框架封裝的模組,在前端維護好,郵件模板和郵件賬戶 )
c. 查詢客戶郵箱 —此處不展示
d. 傳送郵件
在這裡重點介紹,如何將資料寫入excel中,如何將excel新增到郵件中作為附件, 又是如何獲得標題和模板,如何傳送郵件的.資料寫入excel: 讀取模板—>建立工作表—>建立行—>建立單元格—>excel寫入工作流
獲得模板路徑需要通過FreemarkerUtil來獲取相對路徑, 避免專案部署到伺服器上時獲取不到模板路徑, 模板存放位置為:
/*****一個Excel檔案的層次:Excel檔案-> 工作表-> 行-> 單元格 對應到POI中,為:
workbook-> sheet-> row-> cell********/
String path = FreemarkerUtil.class.getClassLoader().getResource("").getPath();
String rootPath = path.substring(1, path.indexOf("/WEB-INF/"))+"/WEB-INF/excel/物料資質預警郵件模板.xlsx";
rootPath=rootPath.replace("/","\\");
FileInputStream template = new FileInputStream(rootPath);
XSSFWorkbook workBook = new XSSFWorkbook(template);
XSSFSheet sheet=workBook.getSheetAt(0);
/*水平垂直居中*/
XSSFCellStyle cellStyle = workBook.createCellStyle();
cellStyle.setAlignment(XSSFCellStyle.VERTICAL_CENTER);
cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
/*設定字型樣式*/
XSSFFont cellFont = workBook.createFont();
cellFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
cellFont.setFontHeight((short) 300);
cellStyle.setFont(cellFont);
/*資料寫入單元格*/
for(int j=0 ; j<gxpMqInfos1.size(); j++){
rowIndex++ ;
XSSFRow row=sheet.createRow(rowIndex);
row.createCell(0).setCellValue(gxpMqInfos1.get(j).getOrganizationCode());
row.createCell(1).setCellValue(gxpMqInfos1.get(j).getOrganizationName());
row.createCell(2).setCellValue(gxpMqInfos1.get(j).getItemNo());
row.createCell(3).setCellValue(gxpMqInfos1.get(j).getItemDesc());
row.createCell(4).setCellValue(""); //產品線
row.createCell(5).setCellValue(gxpMqInfos1.get(j).getQualifTpye());
row.createCell(6).setCellValue(gxpMqInfos1.get(j).getQualifName());
row.createCell(7).setCellValue(gxpMqInfos1.get(j).getCertificateNo());
if("".equals(gxpMqInfos1.get(j).getStartDate()) || gxpMqInfos1.get(j).getStartDate() == null){
row.createCell(8).setCellValue("");
}else{
row.createCell(8).setCellValue(sdf.format(gxpMqInfos1.get(j).getStartDate()));
}
if("".equals(gxpMqInfos1.get(j).getStartDate()) || gxpMqInfos1.get(j).getStartDate() == null){
row.createCell(9).setCellValue("");
}else{
row.createCell(9).setCellValue(sdf.format(gxpMqInfos1.get(j).getEndDate()));
}
row.createCell(10).setCellValue(gxpMqInfos1.get(j).getWarningLeadTime());
row.createCell(11).setCellValue(gxpMqInfos1.get(j).getRemainingDays());
row.createCell(12).setCellValue(gxpMqInfos1.get(j).getAlertStatus());
}
/******workBook寫入輸出流**/
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workBook.write(baos);
baos.flush();
baos.close();
下一步獲取郵件賬戶,郵件標題,內容等
/*******7.4.1)獲取介面維護的郵件模板 郵件標題和內容*/
MessageTemplate messageTemplate = messageTemplateMapper.getMsgTemByCode(null,"MQ_EMAIL");
Long accountId = messageTemplate.getAccountId(); //郵件模板表SYS_MESSAGE_TEMPLATE中的 郵件賬戶ID
/*根據郵件模板表SYS_MESSAGE_TEMPLATE中的郵件賬戶ID accountId 在郵件賬戶表SYS_MESSAGE_EMAIL_ACCOUNT中查詢 賬戶(userName password)*/
MessageEmailAccount messageEmailAccount = emailAccountMapper.selectByPrimaryKey(accountId);
/*根據郵件賬戶表SYS_MESSAGE_EMAIL_ACCOUNT中的configId 在郵件賬戶配置表SYS_MESSAGE_EMAIL_CONFIG中查詢 賬戶配置資訊(host port)*/
MessageEmailConfig messageEmailConfig = messageEmailConfigMapper.selectByPrimaryKey(messageEmailAccount.getConfigId());
String host=messageEmailConfig.getHost(); //郵件伺服器
String userName = messageEmailAccount.getUserName();//傳送人郵件使用者名稱
String password = messageEmailAccount.getPassword();//傳送人郵件密碼
String subject = messageTemplate.getSubject(); //郵件標題
subject = subject.replaceAll("company",companyName);
String content = messageTemplate.getContent(); //郵件content
Date d = new Date();
String newContent=content.replaceAll("time",sdf1.format(d))
.replaceAll("company",companyName)
.replaceAll("expireDate", String.valueOf(count2*productLineList.size()))
.replaceAll("warnDate", String.valueOf(count1*productLineList.size()));
傳送郵件,將郵件標題,內容和附件名稱,以及輸入流傳到郵件工具類中
for(String email:emailList){
/***每次都需要新建輸入流 防止傳送給第二個使用者的時候 郵件內容為空*/
byte[] bt = baos.toByteArray();
InputStream is = new ByteArrayInputStream(bt, 0, bt.length);
MailUtil mailUtil=new MailUtil(host,userName,password);
mailUtil.sendMail(subject, email, newContent ,"物料資質預警.xlsx", is,null);
}
傳送郵件,主要是新增附件:
/*新增附件*/
if(is != null) {
MimeBodyPart fileBody = new MimeBodyPart();
DataSource source = new ByteArrayDataSource(is, "application/msexcel");
fileBody.setDataHandler(new DataHandler(source));
// 中文亂碼問題
fileBody.setFileName(MimeUtility.encodeText(fileName));
multipart.addBodyPart(fileBody);
}
完整的傳送郵件工具類如下:
public class MailUtil {
private String host;
private String user;
private String password;
static Logger logger = LoggerFactory.getLogger(MailUtil.class);
public MailUtil(String host, String user, String password){
this.host = host;
this.user = user;
this.password = password;
}
public boolean sendMail(String subject, String toMail, String content,String fileName, InputStream is,String ccList) {
boolean isFlag = false;
try {
Properties props = new Properties();
props.put("mail.smtp.host", host); // 指定SMTP伺服器
props.put("mail.smtp.auth", "true"); // 指定是否需要SMTP驗證
Session session = Session.getDefaultInstance(props);
session.setDebug(false);
MimeMessage message = new MimeMessage(session);
try {
//指定傳送人
message.setFrom(new InternetAddress(user));
//指定接收人
message.addRecipient(Message.RecipientType.TO, new InternetAddress(toMail));
//指定抄送人
if(ccList!=null || !"".equals(ccList)){
message.addRecipients(Message.RecipientType.CC,ccList);
}
//設定標題
message.setSubject(subject);
message.addHeader("charset", "UTF-8");
/*新增正文內容*/
//一個Multipart物件包含一個或多個bodypart物件,組成郵件正文
Multipart multipart = new MimeMultipart();
MimeBodyPart contentPart = new MimeBodyPart();
contentPart.setText(content,"UTF-8");
contentPart.setHeader("Content-Type", "text/html; charset=UTF-8");
multipart.addBodyPart(contentPart);
/*新增附件*/
if(is != null) {
MimeBodyPart fileBody = new MimeBodyPart();
DataSource source = new ByteArrayDataSource(is, "application/msexcel");
fileBody.setDataHandler(new DataHandler(source));
// 中文亂碼問題
fileBody.setFileName(MimeUtility.encodeText(fileName));
multipart.addBodyPart(fileBody);
}
message.setContent(multipart);
message.setSentDate(new Date());
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(host, user, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
isFlag = true;
logger.info(Calendar.getInstance().getTime()+":#Send mail to"+toMail+"success #");
} catch (Exception e) {
logger.info(Calendar.getInstance().getTime()+":#Send mail to"+toMail+"error #");
logger.info(e.toString());
e.printStackTrace();
isFlag = false;
}
} catch (Exception e) {
e.printStackTrace();
}
return isFlag;
}
效果如下:
相關推薦
基於javaMail的郵件傳送--excel作為附件
基於JavaMail的Java郵件傳送 Author [email protected] Desc 簡單郵件傳送 Date 2017/12/8 專案中需要根據物料資質的狀況實時給使用者傳送郵件,然後
spring boot 郵件傳送(帶附件)
首先開啟QQ郵箱的POP.SMTP伺服器,獲取授權碼。 設定-->賬戶-->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務 pom.xml需要載入三個jar,可以在這個網站裡下載:https://mvnrepository.com/
阿里雲ECS禁用25埠導致JavaMail郵件傳送失敗
專案需要在阿里雲ECS上將每日的簡易彙總資訊通過郵件傳送出來,這裡使用的JavaMail預設的傳送埠是25,而阿里雲出於伺服器安全性考慮偏偏25埠是不開放的,導致郵件伺服器連線超時傳送失敗,報錯如下: MailSendException: Mail server
javaMail郵件傳送
MailAuthenticator.java package com.sunrise.jop.common.mail; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication;
javamail郵件傳送例子
public class EmailTask{ // Session used by the javamail classes private Session session; // List of messages郵件傳送資訊物件列表 private List<
關於javamail郵件傳送地址錯誤和判斷是否傳送成功的問題
使用javamail做傳送郵件功能的一些問題,這裡寫出來給大家分享: 問題1;如何判斷郵件是否傳送成功 使用try catch捕獲傳送郵件程式碼的,如果出現messageException異常,郵件傳送失敗 一下程式碼是我封裝過的複合郵件的傳送功能
javamail 郵件傳送
1.) 是用javamail包; 2) 在發件人郵箱的設定中開啟POP3/SMTP/IMAP import java.util.Properties; import javax.mail.Message; import javax.mail.Session; impor
Java 基於JavaMail的郵件傳送
http://blog.csdn.net/xietansheng/article/details/51673073 http://blog.csdn.net/xietansheng/article/details/51722660 電子郵件的應用非常廣泛,例如在某網站註冊了
基於JavaMail的簡單郵件傳送
電子郵件的應用非常廣泛,例如在某網站註冊了一個賬戶,自動傳送一封歡迎郵件,通過郵件找回密碼,自動批量傳送活動資訊等。但這些應用不可能和我們自己平時發郵件一樣,先開啟瀏覽器,登入郵箱,建立郵件再發送。本文將簡單介紹如何通過 Java 程式碼來建立電子郵件,並連線郵件伺服器傳送郵件。 1. 電子郵件
tiptop自定義傳送郵件及EXCEL附件
很多公司都有這樣的需求,希望系統可以定時郵件傳送一些統計報表給到相關人員,以便做資料分析,或者是希望做單時,傳送單據內容給到相關人員提醒稽核和備案,下面分享一種十分簡單方便的實現方式,javamail+4gl+perl指令碼實現; 1:在aooi999配置好系統標準的jav
基於JavaMail的Java郵件傳送:複雜郵件傳送
一封複雜的郵件內容可以看做是由很多節點(或者可以說是“片段”/“部分”/“零件”)組成,文字、圖片、附件等都可以看成是郵件內容中的一個節點。這些節點之間又可以相互關聯組合成一個節點。最終組合成一個大節點就是郵件的正文內容。 完整程式碼演示: package com.xiets.ja
基於JavaMail的郵件傳送
通過javamail 實現傳送郵件。注意:伺服器有些埠是沒有開放的 需要去開放埠。 有些郵箱是需要開啟對應授權服務的。1.maven依賴:<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api
jenkins+ant+jmeter 使用javamail實現傳送自定義報告 (html報告檔案作為附件傳送)
由於ant-jmeter目前的版本不支援javamail,所以傳送郵件的時候只能藉助jenkins自帶的Email Extension來發送郵件,但是該郵件僅僅是一個最最基礎的通知郵件,未能直接展示用例執行狀況,故考慮使用javamail傳送自
linux下用C編寫的基於smtp的帶附件郵件傳送程式
今天做了一個簡單的stmp郵件傳送的客戶端demo,可以支援帶附件傳送,希望將實現分享一下, 目前測試環境是公司的內部郵箱, 有gmail郵箱測試沒有成功, 可能gmail郵箱需要ssl加密,後續再進行完善吧, 這個demo實現的非常簡單的阻塞的傳送傳送
Java 基於JavaMail實現向QQ郵箱傳送郵件
需求 最近專案在做新聞爬蟲,想實現這個功能:爬蟲某個頁面失敗後,把這個頁面的 url 發到筆者的郵箱。最終實現的效果圖如下,後期可以加上過濾標籤、失敗狀態碼等,方便分類搜尋異常。 開發人員可以根據郵件裡的 url 和堆疊資訊,分析爬蟲失敗的原因。 是
Python可帶附件的郵件傳送
#coding=utf-8import smtplib from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication from emai
JAVA在不基於XML配置檔案的情況下實現郵件傳送功能(郵箱轟炸)
今天要講的是如何用Java程式碼實現簡單郵件傳送和複雜郵件傳送的功能,這裡我使用的是QQ郵箱,你們也可以嘗試使用其他的郵箱哦~ 想實現郵件傳送功能首先郵箱賬號必須要開啟 SMTP 服務,在網頁登入郵箱後點擊設定→賬戶然後下拉,如圖 &nb
[原始碼和報告分享] C#實現的基於SMTP協議的E-MAIL電子郵件傳送客戶端軟體
利用SMTP和Pop協議從底層開發了這個軟體。SMTP全稱是簡單郵件傳輸協議,它專門用來發送郵件用的。Pop全稱是郵局協議,是專門用於接收郵件的。我主要是負責如何實現傳送郵件功能的。MailSend名稱空間是我整個程式的核心。它包括兩個類。在SmtpMail的類中包含了一個SendMail的方法,它
JavaMail實踐--實現郵件傳送
一、介紹 1、主要功能: 實現普通郵件的傳送 實現帶有HTML標籤的內容傳送 實現帶有附件的郵件傳送 2、API JavaMail mail.jar 1.4.5 JAF(版本 1.1.1) activation.jar 3、QQ郵箱的認證
分享一個郵件傳送的java例項(純文字,帶附件,多人抄送,多人密送)
貼程式碼: 1 import javax.activation.DataHandler; 2 import javax.activation.FileDataSource; 3 import javax.mail.*; 4 import javax.mail.internet.*;