導航:首頁 > 編程語言 > javamail中文附件

javamail中文附件

發布時間:2023-09-23 04:31:47

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的郵件附件的路徑和文件名中文亂碼問題

你可以試試javamail包中自復帶的編碼解碼制方法
import javax.mail.internet.MimeUtility; 包
// 解決文件名的中文問題
MimeUtility.decodeText(「attachment」);
// 解決標題的中文問題
MimeUtility.encodeText(」subject「);
這兩個方法應該可以解決你的問題,我就是用的這兩個方法

Ⅲ 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讀取中文路徑和文件名亂碼的問題

你的這行代碼attachName=new String(attachName.getBytes("gb2312"),"ISO8859-1");應該修改成attachName=new String(attachName.getBytes("ISO8859-1"),"gb2312");還有就是郵件中文亂碼問題。在界面傳遞時,中文通過一定編碼格式編碼後在傳給另外一個界面,接收界面如果要正確的顯示中文,應該正確的解碼。可以使用jdk1.6提供MimeUtility類。將 FileDataSource fds=new FileDataSource(filename);修改為:
FileDataSource fds=new FileDataSource(MimeUtility.encodeText(filename));這樣的話應該能解決附件亂碼問題。這只是自己膚淺的認識,可能有些地方還有漏洞,往高手看後指點!!
=====================================================================
下面是敝人一段中文處理的代碼,可以做參考
public class Demo3
{
/**
* 復雜郵件含附件+中文附件名_回信地址_友好名稱
* @param args
*/
public static void main(String[] args) throws Exception
{

//配置環境
Properties pros = new Properties();
pros.setProperty("mail.smtp.auth", "true");
pros.setProperty("mail.transport.protocol", "smtp");
Session session = Session.getInstance(pros);
session.setDebug(true);
//創建衛星
Message msg = new MimeMessage(session);
//設置msg的一些信息--發件人、主題、內容..
msg.setFrom(new InternetAddress("\""+MimeUtility.encodeText("超越")+"\" <[email protected]>"));
msg.setRecipients(RecipientType.TO,
InternetAddress.parse(MimeUtility.encodeText("畢老師")+" <[email protected]>,"+MimeUtility.encodeText("王老師")+" <[email protected]>")
);
msg.setReplyTo(InternetAddress.parse("[email protected]"));

MimeMultipart bodyMultipart = new MimeMultipart("mixed");
msg.setContent(bodyMultipart);

MimeBodyPart appurt1 = new MimeBodyPart();
MimeBodyPart appurt2 = new MimeBodyPart();
MimeBodyPart contentPart = new MimeBodyPart();

bodyMultipart.addBodyPart(appurt1);
bodyMultipart.addBodyPart(appurt2);
bodyMultipart.addBodyPart(contentPart);

appurt1.setDataHandler(new DataHandler(new FileDataSource("")));
appurt1.setFileName("");//重要

appurt2.setDataHandler(new DataHandler(new FileDataSource("")));
appurt2.setFileName("");

MimeMultipart contentMultipart = new MimeMultipart("related");
contentPart.setContent(contentMultipart);

MimeBodyPart picPart = new MimeBodyPart();
MimeBodyPart htmlPart = new MimeBodyPart();
contentMultipart.addBodyPart(picPart);
contentMultipart.addBodyPart(htmlPart);

picPart.setDataHandler(new DataHandler(new FileDataSource("")));
picPart.setHeader("Content-Location", "www.sohu.com/log.jpg");
htmlPart.setText("圖片<img src=www.sohu.com/log.jpg/>", "text/html;charset=gbk");

msg.saveChanges();

//創建火箭
Transport transport = session.getTransport();
transport.connect("smtp.sina.com", 25, "[email protected]", "*****");

//火箭發送衛星
transport.sendMessage(msg, InternetAddress.parse("aa,aaa"));

transport.close();
}
}

Ⅳ JavaMail中如何判斷郵件有附件的問題

判斷附件可用如下方法:
disp.equals(Part.ATTACHMENT)//真為附件
你怎麼確認一個 part 就一定是 MimeMultipart,它可能是 Single part 呢,比如 MimePart, 建議你用 eclipse 這樣的開發工具查看一個 Part 的所以子類有哪些,知道它們的繼承層次之後問題就很簡單了。

Ⅵ javamail接收郵件時怎樣能像163那樣,在郵件正文下面顯示都有什麼附件

如下是我之前做的用javamail發送郵件(包含附件,且附件是html網頁形式)的範例,我稍微修改了下,你參考參考,希望可以幫到你,我之前是發給OutLook的,沒有發給163試過,不過我想應該差別不是很大,你試試:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.naming.*;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import com.tbcn.ceap.party.User;
import com.tbcn.ceap.party.custom.bizOper.UserpropertyBizOper;

