【JavaMail開發】使javamail-1.4.2 傳送郵件時中文附件亂碼或顯示"??"的解決辦法
使javamail-1.4.2 傳送郵件時中文附件亂碼或顯示”??”的解決辦法
首先需要匯入的jar包 :
1. mail-1.4.1.jar 記得不是 javax.mail.jar
程式碼如下:
public class SendEmail {
public static final String user = "[email protected]";// 傳送郵件郵箱
public static final String pwd = "***************";// 傳送郵件郵箱密碼
public static final String smtp = "smtp.163.com" ;// 簡單郵件傳輸協議
public static void main(String[] args) {
List<String> recipients = new ArrayList<String>();// 收件人列表
String recipient = "[email protected]";// 收件人郵箱
recipients.add(recipient);
List<File> FileList = new ArrayList<File>();// 附件列表
File file = new File("D:\\新建 360壓縮 ZIP 檔案.zip");
FileList.add(file);
String title = "郵件主題";
String username = "傳送郵件人";
String text = "郵件文字";
try {
Properties props = System.getProperties();
props.put("mail.smtp.host", smtp);// 這裡預設使用163郵箱
Session session = null ;
if (user != null && pwd != null) {
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.user", user);
props.put("mail.smtp.password", pwd);
} else {
props.put("mail.smtp.auth", "false");
}
session = Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, pwd);
}
});
SMTPMessage message = new SMTPMessage(session);
message.setSubject(title);
message.setFrom(new InternetAddress(user, username));
int receiverCount = recipients.size();
if (receiverCount > 0) {
InternetAddress[] address = new InternetAddress[receiverCount];
for (int i = 0; i < receiverCount; i++) {
address[i] = new InternetAddress((String) recipients.get(i));
}
message.addRecipients(Message.RecipientType.TO, address);
}
MimeMultipart multi = new MimeMultipart();
BodyPart textBodyPart = new MimeBodyPart();
textBodyPart.setText(text);
multi.addBodyPart(textBodyPart);
if (FileList != null) {
for (int i = 0; i < FileList.size(); i++) {
File f = (File) FileList.get(i);
FileDataSource fds = new FileDataSource(f);
BodyPart fileBodyPart = new MimeBodyPart();
fileBodyPart.setDataHandler(new DataHandler(fds));
fileBodyPart.setFileName(MimeUtility.encodeText(f.getName()));// 如果附件有中文通過轉換沒有問題了
multi.addBodyPart(fileBodyPart);
}
}
message.setContent(multi);
message.setSentDate(new Date());
Transport.send(message);
System.out.println("傳送成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
最終效果如下 可正常顯示中文附件名稱
注意事項
- 雖然 mail-1.4.1.jar 和 javax.mail.jar 這兩個包基本功能都一樣 , 但是使用後者時傳送附件總出現問題 ,我是測了半天才發現的這個問題 .
- 以下程式碼要特別注意:
fileBodyPart.setFileName(MimeUtility.encodeText(f.getName()));
相關推薦
【JavaMail開發】使javamail-1.4.2 傳送郵件時中文附件亂碼或顯示"??"的解決辦法
使javamail-1.4.2 傳送郵件時中文附件亂碼或顯示”??”的解決辦法 首先需要匯入的jar包 : 1. mail-1.4.1.jar 記得不是 javax.mail.jar 程式碼如下: public class SendEmail
【iOS開發】記錄一次蘋果2.1大禮包被拒絕3次歷時12天的坑逼上架歷程
##一、場景描述(歷時12天的上架歷程) ##二、解決方案 ###2.1 第一次被拒絕原因(網上傳言的“狗年大禮包”) 發件人 Apple Guideline 2.1 - Information Needed This type of app has
【VC MFC開發】Dll 中對話方塊的控制元件無法接受到按鍵訊息的解決辦法
使用DLL注入到 別的程式中時,發現DLL的視窗過程無法響應WM_CHAR事件,摸索了很久,才找到原因,給碰到同樣問題的人蔘考。 WNDPROC OldComboEditProc = NULL; LRESULT CALLBACK ComboEditProc( HW
【Android開發】app升級報錯,解析包時出現錯誤(華為手機8.0系統)
問題描述: 今天釋出app版本升級,碰到華為手機8.0系統,安裝升級的時候提示,解析包時出現問題。而其他手機都是正常的。而且當我的包沒有經過360加固的時候,也是可以去升級新版本,加固過後就不行了。 這個導致這個問題的原因有很多,我先把我這邊app的問題處理方案介紹給大家
【資料結構】演算法5.1-5.2 三元組順序表-轉置
#include<stdio.h> #include<string.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERRO
【Android實戰】----Android Retrofit2.1.0直接傳送Json字串到伺服器
可以用@body註解(將資料新增到requestbody中)、設定retrofit requestbody的編碼格式為json一、介面類public interface IHttpService { /** * * @param params
ASP.NET開發過程中遇到GET請求中文引數亂碼問題的解決辦法
直接上程式片碼 頁面請求部分 (使用 encodeURI方法轉換中文請求內容 ) : var URL = "http://localhost:8080/index.aspx?keyword=" + encodeURI($("#_keyword").val()); 後臺接
【轉】Poco 1.4.2 HTTPClientSession/HTTPRequest 使用使用代理(proxy)需要註意的一點
方法 xxx and aid csdn 代理 ref cpp logs Poco 1.4.2 HTTPClientSession/HTTPClientSession 在使用代理的時候,request的URI不能包含協議和主機。否則會出錯。 不使用代理的時候,以下代碼能正
【轉載記錄】win7+vs2017+opencv3.4.1+cmake安裝opencv【圖文全過程】
1.下載軟體:vs2017,並安裝 通用windows平臺開發、.net桌面開發、使用C++的桌面開發。(幾個都安裝比較保險,也不會需要太久) 2.下載opencv-3.4.1-vc14_vc15,並點選執行(實際為解壓) 下載地址:https://download.
【Linux開發】GCC 4.8及以上支援記憶體非法訪問檢查
gcc4.8及以上版本支援地址越界,野指標檢查,只需要在編譯時使用-fsanitize=address選項即可,當執行程式時如果訪問非本程式申請的地址就會報錯。[email protected]:/home/ngos/practice> vi nullpoi
【Android開發】動畫彈出PopupWindow並使背景變暗
我們在平常的android應用開發過程中,當應用資料太多太繁雜時,通常都會通過分類篩選讓使用者更好的找到自己想要的資訊。因此利用PopupWindow或Dialog讓使用者快速選擇定位是一個很好的選擇。如我們想在美團上查詢附近有什麼電影院時: 點選按鈕彈出
【模組開發】商品購物車的實現——1.功能分析和效果演示
1.工程說明 前面在學習jsp中cookie內容的時候,我們寫了一個demo:商品瀏覽記錄功能的實現。現在,我們將在前面的那個工程上進行優化開發(主要是懶)。 回顧一下前面的那個工程實現了那些功能:商品資訊顯示頁面,單個商品資訊詳情頁面,近五條瀏覽商品記錄的頁面。 那麼
【Linux開發】OpenCV在ARM-linux上的移植過程遇到的問題4---共享庫中巢狀庫帶路徑【已解決】
【Linux開發】OpenCV在ARM-linux上的移植過程遇到的問題4—共享庫中巢狀庫帶路徑【已解決】 標籤:【Linux開發】 緊接著上一篇,我居然又嘗試了一下編譯opencv,主要是因為由於交叉編譯ARM-Linux,opencv,好像剛開始ma
【iOS開發】CoreText的使用(1)
本文技術點涉及到NSAttrbutedString 簡述 CoreText是用於處理文字和字型的底層技術,它直接和Core Graphics(又名Quartz2D)交流。Quartz是一個2D圖形渲染引擎,能夠處理OS X和iOS的圖形顯示問題 Quartz能夠直接處理
【Android開發】範例4-猜猜寶石放在哪個箱子裡
實現"猜猜寶石放在哪個箱子"的小遊戲:主介面中有三個箱子,單擊其中任意一個箱子,將開啟箱子,顯示裡面是否有寶石,並且將沒有被單擊的箱子設為半透明顯示,被單擊的箱子正常顯示,同時根據單擊的箱子是否有寶石
【Android開發】範例1-詢問是否退出的對話方塊
根據之前學的Android對話方塊技術,來實現下面一個效果:介面有一個"退出"按鈕,按下之後會彈出一個詢問是否退出的提示對話方塊,單擊"不"按鈕,不退出遊戲,單擊"是的"按鈕,將退出遊戲。 接下來實現
【內核配置】十、Linux3.4.2開發板環境搭建
part oot board arm-linux 啟動 搭建 服務器 arm uimage 主 機:VMWare--Ubuntu-16.04.2-x64-100ask 開發板:JZ2440--256M NandFlash, 2M NorFlash, 64M
【java框架】MyBatis-Plus(1)--MyBatis-Plus快速上手開發及核心功能體驗
1.MyBatis-Plus入門開發及配置 1.1.MyBatis-Plus簡介 MyBatis-Plus(簡稱 MP)是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。 MyBatis-Plus易於學習,官網提供了基於SpringBoot的中文文件,社
【遊戲開發】淺談遊戲開發中常見的設計原則
依賴關系 unity 說過 srp des log gof https 類繼承 俗話說得好:“設計模式,常讀常新~”。的確,每讀一遍設計模式都會有些新的體會和收獲。馬三不才,才讀了兩遍設計模式(還有一遍是在學校學的),屬於菜鳥級別的。這次準備把閱
【Web開發】Mean web開發 01-Express實現MVC模式開發
http scripts send javascrip 模板引擎 指令 開發環境 depend filter 簡介 Mean是JavaScript的全棧開發框架。更多介紹 用Express實現MVC模式開發是Mean Web全棧開發中的一部分。 Express 是一個基於