分享一個郵件發送的java實例(純文本,帶附件,多人抄送,多人密送)

貼代碼:html

  1 import javax.activation.DataHandler;
  2 import javax.activation.FileDataSource;
  3 import javax.mail.*;
  4 import javax.mail.internet.*;
  5 import java.util.Date;
  6 import java.util.Properties;
  7 import java.util.logging.Logger;
  8 
  9 /**
 10  * @author kabuqinuo
 11  * @date 2018/7/18 8:53
 12  */
 13 /*發送郵件工具類*/
 14 public class SendMailUtil {
 15 
 16     private static Logger logger = Logger.getLogger(String.valueOf(SendMailUtil.class));
 17 
 18 
 19     //測試方法
 20     public static void main(String[] args) throws Exception {
 21         //boolean a = SendMailUtil.getContenet("18-4-25","上海")
 22         String to = "xxx@qq.com";//接收人
 23         boolean a = SendMailUtil.sendMails("郵件的標題","發送人",to,"(抄送人郵箱可多個可爲空)","(密送人郵箱可多個可爲空)",SendMailUtil.getContenet(),"(附件可爲空)");
 24         System.out.println(a);
 25     }
 26 
 27 
 28     //獲取發送的內容
 29     public static String getContenet(){
 30         String content = "";
 31         content = "要發送的郵件內容";
 32         return content;
 33     }
 34 
 35     /*
 36      * 設置發送email的基本參數
 37      * @param title 郵件標題
 38      * @param personal 發送人(郵箱上顯示的發送人名稱)
 39      * @param to 收件人郵箱
 40      * @param copys 抄送人郵箱
 41      * @param blind 密送人郵箱
 42      * @param content 郵件內容
 43      * @param file 附件
 44      * @return
 45      * @throws Exception
 46      */
 47     public static boolean sendMails(String title, String personal,String to,String copys,String blind,String content,String file) {
 48         Properties prop = new Properties();
 49         prop.setProperty("mail.host", "smtp.sina.com");// 設置服務器地址
 50         prop.setProperty("mail.transport.protocol", "smtp");// 郵件發送協議
 51         prop.setProperty("mail.smtp.auth", "true");// 是否要求身份認證
 52         prop.setProperty("mail.smtp.port", "25"); // SMTP郵件服務器默認端口
 53         //使用JavaMail發送郵件的5個步驟
 54         //一、建立session
 55         Session session = Session.getInstance(prop);
 56         //開啓Session的debug模式,這樣就能夠查看到程序發送Email的運行狀態
 57         session.setDebug(true);
 58         //二、經過session獲得transport對象
 59         Transport ts = null;
 60         try {
 61             ts = session.getTransport();
 62         //三、使用郵箱的用戶名和密碼連上郵件服務器,發送郵件時,發件人須要提交郵箱的用戶名和密碼給smtp服務器,用戶名和密碼都經過驗證以後纔可以正常發送郵件給收件人。
 63         try {
 64             ts.connect("smtp.sina.com", "xxxx@qq.com", "xxx");//發送者的郵箱及密碼
 65         } catch (MessagingException e) {
 66             logger.info("鏈接郵件服務器錯誤:");
 67             throw new AdminException(ResultEnum.CONNECTION_FAIL);
 68         }
 69         } catch (NoSuchProviderException e) {
 70             logger.info("鏈接郵件服務器錯誤:");
 71             throw new AdminException(ResultEnum.CONNECTION_FAIL);
 72         }
 73         //四、建立郵件
 74         Message message;
 75         try {
 76             if (file == null || file.isEmpty()){
 77                 message = createSimple(session, title, personal, to, copys, blind, content);
 78             }else{
 79                 message = createSimplees(session, title, personal, to, copys, blind, content,file);
 80             }
 81         //五、發送郵件
 82         ts.sendMessage(message, message.getAllRecipients());
 83         ts.close();
 84         return true;
 85         }catch (Exception e){
 86             e.printStackTrace();
 87         }
 88         return false;
 89     }
 90 
 91     /*
 92      * 發送郵件(純文本)
 93      * @param session
 94      * @param title 郵件標題
 95      * @param personal 發送人(郵箱上顯示的發送人名稱)
 96      * @param to 收件人郵箱
 97      * @param copys 抄送人郵箱
 98      * @param blind 密送人郵箱
 99      * @param content 郵件內容
100      * @return
101      * @throws Exception
102      */
103     private static MimeMessage  createSimple(Session session,String title, String personal, String to, String copys, String blind, String content) throws Exception {
104         MimeMessage message = new MimeMessage(session);
105         //指明郵件的發件人
106         message.setFrom(new InternetAddress("xxx@qq.com", personal, "UTF-8"));
107         //指明郵件的收件人,如今發件人和收件人是同樣的,那就是本身給本身發
108         InternetAddress[] tos = new InternetAddress().parse(to);
109         message.setRecipients(Message.RecipientType.TO,tos);
110         //預防一個無語的錯誤:554 DT:SPM
111         //message.addRecipients(MimeMessage.RecipientType.CC, InternetAddress.parse("myCenter@163.com"));
112         //抄送
113         if (copys != null && !copys.isEmpty()){
114             InternetAddress[] cc = new InternetAddress().parse(copys);
115             message.setRecipients(Message.RecipientType.CC,cc);
116         }
117         if (blind != null && blind.isEmpty()){
118             InternetAddress[] bcc = new InternetAddress().parse(blind);
119             message.setRecipients(Message.RecipientType.BCC,bcc);
120         }
121         //設置發送時間
122         message.setSentDate(new Date());
123         //郵件的標題
124         message.setSubject(title);
125         //郵件的文本內容
126         message.setContent(content, "text/html;charset=UTF-8");
127         // 保存並生成最終的郵件內容
128         message.saveChanges();
129         //返回建立好的郵件對象
130         return message;
131     }
132 
133     /*
134      * 發送郵件(帶附件)
135      * @param session
136      * @param title 郵件標題
137      * @param personal 發送人(郵箱上顯示的發送人名稱)
138      * @param to 收件人郵箱
139      * @param copys 抄送人郵箱
140      * @param blind 密送人郵箱
141      * @param content 郵件內容
142      * @param file 附件
143      * @return
144      * @throws Exception
145      */
146     private static MimeMessage  createSimplees(Session session,String title, String personal, String to, String copys,
147                                              String blind, String content,String file) throws Exception {
148         MimeMessage message = new MimeMessage(session);
149         //指明郵件的發件人
150         message.setFrom(new InternetAddress("xxx@qq.com", personal, "UTF-8"));
151         //指明郵件的收件人,發件人和收件人是同樣的,那就是本身給本身發
152         InternetAddress[] tos = new InternetAddress().parse(to);
153         message.setRecipients(Message.RecipientType.TO,tos);
154         //抄送
155         if (copys != null && !copys.isEmpty()){
156             InternetAddress[] cc = new InternetAddress().parse(copys);
157             message.setRecipients(Message.RecipientType.CC,cc);
158         }
159         if (blind != null && blind.isEmpty()){
160             InternetAddress[] bcc = new InternetAddress().parse(blind);
161             message.setRecipients(Message.RecipientType.BCC,bcc);
162         }
163         //設置發送時間
164         message.setSentDate(new Date());
165         //郵件的標題
166         message.setSubject(title);
167 
168         // 要求閱讀回執(收件人閱讀郵件時會提示回覆發件人,代表郵件已收到,並已閱讀)
169         message.setHeader("Disposition-Notification-To", "xxx@qq.com");
170 
171         MimeBodyPart text = new MimeBodyPart();
172         text.setContent(content, "text/html;charset=UTF-8");
173 
174         //建立郵件附件
175         MimeBodyPart attach = new MimeBodyPart();
176         DataHandler dh = new DataHandler(new FileDataSource(file));
177         attach.setDataHandler(dh);
178         attach.setFileName(MimeUtility.encodeWord(dh.getName()));
179 
180         //建立容器描述數據關係
181         MimeMultipart mp = new MimeMultipart();
182         mp.addBodyPart(text);
183         mp.addBodyPart(attach);
184         mp.setSubType("mixed");
185 
186         message.setContent(mp);
187         message.saveChanges();
188 
189 
190         //返回建立好的郵件對象
191         return message;
192     }
193 }

以上是一個郵件發送的實例,能夠純文本發送郵件 也能夠帶着附件發送,至於帶圖片的 尚未寫。java

用以上實例本人以前用於企業發送郵件,因此發送者的郵箱可密碼是寫死的,在64行,若是想自由定義發送人的郵箱和密碼,可將其上代碼稍微改改,把發送者的郵箱和密碼參數提取出來。服務器

以上代碼中的某些命名和項目中的某些字段衝突 因此稍微改了改。session

若是直接拿以上代碼來用,會缺乏一個異常處理類,這個異常處理類就是項目的整個異常處理工具,簡單來講就是拋出錯誤提示。其餘沒什麼問題,本人親測。ide

相關文章
相關標籤/搜索