導航:首頁 > 編程語言 > javamail發附件byte

javamail發附件byte

發布時間:2022-09-19 09:04:32

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發送帶Excel附件郵件

我這里有個可用的。也來自網路,測了下可以。。

Ⅲ javamail如何收附件

參考代碼如下:
import javax.mail.*;
import java.util.*;
import java.io.*;

public class ReceiveMail {

//處理任何一種郵件都需要的方法
private void handle(Message msg) throws Exception {
System.out.println("郵件主題:" + msg.getSubject());
System.out.println("郵件作者:" + msg.getFrom()[0].toString());
System.out.println("發送日期:" + msg.getSentDate());
}

//處理文本郵件
private void handleText(Message msg) throws Exception {
this.handle(msg);
System.out.println("郵件內容:"+msg.getContent());
}

//處理Multipart郵件,包括了保存附件的功能
private static void handleMultipart(Message msg) throws Exception {
String disposition;
BodyPart part;

Multipart mp = (Multipart) msg.getContent();
//Miltipart的數量,用於除了多個part,比如多個附件
int mpCount = mp.getCount();
for (int m = 0; m < mpCount; m++) {
this.handle(msg);
part = mp.getBodyPart(m);
disposition = part.getDisposition();
//判斷是否有附件
if (disposition != null && disposition.equals(Part.ATTACHMENT))
{
//這個方法負責保存附件
saveAttach(part);
} else {
//不是附件,就只顯示文本內容
System.out.println(part.getContent());
}
}
}

private static void saveAttach(BodyPart part) throws Exception {
//得到未經處理的附件名字
String temp = part.getFileName();
//除去發送郵件時,對中文附件名編碼的頭和尾,得到正確的附件名
//(請參考發送郵件程序SendMail的附件名編碼部分)
String s = temp.substring(8, temp.indexOf("?="));
//文件名經過了base64編碼,下面是解碼
String fileName = base64Decoder(s);
System.out.println("有附件:" + fileName);

InputStream in = part.getInputStream();
FileOutputStream writer = new FileOutputStream(new File(
"保存附件的本地路徑"+ "\\"+fileName));
byte[] content = new byte[255];
int read = 0;
while ((read = in.read(content)) != -1) {
writer.write(content);
}
writer.close();
in.close();
}
//base64解碼
private static String base64Decoder(String s) throws Exception {
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
byte[] b = decoder.decodeBuffer(s);
return (new String(b));
}

public static void receive(String receiverMailBoxAddress, String username,String password) {
//本人用的是yahoo郵箱,故接受郵件使用yahoo的pop3郵件伺服器
String host = "pop.mail.yahoo.com.cn";
try {
//連接到郵件伺服器並獲得郵件
Properties prop = new Properties();
prop.put("mail.pop3.host", host);
Session session = Session.getDefaultInstance(prop);
Store store = session.getStore("pop3");
store.connect(host, username, password);

Folder inbox = store.getDefaultFolder().getFolder("INBOX");
//設置inbox對象屬性為可讀寫,這樣可以控制在讀完郵件後直接刪除該附件
inbox.open(Folder.READ_WRITE);

Message[] msg = inbox.getMessages();

FetchProfile profile = new FetchProfile();
profile.add(FetchProfile.Item.ENVELOPE);
inbox.fetch(msg, profile);

for (int i = 0; i < msg.length; i++) {
//標記此郵件的flag標志對象的DELETED位為true,可以在讀完郵件後直接刪除該附件,具體執行時間是在調用
//inbox.close()方法的時候
msg[i].setFlag(Flags.Flag.DELETED, true);
handleMultipart(msg[i]);
System.out.println("****************************");
}
if (inbox != null) {
//參數為true表明閱讀完此郵件後將其刪除,更多的屬性請參考mail.jar的API
inbox.close(true);
}
if (store != null) {
store.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

Ⅳ 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類型自動打開附件,設置一個文件名可以將附件流控製成文件,不讓郵箱自動打開

Ⅳ javaMail 附件名稱長度限制

附件的大小,原則上沒有限制,但會由於網路環境、處理的軟體等因素,而有所不同

一般幾mb之內

Ⅵ javamail怎麼得到附件文件的名稱

參考代碼如下:
import javax.mail.*;
import java.util.*;
import java.io.*;

public class ReceiveMail {

//處理任何一種郵件都需要的方法
private void handle(Message msg) throws Exception {
System.out.println("郵件主題:" + msg.getSubject());
System.out.println("郵件作者:" + msg.getFrom()[0].toString());
System.out.println("發送日期:" + msg.getSentDate());
}

//處理文本郵件
private void handleText(Message msg) throws Exception {
this.handle(msg);
System.out.println("郵件內容:"+msg.getContent());
}

//處理Multipart郵件,包括了保存附件的功能
private static void handleMultipart(Message msg) throws Exception {
String disposition;
BodyPart part;

Multipart mp = (Multipart) msg.getContent();
//Miltipart的數量,用於除了多個part,比如多個附件
int mpCount = mp.getCount();
for (int m = 0; m < mpCount; m++) {
this.handle(msg);
part = mp.getBodyPart(m);
disposition = part.getDisposition();
//判斷是否有附件
if (disposition != null && disposition.equals(Part.ATTACHMENT))
{
//這個方法負責保存附件
saveAttach(part);
} else {
//不是附件,就只顯示文本內容
System.out.println(part.getContent());
}
}
}

private static void saveAttach(BodyPart part) throws Exception {
//得到未經處理的附件名字
String temp = part.getFileName();
//除去發送郵件時,對中文附件名編碼的頭和尾,得到正確的附件名
//(請參考發送郵件程序SendMail的附件名編碼部分)
String s = temp.substring(8, temp.indexOf("?="));
//文件名經過了base64編碼,下面是解碼
String fileName = base64Decoder(s);
System.out.println("有附件:" + fileName);

InputStream in = part.getInputStream();
FileOutputStream writer = new FileOutputStream(new File(
"保存附件的本地路徑"+ "\\"+fileName));
byte[] content = new byte[255];
int read = 0;
while ((read = in.read(content)) != -1) {
writer.write(content);
}
writer.close();
in.close();
}
//base64解碼
private static String base64Decoder(String s) throws Exception {
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
byte[] b = decoder.decodeBuffer(s);
return (new String(b));
}

public static void receive(String receiverMailBoxAddress, String username,String password) {
//本人用的是yahoo郵箱,故接受郵件使用yahoo的pop3郵件伺服器
String host = "pop.mail.yahoo.com.cn";
try {
//連接到郵件伺服器並獲得郵件
Properties prop = new Properties();
prop.put("mail.pop3.host", host);
Session session = Session.getDefaultInstance(prop);
Store store = session.getStore("pop3");
store.connect(host, username, password);

Folder inbox = store.getDefaultFolder().getFolder("INBOX");
//設置inbox對象屬性為可讀寫,這樣可以控制在讀完郵件後直接刪除該附件
inbox.open(Folder.READ_WRITE);

Message[] msg = inbox.getMessages();

FetchProfile profile = new FetchProfile();
profile.add(FetchProfile.Item.ENVELOPE);
inbox.fetch(msg, profile);

for (int i = 0; i < msg.length; i++) {
//標記此郵件的flag標志對象的DELETED位為true,可以在讀完郵件後直接刪除該附件,具體執行時間是在調用
//inbox.close()方法的時候
msg[i].setFlag(Flags.Flag.DELETED, true);
handleMultipart(msg[i]);
System.out.println("****************************");
}
if (inbox != null) {
//參數為true表明閱讀完此郵件後將其刪除,更多的屬性請參考mail.jar的API
inbox.close(true);
}
if (store != null) {
store.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

Ⅶ javamail 附件有大小限制嗎,我發了50m的附件發送成功了,發送60m就不行了,請問在哪設置,小弟感激不盡

通常是伺服器的限制,如果是web程序可以看看是否發送等待中連接超時了

Ⅷ JavaMail 發送郵件附件的時候,如何把程序中讀出來的IO流直接發出去,而不是保存成臨時文件

這個需要根據你實際的代碼進行改造啊,貼上代碼

Ⅸ JAVAMAIL收郵件時,如何取得附件大小

你牛逼,
郵件收到後一定是 位元組流啊。
你拿byte[]的長度除以幾個1024 不就出來了。

Ⅹ 關於javaMail ,解析附件,出現奇葩錯誤 java.io.IOException: A7 BAD Parse command error,

importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.util.Properties;
importjavax.mail.Address;
importjavax.mail.BodyPart;
importjavax.mail.FetchProfile;
importjavax.mail.Flags;
importjavax.mail.Folder;
importjavax.mail.Message;
importjavax.mail.MessagingException;
importjavax.mail.Multipart;
importjavax.mail.NoSuchProviderException;
importjavax.mail.Part;
importjavax.mail.Session;
importjavax.mail.Store;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeMultipart;
/**
*郵件接受測試
*
*/
{
publicPOP3MailReceiverTest(){
try{
//1.設置連接信息,生成一個Session
Propertiesprops=newProperties();
props.put("mail.transport.protocol","pop3");//POP3收信協議
props.put("mail.pop.port","110");
//props.put("mail.debug","true");//調試
Sessionsession=Session.getInstance(props);
//2.獲取Store並連接到伺服器
Storestore=session.getStore("pop3");
store.connect("localhost","[email protected]","1234");
//3.通過Store打開默認目錄Folder
Folderfolder=store.getDefaultFolder();//默認父目錄
if(folder==null){
System.out.println("伺服器不可用");
return;
//System.exit(1);
}
//System.out.println("默認信箱名:"+folder.getName());
//
//Folder[]folders=folder.list();//默認目錄列表
//
//System.out.println("默認目錄下的子目錄數:"+folders.length);
FolderpopFolder=folder.getFolder("INBOX");//獲取收件箱
popFolder.open(Folder.READ_WRITE);//可讀郵件,可以刪郵件的模式打開目錄
//4.列出來收件箱下所有郵件
Message[]messages=popFolder.getMessages();
//取出來郵件數
intmsgCount=popFolder.getMessageCount();
System.out.println("共有郵件:"+msgCount+"封");
//FetchProfilefProfile=newFetchProfile();//選擇郵件的下載模式,
//根據網速選擇不同的模式
//fProfile.add(FetchProfile.Item.ENVELOPE);
//folder.fetch(messages,fProfile);//選擇性的下載郵件
//5.循環處理每個郵件並實現郵件轉為新聞的功能
for(inti=0;i<msgCount;i++){
Messagemsg=messages[i];//單個郵件
//發件人信息
Address[]froms=msg.getFrom();
if(froms!=null){
System.out.println("發件人信息:"+froms[0]);
InternetAddressaddr=(InternetAddress)froms[0];
System.out.println("發件人地址:"+addr.getAddress());
System.out.println("發件人顯示名:"+addr.getPersonal());
}
Newsnews=newNews();//生成新聞對象
System.out.println("郵件主題:"+msg.getSubject());
news.setTitle(msg.getSubject());
//getContent()是獲取包裹內容,Part相當於外包裝
Multipartmultipart=(Multipart)msg.getContent();//獲取郵件的內容,就一個大包裹,
//MultiPart
//包含所有郵件內容(正文+附件)
System.out.println("郵件共有"+multipart.getCount()+"部分組成");
//依次處理各個部分
for(intj=0,n=multipart.getCount();j<n;j++){
System.out.println("處理第"+j+"部分");
Partpart=multipart.getBodyPart(j);//解包,取出MultiPart的各個部分,每部分可能是郵件內容,
//也可能是另一個小包裹(MultipPart)
//判斷此包裹內容是不是一個小包裹,一般這一部分是正文Content-Type:multipart/alternative
if(part.getContent()instanceofMultipart){
Multipartp=(Multipart)part.getContent();//轉成小包裹
System.out.println("小包裹中有"+p.getCount()+"部分");
//列出小包裹中所有內容
for(intk=0;k<p.getCount();k++){
System.out.println("小包裹內容:"+p.getBodyPart(k).getContent());
System.out.println("內容類型:"
+p.getBodyPart(k).getContentType());
if(p.getBodyPart(k).getContentType().startsWith("text/plain")){
//處理文本正文
news.setBody(p.getBodyPart(k).getContent()+"");
}else{
//處理HTML正文
news.setBody(p.getBodyPart(k).getContent()+"");
}
}
}
//Content-Disposition:attachment;filename="String2Java.jpg"
Stringdisposition=part.getDisposition();//處理是否為附件信息
if(disposition!=null){
System.out.println("發現附件:"+part.getFileName());
System.out.println("內容類型:"+part.getContentType());
System.out.println("附件內容:"+part.getContent());
java.io.InputStreamin=part.getInputStream();//打開附件的輸入流
//讀取附件位元組並存儲到文件中
java.io.FileOutputStreamout=newFileOutputStream(part.getFileName());
intdata;
while((data=in.read())!=-1){
out.write(data);
}
in.close();
out.close();
}
}
//}
//TODOnewsDAO.save(news);//將郵件所攜帶的信息作為新聞存儲起來
//6.刪除單個郵件,標記一下郵件需要刪除,不會真正執行刪除操作
//msg.setFlag(Flags.Flag.DELETED,true);
}
//7.關閉Folder會真正刪除郵件,false不刪除
popFolder.close(true);
//8.關閉store,斷開網路連接
store.close();
}catch(NoSuchProviderExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
newPOP3MailReceiverTest();
}
}

閱讀全文

與javamail發附件byte相關的資料

熱點內容
如何提高網路扶貧的效果 瀏覽:654
飛車軟體文件夾叫什麼 瀏覽:242
刷ec用什麼編程器 瀏覽:765
方菱數控u盤文件格式 瀏覽:260
編程為什麼輸出兩個變數 瀏覽:490
衛星大鍋2017用升級嗎 瀏覽:113
玉米win10系統下載 瀏覽:134
fgo技能升級減cd嗎 瀏覽:129
什麼記賬app免費好用 瀏覽:441
網路檢測可以檢測到什麼 瀏覽:504
sip協議教程 瀏覽:832
編程哪裡可以接項目 瀏覽:119
孤島驚魂win10 瀏覽:246
網路HRV是什麼意思 瀏覽:918
word框中打勾 瀏覽:577
tcl筆試題java 瀏覽:467
win10怎麼登錄安全模式 瀏覽:679
除了archdaily還有什麼網站 瀏覽:567
數控下料圓形怎麼編程 瀏覽:785
安裝游戲在文件管理找不到怎麼辦 瀏覽:216

友情鏈接