java 发送邮件添加附件_java邮件自动发送时添加网络附件
查了很多資料都是使用本地資源作為附件發送。但是數據和程序分開時,還需要先下載數據,保存到本地再發送郵件。查了很多資料后,發現apach提供了很好的一個commons-mail.jar包,做了很好的封裝,簡單易用。下載地址是http://commons.apache.org/proper/commons-email/download_email.cgi
public void sendHtmlEmailWithImg() throws Exception {
String htmlEmailContent = "這是一張用于測試的圖片,請查收。
"
+ "
";
ImageHtmlEmail email = new ImageHtmlEmail();//用ImageHtmlEmail來發送
email.setDebug(true);//可以看到執行過程的debug信息
email.setCharset("UTF-8");//防止亂碼
email.setSSLCheckServerIdentity(true);
email.setSslSmtpPort("465"); // 設定SSL端口
//解析本地圖片和網絡圖片都有的html文件重點就是下面這兩行;
//ImageHtmlEmail通過setDataSourceResolver來識別并嵌入圖片
//查看DataSourceResolver的繼承結構發現有幾個好用的子類
DataSourceResolver[] dataSourceResolvers =
new DataSourceResolver[]{new DataSourceFileResolver(),//添加DataSourceFileResolver用于解析本地圖片
new DataSourceUrlResolver(new URL("http://"))};//添加DataSourceUrlResolver用于解析網絡圖片,注意:new URL("http://")
//DataSourceCompositeResolver類可以加入多個DataSourceResolver,
//把需要的DataSourceResolver放到一個數組里傳進去就可以了;
email.setDataSourceResolver(new DataSourceCompositeResolver(dataSourceResolvers));
// 郵箱登陸信息
email.setHostName("smtp.qq.com");
email.addTo("*@qq.com", "Jo");
email.setFrom("*@qq.com", "Me"); // 必須和登陸郵箱名一致,否則會報錯
email.setAuthenticator(new DefaultAuthenticator("*@qq.com", "********")); // 郵箱名和登陸密碼
email.setSubject("發送一張圖片,看看是否可以收到。");
email.setHtmlMsg(htmlEmailContent);
//如果客戶端不去持HTML格式會顯示這句話,不過應該很少有不支持HTML格式的客戶端了吧
email.setTextMsg("你的郵箱客戶端不支持HTML格式郵件");
email.send();
}
如果使用QQ郵箱做測試需要注意,QQ郵箱對圖片顯示不太友好,需要點擊顯示圖片才能顯示。
ImageHtmlEmail也可以直接添加網絡資源作為附件
/**
* 為郵件添加附件
* @param email 郵件
* @param urls 附件鏈接
* @param names 附件名稱,最好有后綴名才能預覽文件
*/
public void addAttachment(ImageHtmlEmailemail, Listurls, Listnames) {
// 保證附件名的長度和鏈接一一對應
while(urls.size() > names.size()) {
names.add("");
}
for(int i = 0; i < urls.size(); i++) {
EmailAttachment attachment = new EmailAttachment();
try {
attachment.setURL(new URL(urls.get(i)));
attachment.setDisposition(EmailAttachment.ATTACHMENT);
//attachment.setDescription("Apache logo");
attachment.setName(names.get(i));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
email.attach(attachment); // 將附件添加到郵件中
} catch (EmailException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
總結
以上是生活随笔為你收集整理的java 发送邮件添加附件_java邮件自动发送时添加网络附件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10专业工作站版的Ghost备份与
- 下一篇: 十五道css面试题