導航:首頁 > 編程語言 > javamail發送帶附件的郵件

javamail發送帶附件的郵件

發布時間:2025-05-03 10:08:53

㈠ SpringBoot使用javaMailSender發送郵件

在Spring Boot項目中使用JavaMailSender進行郵件發送已成為一種高效便捷的方式。隨著技術發展,早期使用JavaMail API編寫郵件發送代碼變得相對繁瑣。為解決這一問題,Spring框架推出了JavaMailSender介面,進一步簡化了郵件發送過程。在此基礎上,Spring Boot通過引入spring-boot-starter-mail依賴包,為開發者提供了一站式的郵件發送解決方案。

JavaMail是由Sun定義的用於發送和接收電子郵件的API,廣泛適用於不同廠商的實現。雖然它未被包含在JDK中,但卻是Java EE的重要組成部分。JavaMailSender底層基於JavaMail jar包,實現郵件發送功能。

郵件通信協議分為SMTP、POP3和IMAP三種。對於加密傳輸,有SMTPS、POP3S和IMAPS等協議,確保數據安全。此外,JavaMail服務提供程序需要配合JAF(JavaBeansActivationFramework)處理非文本郵件內容,包括MIME(多用途互聯網郵件擴展)、URL頁面和文件附件等。

在Spring Boot中,發送郵件流程可概括為以下幾個步驟:

1. **添加依賴**:在pom.xml文件中引入spring-boot-starter-mail依賴。

2. **配置參數**:在application.properties(或application.yml)文件中加入相應的配置信息,例如郵箱伺服器地址、埠號、用戶名、密碼等。

示例配置(以網易郵箱為例):

mail.smtp.host=smtp.163.com
mail.smtp.auth=true
mail.smtp.starttls.enable=true
mail.debug=true

埠號默認為25,根據實際情況調整。

3. **編寫郵件服務介面**:定義一個介面並實現發送郵件功能。

4. **封裝在Controller層**:在Controller層中調用郵件服務介面,完成郵件發送。

至此,發送郵件的流程完整結束。啟動項目並調用相關介面,即可成功發送郵件。

Spring Boot的starter模塊提供了自動化配置,引入spring-boot-starter-mail依賴後,系統會根據配置文件中的信息創建JavaMailSender實例。因此,開發者只需在需要使用郵件發送功能的代碼中使用@Autowired註解引入JavaMailSender對象即可。

㈡ java 代碼發郵件怎麼添加附件

實現java發送郵件的過程大體有以下幾步:

准備一個properties文件,該文件中存放SMTP伺服器地址等參數。

利用properties創建一個Session對象

利用Session創建Message對象,然後設置郵件主題和正文

利用Transport對象發送郵件

需要的jar有2個:activation.jar和mail.jar發送附件,需要用到Multipart對象。

importjava.io.File;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.Properties;

importjavax.activation.DataHandler;
importjavax.activation.DataSource;
importjavax.activation.FileDataSource;
importjavax.mail.BodyPart;
importjavax.mail.Message;
importjavax.mail.MessagingException;
importjavax.mail.Multipart;
importjavax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeBodyPart;
importjavax.mail.internet.MimeMessage;
importjavax.mail.internet.MimeMultipart;
importjavax.mail.internet.MimeUtility;

