發送郵件附件名稱亂碼問題


公司項目上線都非要弄個什么數據核對,每天下班都要跑好多的規則sql,這不是重點,重點是跑完的結果還要郵件的形式發送給指定領導,
這不就是意味着一定要加班了嗎?必須要有對策!有同事提議不如寫一個發送郵件的程序得了,我同意了,所以這個類就在百度的幫助下誕生了。
哪里都挺成功的,測試的時候也OK了。萬萬沒想到呀!讓萬惡的別亂碼給陰了(發送附件如果附件有名稱有中文就會亂碼),出現問題最靠的住的還得是百度。
一行代碼輕松搞定,開心。



  1 package com.heyt.util;
  2 
  3 import javax.activation.DataHandler;
  4 import javax.activation.DataSource;
  5 import javax.activation.FileDataSource;
  6 import javax.mail.*;
  7 import javax.mail.internet.*;
  8 import java.io.UnsupportedEncodingException;
  9 import java.util.Properties;
 10 
 11 
 12 public class JavaEMail {
 13 
 14    private Properties  props;//用來存儲一些郵件的屬性,設置幾個等待時間什么的。
 15    private String[] params = new String[2];//用來存儲發件人和授權碼,要注意的是授權碼和密碼還不是一回事,這個我就吃了虧
 16    //public JavaEMail(){}
 17 
 18     /**
 19      * @param transportType 郵件發送方式
 20      * @param serviceType 服務器類型
 21      * @param servicePort 服務器端口號
 22      * @param fromEMail   發件人
 23      * @param authPassword 授權碼
 24      */
 25    public JavaEMail(String transportType,String serviceType,String  servicePort,String fromEMail ,String authPassword)
 26    {
 27 
 28        //       // 獲取默認的 Session 對象。
 29        // 1.創建一個程序與郵件服務器會話對象 Session
 30        Properties tProps = new Properties();
 31        tProps.put("mail.transport.protocol", transportType);//發件的默認方式是不是都是SMTP?
 32        tProps.put("mail.smtp.host",serviceType );//smtp.exmail.qq.com 這個例子是qq的企業郵箱的服務器
 33        tProps.put("mail.smtp.port", servicePort);//一般默認都是 25
 34        // 指定驗證為true
 35        tProps.setProperty("mail.smtp.auth", "true");
 36        // props.setProperty("mail.smtp.timeout","1000");
 37        tProps.put("mail.smtp.timeout", 100000);//這幾個參數很有必要
 38        tProps.put("mail.smtp.connectiontimeout", 100000);//這幾個參數很有必要
 39        tProps.put("mail.smtp.writetimeout",100000);//這幾個參數很有必要
 40        props = (Properties) tProps.clone();
 41        params[0]=fromEMail;//如果可以最好弄一個加密的方式
 42        params[1]=authPassword;//如果可以最好弄一個加密的方式
 43    }
 44 
 45     /***
 46      *
 47      * @param mailTO    收件人集合,這個不可以為空,哈哈哈
 48      * @param mailCC    抄送人集合,可以傳null,若果是null就當做沒有抄送
 49      * @param contentTop 郵件標題,可以傳null,默認值是 "您有,一封郵件待查收"
 50      * @param contentText 郵件正文,可以傳null,默認值是 "各位好:"
 51      * @param fileName    附件的絕對地址,可以傳null,如果是null就默認當做不添加附件
 52      */
 53     public  boolean sendEmail(String[] mailTO,String[] mailCC,String contentTop,String contentText,String fileName)
 54     {
 55         //收件人不能是空
 56         if (mailTO == null || mailTO.equals(""))
 57             return false;
 58         // 驗證賬號及密碼,密碼需要是第三方授權碼,似乎qq企業郵件的授權碼就是密碼。
 59         Authenticator auth = new Authenticator() {
 60             @Override
 61             public PasswordAuthentication getPasswordAuthentication() {
 62                 return new PasswordAuthentication(params[0], params[1]);
 63             }
 64         };
 65         Session session = Session.getInstance(props, auth);//居然發現了一個final的類,和String一樣,哈哈
 66 
 67         try{
 68             // 創建默認的 MimeMessage 對象。
 69             MimeMessage message = new MimeMessage(session);
 70 
 71             Address addressesTO[] = new Address[mailTO.length];
 72 
 73             //循環收件人
 74             for (int i = 0; i < mailTO.length ; i++)
 75             {
 76                 addressesTO[i] = (Address) new InternetAddress(mailTO[i]).clone();
 77             }
 78             message.addRecipients(Message.RecipientType.TO,addressesTO);//設置收件人
 79             //對抄送人進行處理
 80             if( ! (mailCC == null|| mailCC.equals(""))) {
 81                 Address addressesCC[] = new Address[mailCC.length];
 82                 //循環抄送人
 83                 for (int i = 0; i < mailCC.length; i++)
 84                 {
 85                     addressesCC[i] = (Address) new InternetAddress(mailCC[i]).clone();
 86                 }
 87                 message.addRecipients(Message.RecipientType.CC, addressesCC);//設置抄送人
 88             }
 89             // Set Subject: 頭字段
 90             if(contentTop == null || contentTop.equals(""))
 91             {
 92                 message.setSubject("您有,一封郵件待查收");
 93             }else {
 94                 message.setSubject(contentTop);
 95             }
 96             // 創建消息部分
 97             BodyPart messageBodyPart = new MimeBodyPart();
 98             // 消息
 99             if(contentText == null || contentText.equals("")){
100                 messageBodyPart.setText("各位好:");
101             }else{
102                 messageBodyPart.setText(contentText);
103             }
104             // 創建多重消息
105             Multipart multipart = new MimeMultipart();
106             // 設置文本消息部分
107             multipart.addBodyPart(messageBodyPart);
108            // String tFileName = fileName;
109             //目前沒有對目錄做校驗,后續再添加吧
110             if (!( fileName == null || fileName.equals(""))){
111                 // 附件部分
112                 messageBodyPart = new MimeBodyPart();
113                 DataSource source = new FileDataSource(fileName);
114                 messageBodyPart.setDataHandler(new DataHandler(source));
115          //就只這行可以防止亂碼
116                 String newFileName =  MimeUtility.encodeText(source.getName(),"utf-8",null);
117                 messageBodyPart.setFileName(newFileName);
118                 multipart.addBodyPart(messageBodyPart);
119             }
120 
121             // 發送完整消息
122             message.setContent(multipart,"text/html;charset=utf-8");
123             //   發送消息
124             Transport.send(message);
125 
126             System.out.println("Sent message successfully....");
127 
128         }catch (MessagingException mex) {
129             mex.printStackTrace();
130         } catch (UnsupportedEncodingException e) {
131             e.printStackTrace();
132         }
133         return true;
134     }
135     public static void main(String[] args) {
136         String[] mailTO = {"test","test1","test3"};//發送人
137         String[] mailCC = {"test","test1","test3"};//抄送人
138         String contentTop = "這是一個郵件的題目";
139         String contentText = "這是這個郵件的正文";
140         String fileName = "G:\\下載\\other\\";//如果有附件的話這填寫地址
141         new JavaEMail("1","2","3","4","5").sendEmail(mailTO,mailCC,contentTop,contentText,fileName);
142     }
143 }
144 
145 
146 
147 /* 
148 <!-- 發送郵件需要的jar java send mail  -->
149 <dependency>
150     <groupId>javax.mail</groupId>
151     <artifactId>mail</artifactId>
152     <version>1.4.5</version>
153 </dependency>
154 <dependency>
155     <groupId>javax.activation</groupId>
156     <artifactId>activation</artifactId>
157     <version>1.1.1</version>
158 </dependency> */

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM