1. 程式人生 > >【JavaMail開發】使javamail-1.4.2 傳送郵件時中文附件亂碼或顯示"??"的解決辦法

【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(); } } }

最終效果如下 可正常顯示中文附件名稱

這裡寫圖片描述

注意事項

  1. 雖然 mail-1.4.1.jar 和 javax.mail.jar 這兩個包基本功能都一樣 , 但是使用後者時傳送附件總出現問題 ,我是測了半天才發現的這個問題 .
  2. 以下程式碼要特別注意:
    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 是一個基於