{
privateMimeMessagemessage;
privateSessionsession;
privateTransporttransport;

privateStringmailHost="";
privateStringsender_username="";
privateStringsender_password="";

privatePropertiesproperties=newProperties();

/*
*初始化方法
*/
publicJavaMailWithAttachment(booleandebug){
InputStreamin=JavaMailWithAttachment.class.getResourceAsStream("MailServer.properties");
try{
properties.load(in);
this.mailHost=properties.getProperty("mail.smtp.host");
this.sender_username=properties.getProperty("mail.sender.username");
this.sender_password=properties.getProperty("mail.sender.password");
}catch(IOExceptione){
e.printStackTrace();
}

session=Session.getInstance(properties);
session.setDebug(debug);//開啟後有調試信息
message=newMimeMessage(session);
}

/**
*發送郵件
*
*@paramsubject
*郵件主題
*@paramsendHtml
*郵件內容
*@paramreceiveUser
*收件人地址
*@paramattachment
*附件
*/
publicvoiddoSendHtmlEmail(Stringsubject,StringsendHtml,StringreceiveUser,Fileattachment){
try{
//發件人
InternetAddressfrom=newInternetAddress(sender_username);
message.setFrom(from);

//收件人
InternetAddressto=newInternetAddress(receiveUser);
message.setRecipient(Message.RecipientType.TO,to);

//郵件主題
message.setSubject(subject);

//向multipart對象中添加郵件的各個部分內容,包括文本內容和附件
Multipartmultipart=newMimeMultipart();

//添加郵件正文
BodyPartcontentPart=newMimeBodyPart();
contentPart.setContent(sendHtml,"text/html;charset=UTF-8");
multipart.addBodyPart(contentPart);

//添加附件的內容
if(attachment!=null){
BodyPartattachmentBodyPart=newMimeBodyPart();
DataSourcesource=newFileDataSource(attachment);
attachmentBodyPart.setDataHandler(newDataHandler(source));

//網上流傳的解決文件名亂碼的方法,其實用MimeUtility.encodeWord就可以很方便的搞定
//這里很重要,通過下面的Base64編碼的轉換可以保證你的中文附件標題名在發送時不會變成亂碼
//sun.misc.BASE64Encoderenc=newsun.misc.BASE64Encoder();
//messageBodyPart.setFileName("=?GBK?B?"+enc.encode(attachment.getName().getBytes())+"?=");

//MimeUtility.encodeWord可以避免文件名亂碼
attachmentBodyPart.setFileName(MimeUtility.encodeWord(attachment.getName()));
multipart.addBodyPart(attachmentBodyPart);
}

//將multipart對象放到message中
message.setContent(multipart);
//保存郵件
message.saveChanges();

transport=session.getTransport("smtp");
//smtp驗證,就是你用來發郵件的郵箱用戶名密碼
transport.connect(mailHost,sender_username,sender_password);
//發送
transport.sendMessage(message,message.getAllRecipients());

System.out.println("sendsuccess!");
}catch(Exceptione){
e.printStackTrace();
}finally{
if(transport!=null){
try{
transport.close();
}catch(MessagingExceptione){
e.printStackTrace();
}
}
}
}

publicstaticvoidmain(String[]args){
JavaMailWithAttachmentse=newJavaMailWithAttachment(true);
Fileaffix=newFile("c:\測試-test.txt");
se.doSendHtmlEmail("郵件主題","郵件內容","[email protected]",affix);//
}
}

㈢ Javamail發送附件,為什麼將附件內容直接顯示在郵件正文中

DataSource source = new FileDataSource(new File("E:\\path.txt"));
body.setDataHandler(new DataHandler(source));
你好,復在後面在加上附製件文件名的設置:
body.setFileName(MimeUtility.encodeText(文件名));//設置附件文件名
例如:
body.setFileName(MimeUtility.encodeText(new File("E:\\path.txt").getName()));

ps:郵箱會根據附件的MIME類型自動打開附件,設置一個文件名可以將附件流控製成文件,不讓郵箱自動打開

㈣ Java實現163郵箱發送郵件到QQ郵箱

在本教程中,我們將指導您使用Java實現將163郵箱的郵件發送到QQ郵箱。請按照以下步驟操作:

首先,在Maven項目中創建一個普通項目。

在項目中添加依賴,具體依賴如下:

4.0.0

com.xlgl.wzy

javamail

1.0

commonsIO

2.5.0

system

${pom.basedir}/jar/commonsIO-2.5.0.jar

com.sun.mail

javax.mail

1.6.1

junit

junit

4.10

log4j

log4j

1.2.8

org.apache.commons

commons-compress

1.5

javax.mail

mail

1.4.7

maven-assembly-plugin

jar-with-dependencies

com.xlgl.wzy.mail.SendMailUtils

make-assembly

package

single

為了實現郵件發送,您需要配置以下信息:

1. 創建配置類,用於接收配置文件中的信息,如伺服器地址、埠號、用戶名和授權碼。

2. 在配置類中設置屬性,例如伺服器地址、埠號、用戶名、授權碼等。

3. 實現配置類的載入方法,以載入配置文件中的信息。

4. 在配置文件中,確保授權碼是您163郵箱的授權碼,而非郵箱地址。若未正確配置,程序將顯示錯誤信息:使用163郵箱或其他網易郵箱時出現535 Error: authentication failed。

5. 准備郵件發送工具類,並編寫發送關鍵方法,包括正文和附件的發送。

6. 在測試類中,通過配置信息載入和發送工具類,進行郵件發送測試。

注意:如果在發送過程中出現錯誤,請檢查代碼實現是否有誤。確保所有步驟正確無誤後,您的郵件應成功發送到QQ郵箱,並且在郵箱中查看到附件。

㈤ java 發送郵件 需要哪些jar包

使用發送郵件需要用到mail.jar和activtion.jar兩個包。

該類實現了較完整的郵件發送功能,包括以HTML格式發送,添加附件和抄送人。下面是具體的代碼:

packagecn.cgw.util.mail;

importjava.util.Properties;

importjavax.activation.DataHandler;
importjavax.activation.FileDataSource;
importjavax.mail.Address;
importjavax.mail.BodyPart;
importjavax.mail.Message;
importjavax.mail.Multipart;
importjavax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeBodyPart;
importjavax.mail.internet.MimeMessage;
importjavax.mail.internet.MimeMultipart;


