java中javamail發(fā)送帶附件的郵件實(shí)現(xiàn)方法
本文實(shí)例講述了java中javamail發(fā)送帶附件的郵件實(shí)現(xiàn)方法。分享給大家供大家參考。具體分析如下:
JavaMail,顧名思義,提供給開(kāi)發(fā)者處理電子郵件相關(guān)的編程接口。它是Sun發(fā)布的用來(lái)處理email的API。它可以方便地執(zhí)行一些常用的郵件傳輸,JavaMail是可選包,因此如果需要使用的話(huà)你需要首先從java官網(wǎng)上下載。目前最新版本是JavaMail1.5.0,下面我們來(lái)看看javamail發(fā)送帶附件的郵件實(shí)例
mail.java 代碼:
import java.util.* ;
import java.io.* ;
import javax.mail.* ;
import javax.mail.internet.* ;
import javax.activation.* ;
public class Mail {
//定義發(fā)件人、收件人、SMTP服務(wù)器、用戶(hù)名、密碼、主題、內(nèi)容等
private String displayName;
private String to;
private String from;
private String smtpServer;
private String username;
private String password;
private String subject;
private String content;
private boolean ifAuth; //服務(wù)器是否要身份認(rèn)證
private String filename="";
private Vector file = new Vector(); //用于保存發(fā)送附件的文件名的集合
/**
* 設(shè)置SMTP服務(wù)器地址
*/
public void setSmtpServer(String smtpServer){
this.smtpServer=smtpServer;
}
/**
* 設(shè)置發(fā)件人的地址
*/
public void setFrom(String from){
this.from=from;
}
/**
* 設(shè)置顯示的名稱(chēng)
*/
public void setDisplayName(String displayName){
this.displayName=displayName;
}
/**
* 設(shè)置服務(wù)器是否需要身份認(rèn)證
*/
public void setIfAuth(boolean ifAuth){
this.ifAuth=ifAuth;
}
/**
* 設(shè)置E-mail用戶(hù)名
*/
public void setUserName(String username){
this.username=username;
}
/**
* 設(shè)置E-mail密碼
*/
public void setPassword(String password){
this.password=password;
}
/**
* 設(shè)置接收者
*/
public void setTo(String to){
this.to=to;
}
/**
* 設(shè)置主題
*/
public void setSubject(String subject){
this.subject=subject;
}
/**
* 設(shè)置主體內(nèi)容
*/
public void setContent(String content){
this.content=content;
}
/**
* 該方法用于收集附件名
*/
public void addAttachfile(String fname){
file.addElement(fname);
}
public Mail(){
}
/**
* 初始化SMTP服務(wù)器地址、發(fā)送者E-mail地址、用戶(hù)名、密碼、接收者、主題、內(nèi)容
*/
public Mail(String smtpServer,String from,String displayName,String username,String password,String to,String subject,String content){
this.smtpServer=smtpServer;
this.from=from;
this.displayName=displayName;
this.ifAuth=true;
this.username=username;
this.password=password;
this.to=to;
this.subject=subject;
this.content=content;
}
/**
* 初始化SMTP服務(wù)器地址、發(fā)送者E-mail地址、接收者、主題、內(nèi)容
*/
public Mail(String smtpServer,String from,String displayName,String to,String subject,String content){
this.smtpServer=smtpServer;
this.from=from;
this.displayName=displayName;
this.ifAuth=false;
this.to=to;
this.subject=subject;
this.content=content;
}
/**
* 發(fā)送郵件
*/
public HashMap send(){
HashMap map=new HashMap();
map.put("state", "success");
String message="郵件發(fā)送成功!";
Session session=null;
Properties props = System.getProperties();
props.put("mail.smtp.host", smtpServer);
if(ifAuth){ //服務(wù)器需要身份認(rèn)證
props.put("mail.smtp.auth","true");
SmtpAuth smtpAuth=new SmtpAuth(username,password);
session=Session.getDefaultInstance(props, smtpAuth);
}else{
props.put("mail.smtp.auth","false");
session=Session.getDefaultInstance(props, null);
}
session.setDebug(true);
Transport trans = null;
try {
Message msg = new MimeMessage(session);
try{
Address from_address = new InternetAddress(from, displayName);
msg.setFrom(from_address);
}catch(java.io.UnsupportedEncodingException e){
e.printStackTrace();
}
InternetAddress[] address={new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO,address);
msg.setSubject(subject);
Multipart mp = new MimeMultipart();
MimeBodyPart mbp = new MimeBodyPart();
mbp.setContent(content.toString(), "text/html;charset=gb2312");
mp.addBodyPart(mbp);
if(!file.isEmpty()){//有附件
Enumeration efile=file.elements();
while(efile.hasMoreElements()){
mbp=new MimeBodyPart();
filename=efile.nextElement().toString(); //選擇出每一個(gè)附件名
FileDataSource fds=new FileDataSource(filename); //得到數(shù)據(jù)源
mbp.setDataHandler(new DataHandler(fds)); //得到附件本身并至入BodyPart
mbp.setFileName(fds.getName()); //得到文件名同樣至入BodyPart
mp.addBodyPart(mbp);
}
file.removeAllElements();
}
msg.setContent(mp); //Multipart加入到信件
msg.setSentDate(new Date()); //設(shè)置信件頭的發(fā)送日期
//發(fā)送信件
msg.saveChanges();
trans = session.getTransport("smtp");
trans.connect(smtpServer, username, password);
trans.sendMessage(msg, msg.getAllRecipients());
trans.close();
}catch(AuthenticationFailedException e){
map.put("state", "failed");
message="郵件發(fā)送失敗!錯(cuò)誤原因:\n"+"身份驗(yàn)證錯(cuò)誤!";
e.printStackTrace();
}catch (MessagingException e) {
message="郵件發(fā)送失?。″e(cuò)誤原因:\n"+e.getMessage();
map.put("state", "failed");
e.printStackTrace();
Exception ex = null;
if ((ex = e.getNextException()) != null) {
System.out.println(ex.toString());
ex.printStackTrace();
}
}
//System.out.println("\n提示信息:"+message);
map.put("message", message);
return map;
}
}
SmtpAuth.java 代碼:
public class SmtpAuth extends javax.mail.Authenticator {
private String username,password;
public SmtpAuth(String username,String password){
this.username = username;
this.password = password;
}
protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
return new javax.mail.PasswordAuthentication(username,password);
}
}
存在的問(wèn)題就是發(fā)送到163的郵件全部都帶有一個(gè)附件的符號(hào),不管有沒(méi)有發(fā)送附件,感興趣的朋友可以對(duì)此加以改進(jìn)和完善。
希望本文所述對(duì)大家的Java程序設(shè)計(jì)有所幫助。
- Java基于JavaMail實(shí)現(xiàn)向QQ郵箱發(fā)送郵件
- java中javamail收發(fā)郵件實(shí)現(xiàn)方法
- JavaWeb中使用JavaMail實(shí)現(xiàn)發(fā)送郵件功能實(shí)例詳解
- Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件
- 基于JavaMail的Java實(shí)現(xiàn)簡(jiǎn)單郵件發(fā)送功能
- 基于SSM框架+Javamail發(fā)送郵件的代碼實(shí)例
- Spring框架JavaMailSender發(fā)送郵件工具類(lèi)詳解
- Java使用JavaMail API發(fā)送和接收郵件的代碼示例
- JavaMail實(shí)現(xiàn)發(fā)送超文本(html)格式郵件的方法
- 輕松學(xué)會(huì)使用JavaMail?API發(fā)送郵件
相關(guān)文章
SpringMVC攔截器和異常處理器使用示例超詳細(xì)講解
攔截器(Interceptor)是一種動(dòng)態(tài)攔截方法調(diào)用的機(jī)制,在SpringMVC中動(dòng)態(tài)攔截控制器方法的執(zhí)行。本文將詳細(xì)講講SpringMVC中攔截器參數(shù)及攔截器鏈配置,感興趣的可以嘗試一下2022-09-09
java根據(jù)不同的參數(shù)調(diào)用不同的實(shí)現(xiàn)類(lèi)操作
這篇文章主要介紹了java根據(jù)不同的參數(shù)調(diào)用不同的實(shí)現(xiàn)類(lèi)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
tk.Mybatis 插入數(shù)據(jù)獲取Id問(wèn)題
本文主要介紹了tk.Mybatis 插入數(shù)據(jù)獲取Id問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
JAVA JNI原理詳細(xì)介紹及簡(jiǎn)單實(shí)例代碼
這篇文章主要介紹了JAVA JNI原理的相關(guān)資料,這里提供簡(jiǎn)單實(shí)例代碼,需要的朋友可以參考下2016-12-12
Java springboot探究配置文件優(yōu)先級(jí)
在springboot項(xiàng)目中,我們可以通過(guò)在yml文件中設(shè)置變量,再通過(guò)@Value注解來(lái)獲得這個(gè)變量并使用,但如果這個(gè)項(xiàng)目已經(jīng)部署到服務(wù)器上,我們想更改這個(gè)數(shù)據(jù)了需要怎么做呢,其實(shí)在springboot項(xiàng)目中,配置文件是有優(yōu)先級(jí)的2023-04-04
Java Thread中start()和run()的區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
start() : 它的作用是啟動(dòng)一個(gè)新線(xiàn)程,新線(xiàn)程會(huì)執(zhí)行相應(yīng)的run()方法。start()不能被重復(fù)調(diào)用。而run() : run()就和普通的成員方法一樣,可以被重復(fù)調(diào)用。下面通過(guò)示例代碼給大家介紹了Java Thread中start()和run()的區(qū)別,感興趣的朋友一起看看吧2017-05-05
Java實(shí)現(xiàn)多個(gè)單張tif文件合并成一個(gè)多頁(yè)tif文件
業(yè)務(wù)部門(mén)需要將多個(gè)單張的tiff文件,合并成一個(gè)多頁(yè)的tiff文件,本文就來(lái)介紹一下如何實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
使用ShardingJDBC進(jìn)行數(shù)據(jù)分片以及讀寫(xiě)分離
ShardingJDBC是一個(gè)輕量級(jí)的Java框架,提供了數(shù)據(jù)分片、讀寫(xiě)分離、分布式主鍵生成等數(shù)據(jù)訪(fǎng)問(wèn)功能,本文將給大家介紹如何使用ShardingJDBC進(jìn)行數(shù)據(jù)分片以及讀寫(xiě)分離,需要的朋友可以參考下2024-01-01
Java通過(guò)SMS短信平臺(tái)實(shí)現(xiàn)發(fā)短信功能 含多語(yǔ)言
這篇文章主要為大家詳細(xì)介紹了Java通過(guò)SMS短信平臺(tái)實(shí)現(xiàn)發(fā)短信功能的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-07-07