InternetAddress[] address = null;
String mailTo = "";
boolean sessionDebug = false;
try {
// 設定所要用的Mail 伺服器和所使用的傳送協定
java.util.Properties props = System.getProperties();
props.put("mail.host","接收Mail的伺服器地址或名稱");
props.put("mail.transport.protocol","smtp"); // <=設定所使用的protocol為SMTP(Small Mail Transfer Protocol)
// 產生新的Session 服務
javax.mail.Session mailSession = javax.mail.Session.getDefaultInstance(props,null);
mailSession.setDebug(sessionDebug);
Message msg = new MimeMessage(mailSession);
// 設定傳送郵件的發信人
//msg.setFrom(new InternetAddress("想要顯示的發件人名稱"));
msg.setFrom(new InternetAddress("發件人地址"));
// 設定傳送郵件至收信人的信箱
address = InternetAddress.parse("收件人",false);
msg.setRecipients(Message.RecipientType.TO, address);
// 設定信中的主題
msg.setSubject("郵件主題","big5");
// 設定送信的時間
msg.setSentDate(new Date());

//設定信件內容
String newMailBody = new String();
BodyPart mdp = new MimeBodyPart();
mdp.setContent("郵件內容", "text/html;charset=UTF-8");
Multipart mm = new MimeMultipart();
mm.addBodyPart(mdp);
msg.setContent(mm);

//設定附件信息
if(附件內容字串!=null){
mdp=new MimeBodyPart();
try{
DataHandler dh = new DataHandler(附件內容字串,"text/html;charset=UTF-8");
mdp.setDataHandler(dh);
FileDataSource fds = new FileDataSource("附件名字.html");
mdp.setFileName(new String(fds.getName().getBytes("utf-8"),"iso8859-1"));
}catch(Exception ex){
print("message_1--------------"+ex);
}
mm.addBodyPart(mdp);
msg.setContent(mm);
}
// 送信
Transport transport=mailSession.getTransport("smtp");
try{
transport.send(msg);
}catch(Exception ex1){
print("message_1--------------"+ex1);
}
}catch(MessagingException mex){
mex.printStackTrace();
}

Ⅶ JavaMail怎麼徹底解決發送出的郵件中 附件名 亂碼問題 MimeUtility.encodeText(fileName1)這個方法不頂用

這樣可以解決,試試吧:回答:

BodyPart bp = new MimeBodyPart();
int indexof =filename.lastIndexOf("/");

String fileNameNew=MimeUtility.encodeText(filename.substring(indexof),"utf-8",null);
DataSource dataSourse=new FileDataSource(filename);
bp.setDataHandler(new DataHandler(dataSourse));
bp.setFileName(fileNameNew);

mp.addBodyPart(bp);

Ⅷ 如何使用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 imap 協議 search介面搜索中文問題

設置方法:
1、在Outlook中,點擊上方工具條中「發送和接收」旁的下拉箭頭。
2、選擇發送,選擇接收設置,選擇定義發送,選擇接收組。
3、在「發送/接收設置」窗口裡選擇所有賬戶,點擊「編輯」按鈕。
4、選中IMAP賬戶,在右側「接收郵件項目」下選擇「使用下面定義的自定義行為」
5、勾選文件夾選項下要接收郵件全文的文件夾,將收取方式由「僅下載郵件頭」改為「下載包含附件在內的整個郵件」,點擊「確定」。

IMAP(即Internet Message Access Protocol,互聯網信息訪問協議),您可以通過這種協議將郵件伺服器上的郵件雙向和計算機或移動設備終端同步郵件信息。特別適合在多點使用環境多客戶端工具之間的保持郵件信息同步的需求,非常適合於移動辦公。IMAP4與POP3協議類似,都是郵件獲取協議的一種,IMAP的最主要特點為「同步操作」。
IMAP4改進了POP3的不足,用戶可以設置先通過瀏覽郵件信件頭來決定是否收取、刪除和檢索郵件的特定部分,IMAP4提供的摘要瀏覽功能(只接收郵件頭信息功能)可以在閱讀完所有的郵件到達時間、主題發件人、大小等信息後才作出是否下載的決定。

閱讀全文

與javamail中文附件相關的資料

熱點內容
qq群文件過期了怎麼辦 瀏覽:184
電子文件的特性 瀏覽:190
javatcp接收數據 瀏覽:968
編程什麼最好做 瀏覽:872
滴滴app沒有什麼功能 瀏覽:493
機器人喝編程到底該學哪個 瀏覽:704
買房哪個網站好 瀏覽:913
打完新冠疫苗下載什麼app可以查到 瀏覽:879
海信電視用哪個app看網路電視 瀏覽:96
編程什麼時候流行的 瀏覽:683
自學編程新手看什麼書 瀏覽:180
linux全盤tar 瀏覽:454
ps文件命名自動輸入怎麼辦 瀏覽:467
iphone6plus切圖 瀏覽:822
iphone6沒有提示更新 瀏覽:41
cc網路圖教程 瀏覽:650
u盤無法剪切文件到電腦里 瀏覽:497
中海達靜態數據大概多少內存 瀏覽:599
蘋果6s手機文件管理器 瀏覽:107
qq頭像非主流女生捂臉 瀏覽:736

友情鏈接