publicclassMail{

privateMimeMessagemimeMsg;//MIME郵件對象
privateSessionsession;//郵件會話對象
privatePropertiesprops;//系統屬性
privatebooleanneedAuth=false;//smtp是否需要認證
//smtp認證用戶名和密碼
privateStringusername;
privateStringpassword;
privateMultipartmp;//Multipart對象,郵件內容,標題,附件等內容均添加到其中後再生成MimeMessage對象

/**
*Constructor
*@paramsmtp郵件發送伺服器
*/
publicMail(Stringsmtp){
setSmtpHost(smtp);
createMimeMessage();
}

/**
*設置郵件發送伺服器
*@paramhostNameString
*/
publicvoidsetSmtpHost(StringhostName){
System.out.println("設置系統屬性:mail.smtp.host="+hostName);
if(props==null)
props=System.getProperties();//獲得系統屬性對象
props.put("mail.smtp.host",hostName);//設置SMTP主機
}


/**
*創建MIME郵件對象
*@return
*/
()
{
try{
System.out.println("准備獲取郵件會話對象!");
session=Session.getDefaultInstance(props,null);//獲得郵件會話對象
}
catch(Exceptione){
System.err.println("獲取郵件會話對象時發生錯誤!"+e);
returnfalse;
}

System.out.println("准備創建MIME郵件對象!");
try{
mimeMsg=newMimeMessage(session);//創建MIME郵件對象
mp=newMimeMultipart();

returntrue;
}catch(Exceptione){
System.err.println("創建MIME郵件對象失敗!"+e);
returnfalse;
}
}

/**
*設置SMTP是否需要驗證
*@paramneed
*/
publicvoidsetNeedAuth(booleanneed){
System.out.println("設置smtp身份認證:mail.smtp.auth="+need);
if(props==null)props=System.getProperties();
if(need){
props.put("mail.smtp.auth","true");
}else{
props.put("mail.smtp.auth","false");
}
}

/**
*設置用戶名和密碼
*@paramname
*@parampass
*/
publicvoidsetNamePass(Stringname,Stringpass){
username=name;
password=pass;
}

/**
*設置郵件主題
*@parammailSubject
*@return
*/
publicbooleansetSubject(StringmailSubject){
System.out.println("設置郵件主題!");
try{
mimeMsg.setSubject(mailSubject);
returntrue;
}
catch(Exceptione){
System.err.println("設置郵件主題發生錯誤!");
returnfalse;
}
}

/**
*設置郵件正文
*@parammailBodyString
*/
publicbooleansetBody(StringmailBody){
try{
BodyPartbp=newMimeBodyPart();
bp.setContent(""+mailBody,"text/html;charset=GBK");
mp.addBodyPart(bp);

returntrue;
}catch(Exceptione){
System.err.println("設置郵件正文時發生錯誤!"+e);
returnfalse;
}
}
/**
*添加附件
*@paramfilenameString
*/
publicbooleanaddFileAffix(Stringfilename){

System.out.println("增加郵件附件:"+filename);
try{
BodyPartbp=newMimeBodyPart();
FileDataSourcefileds=newFileDataSource(filename);
bp.setDataHandler(newDataHandler(fileds));
bp.setFileName(fileds.getName());

mp.addBodyPart(bp);

returntrue;
}catch(Exceptione){
System.err.println("增加郵件附件:"+filename+"發生錯誤!"+e);
returnfalse;
}
}

/**
*設置發信人
*@paramfromString
*/
publicbooleansetFrom(Stringfrom){
System.out.println("設置發信人!");
try{
mimeMsg.setFrom(newInternetAddress(from));//設置發信人
returntrue;
}catch(Exceptione){
returnfalse;
}
}
/**
*設置收信人
*@paramtoString
*/
publicbooleansetTo(Stringto){
if(to==null)returnfalse;
try{
mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
returntrue;
}catch(Exceptione){
returnfalse;
}
}

/**
*設置抄送人
*@paramtoString
*/
publicbooleansetCopyTo(Stringto)
{
if(to==null)returnfalse;
try{
mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(to));
returntrue;
}
catch(Exceptione)
{returnfalse;}
}

/**
*發送郵件
*/
publicbooleansendOut()
{
try{
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
System.out.println("正在發送郵件....");

SessionmailSession=Session.getInstance(props,null);
Transporttransport=mailSession.getTransport("smtp");
transport.connect((String)props.get("mail.smtp.host"),username,password);
transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));
transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.CC));
//transport.send(mimeMsg);

System.out.println("發送郵件成功!");
transport.close();

