javamail接收邮件怎么从qq邮箱中取附件的文件名

首先,你需要准备2个jar包:mail.jar以及activation.jar &可以去网上下载。
发送邮件部分
MailTest.java
package com.lrb.java.mail.
import java.util.P
import javax.activation.DataH
import javax.activation.FileDataS
import javax.mail.A
import javax.mail.BodyP
import javax.mail.M
import javax.mail.M
import javax.mail.S
import javax.mail.T
import javax.mail.internet.InternetA
import javax.mail.internet.MimeBodyP
import javax.mail.internet.MimeM
import javax.mail.internet.MimeM
public class MailTest {
private MimeMessage mimM//MIME邮件对象
private S//邮件会话属性
private P//系统属性
private String username = &&;//smtp认证用户名密码
private String password = &&;
private M//Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MIME对象
public MailTest(String smtp){
setSmtpHost(smtp);
createMimeMessage();
* 设置SMTP主机
* @param hostName String 主机名
public void setSmtpHost(String hostName){
if(prop == null) prop = System.getProperties();//获得系统属性对象
prop.put(&mail.smtp.host&, hostName);//设置SMTP主机
* 获得会话,并创建邮件对象
* @return boolean
public boolean createMimeMessage(){
session = Session.getDefaultInstance(prop,new SmtpAuth(this.username,this.password));//获得邮件会话对象
mimMsg = new MimeMessage(session);//创建MIME邮件对象
mp = new MimeMultipart();
} catch (Exception e) {
e.printStackTrace();
* 设置是否需要验证
* @param need boolean
public void setNeedAuth(boolean need){
if(this.prop == null) this.prop = System.getProperties();
this.prop.put(&mail.smtp.auth&, &true&);
this.prop.put(&mail.smtp.auth&, &false&);
* 设置用户名、密码
* @param name String
* @param pass String
public void setNamePass(String name,String pass){
username =
password =
* 设置标题
* @param mailSubject String
* @return boolean
public boolean setSubject(String mailSubject){
mimMsg.setSubject(mailSubject);
} catch (Exception e) {
e.printStackTrace();
* 设置邮件正文
* @param mailBody String
* @return boolean
public boolean setBody(String mailBody){
BodyPart bp = new MimeBodyPart();
bp.setContent(&&meta http-equiv=Content-Type content=text/ charset=gb2312&&+mailBody, &text/charset=GB2312&);
mp.addBodyPart(bp);
} catch (Exception e) {
System.err.println(&设置邮件正文时错误:&+e);
* 添加附件
* @param fileName String
* @return boolean
public boolean addFileAffix(String fileName){
BodyPart bp = new MimeBodyPart();
FileDataSource fds = new FileDataSource(fileName);
bp.setDataHandler(new DataHandler(fds));
bp.setFileName(fds.getName());
mp.addBodyPart(bp);
} catch (Exception e) {
System.err.println(&增加邮件附件:&+fileName+&发生错误&+e);
* 设置发件人
* @param from String
* @return boolean
public boolean setFrom(String from){
mimMsg.setFrom(new InternetAddress(from));
} catch (Exception e) {
System.err.println(&设置发件人:&+from+&时出错&+e);
* 设置收件人(one)
* @param to String
* @return boolean
public boolean setTo(String to){
mimMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
} catch (Exception e) {
System.err.println(&设置收件人:&+to+&时出错&+e);
* 设置收件人(one or many)
* @param to InternetAddress[]
* @return boolean
public boolean setTo(InternetAddress[] to){
if(to == null)
mimMsg.setRecipients(Message.RecipientType.TO, to);
} catch (Exception e) {
System.err.println(&设置收件人:&+to+&时出错&+e);
* 设置抄送人
* @param copyTo String
* @return boolean
public boolean setCopyTo(String copyTo){
if(copyTo == null)
mimMsg.setRecipients(Message.RecipientType.CC, (Address[])InternetAddress.parse(copyTo));
} catch (Exception e) {
* 发送操作
* @return boolean
public boolean send(){
mimMsg.setContent(mp);
mimMsg.saveChanges();
Transport transport = session.getTransport(&smtp&);
System.out.println(prop.getProperty(&mail.smtp.host&));
System.out.println(prop.getProperty(&mail.smtp.auth&));
transport.connect((String)prop.getProperty(&mail.smtp.host&), username, password);
transport.sendMessage(mimMsg, mimMsg.getAllRecipients());
transport.close();
} catch (Exception e) {
e.printStackTrace();
* 开始测试,主程序
* @author lrb
* @param args
public static void main(String[] args) {
String mailBody = &&meta http-equiv=Content-Type content=text/ charset=gb2312&&
+&&div align=center& 使用程序自动发送邮件测试,请勿回复 &/div&&;
InternetAddress[] to = new InternetAddress[2];
to[0] = new InternetAddress(&&);
to[1] = new InternetAddress(&&);
} catch (Exception e) {
e.printStackTrace();
MailTest mt = new MailTest(&&);
mt.setNeedAuth(true);
if(mt.setSubject(&密码保护的注册资料(请不要回复)&) == false)
if(mt.setBody(mailBody) == false)
if(mt.setTo(to) ==
if(mt.setFrom(&&) == false)
if(mt.addFileAffix(&c://test.xls&) == false)
mt.setNamePass(&你的邮箱地址(此处使用QQ邮箱为例,需要登录邮箱将相应服务开启)&, &你的邮箱密码&);
if(mt.send() ==
SmtpAuth.java
package com.lrb.java.mail.
import javax.mail.A
import javax.mail.PasswordA
public class SmtpAuth extends Authenticator {
private String uname,
public SmtpAuth(String username,String password){
this.uname =
this.pwd =
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(uname,pwd);
=================================================================================================
以下为接收邮件部分操作
MailReceiveTest.java
package com.lrb.java.mail.
import java.io.BufferedInputS
import java.io.BufferedOutputS
import java.io.F
import java.io.FileOutputS
import java.io.IOE
import java.io.InputS
import java.io.UnsupportedEncodingE
import java.text.SimpleDateF
import java.util.D
import java.util.P
import javax.mail.BodyP
import javax.mail.F
import javax.mail.F
import javax.mail.M
import javax.mail.MessagingE
import javax.mail.M
import javax.mail.P
import javax.mail.S
import javax.mail.S
import javax.mail.URLN
import javax.mail.internet.InternetA
import javax.mail.internet.MimeM
import javax.mail.internet.MimeU
public class MailReceiveTest {
private MimeMessage mimM
private String saveAttatchPath = &&;//附件下载后的保存目录
private StringBuffer contentTxt = new StringBuffer();//存放邮件内容
private String dataFormat = &yyyy-MM-dd HH:mm:ss&;//日期显示格式
* 构造函数
* @param msg MimeMessage
public MailReceiveTest(MimeMessage msg){
this.mimMsg =
* 设置MimeMessage对象
* @param mimeMessage MimeMessages
public void setMimeMessage(MimeMessage mimeMessage){
this.mimMsg = mimeM
* 获得发件人的姓名和地址
* @return String
public String getFrom(){
String fromAddr = &&;
InternetAddress[] addr = (InternetAddress[]) mimMsg.getFrom();
String from = addr[0].getAddress();
String personal = addr[0].getPersonal();
from = from == null?&&:
personal = personal == null?&&:
fromAddr = personal + &&& + from+ &&&;
} catch (Exception e) {
e.printStackTrace();
return fromA
* 获得邮件的收件人,抄送和密送的地址和姓名,根据所传递的参数的不同
* @param type String (&to&--收件人地址;&cc&--抄送人地址;&bcc&--密送人地址)
* @return String
public String getOtherAddr(String type){
String mailAddr = &&;
String addType = type.toUpperCase();
InternetAddress[] addr =
if(&TO&.equals(addType) || &CC&.equals(addType) || &BCC&.equals(addType)){
if(&TO&.equals(addType))
addr = (InternetAddress[]) mimMsg.getRecipients(Message.RecipientType.TO);
else if(&CC&.equals(addType))
addr = (InternetAddress[]) mimMsg.getRecipients(Message.RecipientType.CC);
addr = (InternetAddress[]) mimMsg.getRecipients(Message.RecipientType.BCC);
if(addr != null
&& addr.length&0){
for(int i=0;i&addr.i++){
String mAddr = addr[i].getAddress();
String personal = addr[i].getPersonal();
mAddr = mAddr == null?&&:new String(mAddr.getBytes(&iso8859-1&),&gb2312&);
personal = personal == null?&&:new String(personal.getBytes(&iso8859-1&),&gb2312&);
String each = personal + &&& + mAddr +&&&;
mailAddr += &,& + //拼接所有地址字符串
mailAddr = mailAddr.substring(1);//截取第一个逗号分隔符
return &&;
throw new Exception(&错误邮件地址类型&);
} catch (Exception e) {
e.printStackTrace();
return mailA
* 获得邮件主题
* @return String
* @throws UnsupportedEncodingException
* @throws MessagingException
public String getSubject() throws UnsupportedEncodingException, MessagingException{
String subject = &&;
System.err.println(MimeUtility.encodeText(this.mimMsg.getSubject()));
subject = mimMsg.getSubject();
subject = subject == null ? && : MimeUtility.decodeText(subject);
} catch (Exception e) {
e.printStackTrace();
* 获得发送日期
* @return String
public String getSendDate(){
String dateStr = &&;
Date date = mimMsg.getSentDate();
dateStr = new SimpleDateFormat(dataFormat).format(date);
} catch (Exception e) {
e.printStackTrace();
return dateS
* 获得邮件正文内容
* @return String
* @throws UnsupportedEncodingException
public String getContent() throws UnsupportedEncodingException{
return this.contentTxt.toString();
* 根据MimeType类型的不同解析邮件,将邮件内容保存到StringBuffer中
* @param part Part
public void getMailContent(Part part){
String contentType = part.getContentType();
int nameIndex = contentType.indexOf(&name&);
boolean conName =
if(nameIndex != -1){
System.err.println(&contentType:&+contentType);
if(part.isMimeType(&text/plain&) && !conName){
contentTxt.append(part.getContent());
//客户程序从javamail取得的正文内容字符集为iso-8859-1,所以还要将字符集转换一下
if(contentType.toLowerCase().indexOf(&charset&) == -1){
this.contentTxt = new StringBuffer(new String(this.contentTxt.toString().getBytes(&iso-8859-1&),&gb2312&));
}else if(part.isMimeType(&text/html&) && !conName){
contentTxt.append(part.getContent());
//客户程序从javamail取得的正文内容字符集为iso-8859-1,所以还要将字符集转换一下
if(contentType.toLowerCase().indexOf(&charset&) == -1){
this.contentTxt = new StringBuffer(new String(this.contentTxt.toString().getBytes(&iso-8859-1&),&gb2312&));
}else if(part.isMimeType(&multipart/*&)){
Multipart multipart = (Multipart) part.getContent();
int count = multipart.getCount();
for(int i=0;i&i++){
getMailContent(multipart.getBodyPart(i));
}else if(part.isMimeType(&message/rfc822&)){
getMailContent((Part) part.getContent());
} catch (Exception e) {
e.printStackTrace();
* 判断是否需要回执,需要返回true,不需要返回false
* @return boolean
public boolean getRelySign(){
String needReply[] = mimMsg.getHeader(&Disposition-Notification-To&);
if(needReply != null)
} catch (Exception e) {
e.printStackTrace();
* 获得此邮件的Message-ID
* @return String
* @throws MessagingException
public String getMsgId() throws MessagingException{
return this.mimMsg.getMessageID();
* 判断邮件是否已读,如果已读返回true,未读返回false
* @return boolean
public boolean isRead(){
Flags flags = this.mimMsg.getFlags();
Flags.Flag[] flag = flags.getSystemFlags();
System.out.println(&Flags' length:&+flag.length);
for(int i=0;i&flag.i++){
if(flag[i] == Flags.Flag.SEEN){
System.out.println(&Message is Read!&);
} catch (Exception e) {
e.printStackTrace();
* 判断邮件是否包含附件
* @param part Part
* @return boolean
public boolean isContainAttach(Part part){
boolean flag =
String contenType = part.getContentType();
if(part.isMimeType(&multipart/*&)){
Multipart mp = (Multipart) part.getContent();
for(int i=0;i&mp.getCount();i++){
BodyPart bp = mp.getBodyPart(i);
String disposition = bp.getDisposition();
if(disposition != null
&& (disposition.equalsIgnoreCase(Part.ATTACHMENT) || disposition.equalsIgnoreCase(Part.INLINE))){
}else if(bp.isMimeType(&multipart/*&)){
flag = isContainAttach(bp);
String conType = bp.getContentType();
if(conType.toLowerCase().indexOf(&application&) != -1){
}else if(conType.toLowerCase().indexOf(&name&) != -1){
}else if(part.isMimeType(&message/rfc822&)){
flag = isContainAttach((Part) part.getContent());
} catch (Exception e) {
e.printStackTrace();
* 保存附件(可与isContainAttach方法合并为同一个):获取文件名后,调用保存文件方法进行保存
* @param part Part
public void saveAttachment(Part part){
String fileName = &&;
if(part.isMimeType(&multipart/*&)){
Multipart mp = (Multipart) part.getContent();
for(int i=0;i&mp.getCount();i++){
BodyPart bp = mp.getBodyPart(i);
String disposition = bp.getDisposition();
if(disposition != null
&& (disposition.equalsIgnoreCase(Part.ATTACHMENT) || disposition.equalsIgnoreCase(Part.INLINE))){
fileName = bp.getFileName();
if(fileName != null && !&&.equals(fileName)){
if(fileName.toLowerCase().indexOf(&gb2312&)!= -1
|| fileName.toLowerCase().indexOf(&gbk&)!= -1){
fileName = MimeUtility.decodeText(fileName);
saveFile(fileName, bp.getInputStream());
}else if(bp.isMimeType(&multipart/*&)){
saveAttachment(bp);
fileName = bp.getFileName();
if(fileName != null && !&&.equals(fileName)){
if(fileName.toLowerCase().indexOf(&gb2312&)!= -1
|| fileName.toLowerCase().indexOf(&gbk&)!= -1){
fileName = MimeUtility.decodeText(fileName);
saveFile(fileName, bp.getInputStream());
}else if(part.isMimeType(&message/rfc822&)){
saveAttachment((Part) part.getContent());
} catch (Exception e) {
e.printStackTrace();
* 在指定目录下保存附件文件
* @param fileName String
* @param in InputStream
public void saveFile(String fileName, InputStream in){
BufferedOutputStream bos =
BufferedInputStream bis =
String osName = System.getProperty(&os.name&);
String storeDir = this.saveAttatchP
String separator = System.getProperty(&file.separator&);
osName = osName == null ? && : osN
if(osName.toUpperCase().indexOf(&WIN&) != -1){
if(storeDir == null || storeDir.equals(&&)){
storeDir = &C:\\tmp&;
storeDir = &/tmp&;
File storeFile = new File(storeDir+separator+fileName);
System.out.println(&storeFile's path:&+storeFile.toString());
bos = new BufferedOutputStream(new FileOutputStream(storeFile));
bis = new BufferedInputStream(in);
while((m = bis.read()) != -1){
bos.write(m);
bos.flush();
} catch (Exception e) {
e.printStackTrace();
bos.close();
bis.close();
} catch (IOException e) {
e.printStackTrace();
* 设置附件保存路径
* @param path String
public void setAttachPaht(String path){
this.saveAttatchPath =
* 设置日期格式
* @param format String
public void setDateFormat(String format){
this.dataFormat =
* 开始测试 ---------------
* @throws MessagingException
* @throws UnsupportedEncodingException
public static void main(String[] args) throws MessagingException, UnsupportedEncodingException {
Properties props = System.getProperties();
props.put(&mail.smtp.host&, &&);
props.put(&mail.smtp.auth&, &true&);
Session session = Session.getDefaultInstance(props,null);
//URLName参数 pop3--协议,--主机,110--pop3端口号,null--file,用户名,密码
URLName urlName = new URLName(&pop3&,&&,110,null,&你的邮箱地址(此处使用163邮箱为例)&,&你的邮箱密码&);
//使用SSL加密传输协议,gmail可以使用ssl协议来保证邮件传输的安全,使用SSL的POP3S的默认端口为995。
//URLName url=new URLName(&pop3s&,&&,995,null,&用户名&,&密码&);
Store store = session.getStore(urlName);
store.connect();
//从邮件服务器中返回邮箱内的信息
Folder folder = store.getFolder(&INBOX&);
//打开Folder
folder.open(Folder.READ_ONLY);
Message msg[] = folder.getMessages();
System.out.println(&Message's length:&+msg.length);
System.out.println(&您的邮箱中共有&+folder.getMessageCount()+&封邮件。其中有&
+folder.getUnreadMessageCount()+&封已读邮件,&+folder.getNewMessageCount()
+&封未读邮件&);
for(int i=0;i&msg.i++){
System.out.println(&=====================&);
MailReceiveTest mrt = new MailReceiveTest((MimeMessage) msg[i]);
System.out.println(&contentType:&+mrt.mimMsg.getContentType());
System.out.println(&Message &+(i+1)+& subject:&+mrt.getSubject());
//发送日期
System.out.println(&Message &+(i+1)+& sendDate:&+mrt.getSendDate());
//是否回执
System.out.println(&Message &+(i+1)+& replySign:&+mrt.getRelySign());
//是否已读
System.out.println(&Message &+(i+1)+& hasRead:&+mrt.isRead());
//是否包含附件
System.out.println(&Message &+(i+1)+& hasAttachment:&+mrt.isContainAttach(msg[i]));
System.out.println(&Message &+(i+1)+& from:&+mrt.getFrom());
//收信人地址
System.out.println(&Message &+(i+1)+& to:&+mrt.getOtherAddr(&to&));
//抄送地址
System.out.println(&Message &+(i+1)+& cc:&+mrt.getOtherAddr(&cc&));
//密送地址
System.out.println(&Message &+(i+1)+& bcc:&+mrt.getOtherAddr(&bcc&));
//设置日期格式
mrt.setDateFormat(&yy年MM月dd日 HH:mm:ss&);
//发送日期(第二次打印输出)
System.out.println(&Message &+(i+1)+& sendDate2:&+mrt.getSendDate());
//Message-ID
System.out.println(&Message &+(i+1)+& Message-ID:&+mrt.getMsgId());
//获得邮件内容
mrt.getMailContent(msg[i]);
System.out.println(&Message &+(i+1)+& mailContent:&+mrt.getContent());
//设置附件保存路径
mrt.setAttachPaht(&D:\\&);
//保存附件
mrt.saveAttachment(msg[i]);
if(i&=4) //由于邮箱邮件太多,只取前5封邮件
folder.close(true);
store.close();
因涉及邮箱隐私,控制台输出部分暂且忽略,各位同学可以用自己的邮箱做试验。
在接收邮件时考虑了中文乱码的问题,以及附件下载的问题。
做过实验的细心的同学可能会发现,使用POP3协议无法获取邮件的已读和未读状态。虽然使用了javamail的相关方法,但是得不到相应的数据。在这里就用到了IMAP协议。后面我会做一个使用IMAP接收邮件的例子。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:14301次
排名:千里之外
原创:11篇
(1)(1)(1)(2)(1)(1)(2)(3)(2)(1)(1)(1)qq邮箱中保存到了草稿箱中,在草稿箱中如何取出添加的附件??
qq邮箱中保存到了草稿箱中,在草稿箱中如何取出添加的附件??
我通常用的办法是 把这个邮件再发到自己邮箱里
在收件箱中 把邮件下载到指定文件夹就可以了
不会更好的办法了
等待您来回答
腾讯软件领域专家在QQ邮箱里收到的MAIL(带附件)转发后如果发给个人附近还有 可点旁边的群邮件那附件怎么就没了呢
在QQ邮箱里收到的MAIL(带附件)转发后如果发给个人附近还有 可点旁边的群邮件那附件怎么就没了呢 10
补充:把附件另存为桌面然后再上传到群邮件的回答者
鄙视之·!
不懂的不回答我,谢谢
补充:可是附件没下载地址。。。。。就是一个WORD 或EXCEL怎么办??????????
等待您来回答
腾讯软件领域专家javamail发送的邮件被qq放到垃圾箱里面去了
[问题点数:20分,结帖人ndsafhhlk]
javamail发送的邮件被qq放到垃圾箱里面去了
[问题点数:20分,结帖人ndsafhhlk]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2013年10月 Java大版内专家分月排行榜第二2013年3月 Java大版内专家分月排行榜第二2013年2月 Java大版内专家分月排行榜第二
2013年7月 Java大版内专家分月排行榜第三2013年5月 Java大版内专家分月排行榜第三2013年4月 Java大版内专家分月排行榜第三
2011年4月 Java大版内专家分月排行榜第二2010年8月 Java大版内专家分月排行榜第二2010年5月 Java大版内专家分月排行榜第二2008年2月 Java大版内专家分月排行榜第二2007年7月 Java大版内专家分月排行榜第二
2011年2月 Java大版内专家分月排行榜第三2010年9月 Java大版内专家分月排行榜第三2008年9月 Java大版内专家分月排行榜第三2008年1月 Java大版内专家分月排行榜第三2007年11月 Java大版内专家分月排行榜第三2007年9月 Java大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。trackbacks-0
classpath即可.
下面是发送邮件SendMail.java(含附件)代码://SendMail.javaimport javax.mail.*;import javax.mail.internet.*;import java.util.*;import javax.activation.*;public class SendMail {
public static void send(String customMailBoxAddress,String username,String password,String serverMailBoxAddress,String subject,String attachmentPath,String attachmentName) {
//这里面使用新浪作为发送邮件的邮件服务器,其他的smtp服务器可以到相关网站上查到。
String host = ".cn";
//发送方邮箱地址(如BlogJava2006&#.cn.)
String from = customMailBoxA
//收件人邮箱地址
String to = serverMailBoxA
//发送者的邮箱用户名
String user =
//发送者的邮箱密码
String ps =
Properties props = new Properties();
//设置发送邮件的邮件服务器的属性(这里使用新浪的smtp服务器)
props.put("mail.smtp.host", host);
//需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有//这一条)
props.put("mail.smtp.auth", "true");
//用刚刚设置好的props对象构建一个session
Session session = Session.getDefaultInstance(props);
//有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使
//用(有的时候网络连通性不够好,发送邮件可能会有延迟,在这里面会有所//提示,所以最好是加上这句,避免盲目的等待)
session.setDebug(true);
//定义消息对象
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
message.setSubject(subject);
// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart();
//设置邮件的文本内容
BodyPart contentPart = new MimeBodyPart();
contentPart.setText("邮件的具体内容在此");
multipart. addBodyPart(contentPart);
//添加附件
BodyPart attachmentPart= new MimeBodyPart();
DataSource source = new FileDataSource(attachmentPath);
attachmentPart.setDataHandler(new DataHandler(source));
//注意:下面定义的enc对象用来处理中文附件名,否则名称是中文的附//件在邮箱里面显示的会是乱码,
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
messageBodyPart.setFileName("=?GBK?B?"+enc.encode(attachmentName.getBytes())+"?=");
multipart.addBodyPart(messageBodyPart);
//将multipart对象放到message中
message.setContent(multipart);
//发送邮件
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(host, username, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}catch(Exception e){
e.printStackTrace();
ReceiveMail.java代码如下:
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()[<span style="COLOR: #].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 {
Multipart mp = (Multipart) msg.getContent();
//Miltipart的数量,用于除了多个part,比如多个附件
int mpCount = mp.getCount();
for (int m = <span style="COLOR: #; m & mpC m++) {
this.handle(msg);
part = mp.getBodyPart(m);
disposition = part.getDisposition();
//判断是否有附件
if (disposition != null && disposition.equals(Part.ATTACHMENT))
//这个方法负责保存附件
saveAttach(part);
//不是附件,就只显示文本内容
System.out.println(part.getContent());
private static void saveAttach(BodyPart part) throws Exception {
//得到未经处理的附件名字
String temp = part.getFileName();
//除去发送邮件时,对中文附件名编码的头和尾,得到正确的附件名
//(请参考发送邮件程序SendMail的附件名编码部分)
String s = temp.substring(<span style="COLOR: #, 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[<span style="COLOR: #5];
int read = <span style="COLOR: #;
while ((read = in.read(content)) != -<span style="COLOR: #) {
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..cn";
//连接到邮件服务器并获得邮件
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 = <span style="COLOR: #; i & msg. 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();
}}对其中的类如何使用的更多内容,请参见JavaMailAPI,希望对大家使用JavaMail收发邮件有所帮助!
阅读(5950)
&re: 使用JavaMail收发邮件,解决了中文附件名问题
真是好东西,收了。&&&&&&
&re: 使用JavaMail收发邮件,解决了中文附件名问题
妈的,谢了&&&&&&
&re: 使用JavaMail收发邮件,解决了中文附件名问题
谢谢&&&&&&
&re: 使用JavaMail收发邮件,解决了中文附件名问题
果真可以
找了很久,谢谢!&&&&&&
&re: 使用JavaMail收发邮件,解决了中文附件名问题
推荐&&&&&&
&re: 使用JavaMail收发邮件,解决了中文附件名问题
正在开发邮件接收及发送的框架。
在 你的邮件接收的地方是存在错误的。
你只考虑到了使用JAVAMAIL发送的邮件的,若是在网页上发送的就会存在问题。
对于解码应当使用sun的JavaMail中固有的包。
使用如下方法MimeUtility.decodeText(String s);
请测试校正!&&&&&&
&re: 使用JavaMail收发邮件,解决了中文附件名问题
确实不错&&&&&&
&re: 使用JavaMail收发邮件,解决了中文附件名问题
fsfsd&&&&&&
&re: 使用JavaMail收发邮件,解决了中文附件名问题
handleMultipart方法中&this.handle(msg);&语法有错误。&&&&&&
&re: 使用JavaMail收发邮件,解决了中文附件名问题
你的接受邮件的程序是存在错误,不知道作者是否进行测试。我的QQ号 ,愿意和大家交流,学习,共同提高。&&&&&&
&re: 使用JavaMail收发邮件,解决了中文附件名问题
不错,不错,谢谢了哈&&&&&&
&re: 使用JavaMail收发邮件,解决了中文附件名问题
你里面有错呢。。怎么不先测下再发出来呀。&&&&&&
&re: 使用JavaMail收发邮件,解决了中文附件名问题
正在开发邮件接收及发送的框架。在 你的邮件接收的地方是存在错误的。你只考虑到了使用JAVAMAIL发送的邮件的,若是在网页上发送的就会存在问题。对于解码应当使用sun的JavaMail中固有的包。使用如下方法MimeUtility.decodeText(String s); &#64;Jimmy.Shine你说这个也是存在问题的,如果邮件服务器发送的是utf-8或者其他编码这个方法是解决不了的,必须将编码转换成utf-8然后再使用这个方法解码&&&&&&
&re: 使用JavaMail收发邮件,解决了中文附件名问题
看见宿舍好多好多书,都当废纸卖了,太可惜,所以我拿来淘宝出售,卖给有需要的人.软件工程UML和模式应用Unix Linux系统管理java面向对象编程asp.net 2.0 经典教程有兴趣的话 &&&&&&
阅读排行榜
评论排行榜}

我要回帖

更多关于 javamail接收邮件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信