returntrue;
}catch(Exceptione){
System.err.println("郵件發送失敗!"+e);
returnfalse;
}
}

/**
*調用sendOut方法完成郵件發送
*@paramsmtp
*@paramfrom
*@paramto
*@paramsubject
*@paramcontent
*@paramusername
*@parampassword
*@returnboolean
*/
publicstaticbooleansend(Stringsmtp,Stringfrom,Stringto,Stringsubject,Stringcontent,Stringusername,Stringpassword){
MailtheMail=newMail(smtp);
theMail.setNeedAuth(true);//需要驗證

if(!theMail.setSubject(subject))returnfalse;
if(!theMail.setBody(content))returnfalse;
if(!theMail.setTo(to))returnfalse;
if(!theMail.setFrom(from))returnfalse;
theMail.setNamePass(username,password);

if(!theMail.sendOut())returnfalse;
returntrue;
}

/**
*調用sendOut方法完成郵件發送,帶抄送
*@paramsmtp
*@paramfrom
*@paramto
*@paramto
*@paramsubject
*@paramcontent
*@paramusername
*@parampassword
*@returnboolean
*/
publicstaticbooleansendAndCc(Stringsmtp,Stringfrom,Stringto,Stringto,Stringsubject,Stringcontent,Stringusername,Stringpassword){
MailtheMail=newMail(smtp);
theMail.setNeedAuth(true);//需要驗證

if(!theMail.setSubject(subject))returnfalse;
if(!theMail.setBody(content))returnfalse;
if(!theMail.setTo(to))returnfalse;
if(!theMail.setCopyTo(to))returnfalse;
if(!theMail.setFrom(from))returnfalse;
theMail.setNamePass(username,password);

if(!theMail.sendOut())returnfalse;
returntrue;
}

/**
*調用sendOut方法完成郵件發送,帶附件
*@paramsmtp
*@paramfrom
*@paramto
*@paramsubject
*@paramcontent
*@paramusername
*@parampassword
*@paramfilename附件路徑
*@return
*/
publicstaticbooleansend(Stringsmtp,Stringfrom,Stringto,Stringsubject,Stringcontent,Stringusername,Stringpassword,Stringfilename){
MailtheMail=newMail(smtp);
theMail.setNeedAuth(true);//需要驗證

if(!theMail.setSubject(subject))returnfalse;
if(!theMail.setBody(content))returnfalse;
if(!theMail.addFileAffix(filename))returnfalse;
if(!theMail.setTo(to))returnfalse;
if(!theMail.setFrom(from))returnfalse;
theMail.setNamePass(username,password);

if(!theMail.sendOut())returnfalse;
returntrue;
}

/**
*調用sendOut方法完成郵件發送,帶附件和抄送
*@paramsmtp
*@paramfrom
*@paramto
*@paramto
*@paramsubject
*@paramcontent
*@paramusername
*@parampassword
*@paramfilename
*@return
*/
publicstaticbooleansendAndCc(Stringsmtp,Stringfrom,Stringto,Stringto,Stringsubject,Stringcontent,Stringusername,Stringpassword,Stringfilename){
MailtheMail=newMail(smtp);
theMail.setNeedAuth(true);//需要驗證

if(!theMail.setSubject(subject))returnfalse;
if(!theMail.setBody(content))returnfalse;
if(!theMail.addFileAffix(filename))returnfalse;
if(!theMail.setTo(to))returnfalse;
if(!theMail.setCopyTo(to))returnfalse;
if(!theMail.setFrom(from))returnfalse;
theMail.setNamePass(username,password);

if(!theMail.sendOut())returnfalse;
returntrue;
}

}
閱讀全文

與javamail發送帶附件的郵件相關的資料

熱點內容
什麼是代理網路 瀏覽:805
axure怎麼發布到手機app 瀏覽:227
如何做動漫視頻教程 瀏覽:331
蘋果公司企業架構 瀏覽:152
順豐錄音文件管理在哪裡 瀏覽:521
象山新建網站製作有哪些步驟 瀏覽:686
什麼app可以查化妝品的日期 瀏覽:174
中國移動香港的網路制式 瀏覽:752
編程在五行中屬什麼 瀏覽:54
中青校園app可以發什麼文章 瀏覽:397
主文件組可以存放哪些類型的文件 瀏覽:678
有沒有id和賬號和密碼 瀏覽:5
形勢和政策用什麼app 瀏覽:340
統贏編程nc文件輸出路徑設定 瀏覽:849
什麼繪畫app塗色不會蓋住線稿 瀏覽:767
如何自學計算機編程序 瀏覽:38
word2003如何去掉底色 瀏覽:539
dnf85版本野豬套 瀏覽:655
iphone3gs微信41 瀏覽:646
js判斷value是否為空 瀏覽:323

友情鏈接