有关javamail的问题,为什么我不能将附件报错至d盘的子文件夹,而只能存在d盘

为什么我在设置附件下载地址的时候,能成功放在e盘d盘,但无法放到那下面的子目录中。。。import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
public class TestMail {
 
private MimeMessage mimeMessage = null ; 
private String saveAttachPath = ""; // 附件下载后的存放目录
private StringBuffer bodyText = new StringBuffer(); // 存放邮件内容的StringBuffer对象

/**
 * 构造函数,初始化一个MimeMessage对象
 */

public TestMail(MimeMessage mimeMessage) {
    this.mimeMessage = mimeMessage;
}

public void setMimeMessage(MimeMessage mimeMessage) {
    this.mimeMessage = mimeMessage;
}

/**
 *  * 获得发件人的地址和姓名  
 */
public String getFrom() throws Exception{
    InternetAddress address[] = (InternetAddress[])mimeMessage.getFrom(); 
    String from = address[0].getAddress() ; 
    if(from == null){
        from  = " " ;
        System.out.println("未知发送来源");
    }

    String personal = address[0].getPersonal() ;
    if(personal == null){
        personal  = " " ;
        System.out.println("未知发送者");
    }

    String fromAddr = null ; 
    if (personal != null || from != null) {
        fromAddr = personal + "<" + from + ">";
        System.out.println("发送者是:" + fromAddr);
    } else {
        System.out.println("无法获得发送者信息.");
    }
    return fromAddr;
}

/**
 *  * 获得邮件主题  
 */
public String getSubject() throws MessagingException {
    String subject = " " ;
    try{
        subject = MimeUtility.decodeText(mimeMessage.getSubject());  
        if (subject == null) {
            subject = "";
        }
    }catch(Exception e){
        e.printStackTrace(); 
    }
    return subject ; 
}

/**
 * 判断此邮件是否已读,如果未读返回false,反之返回true
 */
public boolean isNew() throws MessagingException {
    boolean isNew = false ; 
    Flags flags = mimeMessage.getFlags() ;
    Flags.Flag[] flag = flags.getSystemFlags() ; //返回Flags对象中所有的系统标记
    for(int i = 0 ; i<flag.length ; i++){
        if(flag[i] == Flags.Flag.SEEN)
                isNew = true ; 
    }
    return isNew;
}

/**
 * 判断此邮件是否包含附件
 */
public boolean isContainAttach(Part part) throws Exception{
    boolean attachFlag = false;
    if(part.isMimeType("multipart/*")){
        Multipart mp = (Multipart) part.getContent();
        for(int i = 0 ; i<mp.getCount() ; i++){
            BodyPart mPart = mp.getBodyPart(i);
            String disposition = mPart.getDisposition();
            if((disposition != null)
                    && ((disposition.equals(Part.ATTACHMENT)) || (disposition.equals(Part.INLINE))))
                            //ATTACHMENT<附件> INLINE<嵌入>
            attachFlag = true;
        else if (mPart.isMimeType("multipart/*")){
            attachFlag = isContainAttach((Part) mPart);
        } else{
            String conType = mPart.getContentType();

            if (conType.toLowerCase().indexOf("application") != -1)
                attachFlag = true;
            if (conType.toLowerCase().indexOf("name") != -1)
                attachFlag = true;
        }   
      }
    } else if (part.isMimeType("message/rfc822")) {
        attachFlag = isContainAttach((Part)part.getContent());
        }
     return attachFlag;
     
}

/**
 * 保存附件
 * @param part 邮件中多个组合体中的其中一个组合体
 * @param destDir  附件保存目录
 * @throws UnsupportedEncodingException
 * @throws MessagingException
 * @throws FileNotFoundException
 * @throws IOException
 */
public static void saveAttachment(Part part, String destDir) throws UnsupportedEncodingException, MessagingException,
        FileNotFoundException, IOException {
    if (part.isMimeType("multipart/*")) {
        Multipart multipart = (Multipart) part.getContent();    //复杂体邮件
        //复杂体邮件包含多个邮件体
        int partCount = multipart.getCount();
        for (int i = 0; i < partCount; i++) {
            //获得复杂体邮件中其中一个邮件体
            BodyPart bodyPart = multipart.getBodyPart(i);
            //某一个邮件体也有可能是由多个邮件体组成的复杂体
            String disp = bodyPart.getDisposition();
            if (disp != null && (disp.equalsIgnoreCase(Part.ATTACHMENT) || disp.equalsIgnoreCase(Part.INLINE))) {
                InputStream is = bodyPart.getInputStream();
                saveFile(is, destDir, decodeText(bodyPart.getFileName()));
            } else if (bodyPart.isMimeType("multipart/*")) {
                saveAttachment(bodyPart,destDir);
            } else {
                String contentType = bodyPart.getContentType();
                if (contentType.indexOf("name") != -1 || contentType.indexOf("application") != -1) {
                    saveFile(bodyPart.getInputStream(), destDir, decodeText(bodyPart.getFileName()));
                }
            }
        }
    } else if (part.isMimeType("message/rfc822")) {
        saveAttachment((Part) part.getContent(),destDir);
    }
}

/**
 * 读取输入流中的数据保存至指定目录
 * @param in 输入流
 * @param fileName 文件名
 * @param destDir 文件存储目录
 * @throws FileNotFoundException
 * @throws IOException
 */
private static void saveFile(InputStream in, String destDir, String fileName)
        throws FileNotFoundException, IOException {
    BufferedInputStream bis = new BufferedInputStream(in);
    BufferedOutputStream bos = new BufferedOutputStream(
            new FileOutputStream(new File(destDir+fileName)));
    int len = -1;
    while ((len = bis.read()) != -1) {
        bos.write(len);
        bos.flush();
    }
    bos.close();
    bis.close();
}

/**
 * 文本解码
 * @param encodeText 解码MimeUtility.encodeText(String text)方法编码后的文本
 * @return 解码后的文本
 * @throws UnsupportedEncodingException
 */
public static String decodeText(String encodeText) throws UnsupportedEncodingException {
    if (encodeText == null || "".equals(encodeText)) {
        return "";
    } else {
        return MimeUtility.decodeText(encodeText);
    }
}


/**
 * 测试
 */
public static void main(String args[]) throws Exception{
    String host = "pop.163.com";
    String username = "*********";
    String password = "*************";    //邮箱信息
    String protocol = "pop3";

    Properties prop = new Properties();//Properties类用于读取Java的配置文件
    prop.setProperty("mail.pop3.store","pop3");
    prop.setProperty("mail.pop3.host","pop.163.com");
    Session session = Session.getDefaultInstance(prop, null);//Session类用于定义应用程序所需的环境信息


    Store store = session.getStore(protocol);
    store.connect(host, username, password);

    Folder folder = store.getFolder("INBOX");
    folder.open(Folder.READ_ONLY);
    Message message[] = folder.getMessages();
    System.out.println("邮件数量: " + message.length);
    TestMail re = null;

    for (int i = 0;i < message.length; i++){
        re = new TestMail((MimeMessage) message[i]);
        System.out.println("邮件 " +(i+1) + " 发送人地址: " + re.getFrom());
        System.out.println( " 是否已读: " + re.isNew());
        System.out.println( " 是否包含附件: "
                + re.isContainAttach((Part) message[i]));
        System.out.println( " 主题: " + re.getSubject());
        System.out.println();
        re.saveAttachment((Part)message[i],"D:\\cp1");
    }
}

}

3个回答

已经知道答案了,在destDir和fileName之间加“\”,否则地址不对

是保存。。。打错了。。。。。

其实没有必要纠结于此,再加一段,保存完附件报错后,读取E盘目录下的那个 文件,复制到你想要的目录下,然后删除原来的文件,

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
为什么我的D:盘、E:盘不见了?
我昨晚的重新装了系统(装的W98),出问题了rn由于我的妹妹要考计算机等级考试二级(C语言),需要用DOS环境,所以我就用DOS6.22把C:给format了,然后先装DOS6.22 再装的W98,可是装好以后,我的原来的D盘E盘就不见了,光区成了D盘了,这下可坏了,我的D、E:里有我这一年来的编程经验总结,现在该怎么办!如何才能找回来呀!大家帮帮忙!
我的D盘打不开了
windows提示说找不到DZYWMAF.EXE文件,我在别的机器上也找不到这个可执行文件 rnrn请问大家 这是怎么回事?
我的D盘不见了
我今天上午开电脑,D盘都好好的,但我安装了一个驱动程序(SONY数码),重新启动电脑之后,我的D盘边成了C盘,而以前的C盘还是C盘,也就是说有两个C盘,里面的东西都是一样的,都是以前C盘的东西,而D盘的什么也没有了啊 ,并却在DOS下,D盘也还是现C盘的东西,这是怎么回事啊??/
d盘~~
最近,用鼠标双机d驱,提示windows找不到GVC.EXE,~~也就打不开d盘,rn在地址栏键入d:\,可以打开,用右键"打开"也可以打开~~rn用鼠标双机f驱,鼠标变成沙漏斗几秒(没有提示),也打不开,在地址栏键入f:\,可以打开,用右键"打开"也可以打开~~rn~~其他分区可以双击打开~~rnrn~~我想知道这是怎么了~~?rn
为什么浏览服务器的D盘,总是报错。
rn我租用的服务商提供的服务器空间,总是出问题,rnrn而且访问很慢,很明显是访问用户过多造成的。rnrn服务商承诺每台机器上不超过固定个数的用户,而又不公开用户列表。rnrn我想看一下我所在的那台服务器上有多少个用户。rnrn可是用 server.mappath()取得实际地址rnrn是在 D 盘上, 而用程序想看 D 有多少个文件夹,总是说取得驱动器错误。rnrn可是却可以取得C盘上的各个文件夹名.... rnrn服务商屏蔽了D盘?还是在程序中不允许查看D盘。或者是根本没有D盘?(估计不可能)rnrnrn有没有人能告诉我怎么回事????
d盘无法访问的问题
进入window,共有3个区,c,d,ern c,e都是好的,点击进入d盘,提示无法访问,功能错误。rn 请各位提示。rn 如果病毒破坏?rn 该怎么恢复rn 抑或是其它问题,请指点小弟一二,谢谢rn
我的d盘和E盘找不到了,怎么办?
我的硬盘有三个分区,现在可以找到C盘,也可以看到D盘(但是无法访问,提示与系统连接的设备不能正常运转),E盘根本看不到了,请各位大虾多多指教!
c盘转d盘
c盘进入d盘 转入方法 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设...
D盘、E盘不见了
各位老大,我昨天晚上挂游戏,今天发现程序错误,重起后就发现我的d、e盘不见了!安装在上面的程序也没有办法运行,而且在安全模式下也没有办法看到啊,怎么回事啊?
为什么??? D盘的文件夹拒绝访问。
我的电脑的 D盘文件夹拒绝访问,但是文件可以打开,D盘的可用容量只有3百兆,当指向文件夹时,文件夹是空的,但是查看D盘容量是,文件夹还占着容量。文件夹不能删除,移动…… rn新建一个文件夹也一样。rn有什么办法解决?
问:为什么重装系统后,C盘变成D盘,D盘变成C盘??!!
在安装系统过程中 C,D盘已经互换了 为什么 怎么处理??
SOS!我用GHOST备份C盘时,误将C盘覆盖到D盘。谁能将D盘恢复?
我看到不对头时,立刻重启,D盘的内容应该没有完全覆盖,谁能帮我找回?
我的D盘不见了,十万火急
今天我装了一个小游戏后(盗版)后,发现所有的中文显示变成乱码,马上delete后,乱码依旧,不得不重启,谁知发现D盘和E盘不见了(我一共把硬盘分为C,D,E),只有C盘还在(没有乱码现象)。我以为是病毒,用kv300+杀后,失踪的硬盘还是没有回来,D盘上有我的毕业论文,马上就要上交了,望各位大侠们给我提点建议,找回硬盘,而且不破坏数据。真的十万火急!!!
我的机器找不到d盘了!!
我的机器是98。我改了控制面板里的系统里的光驱(e:)的起始和结束盘符后再也找不到d盘了恢复注册表也不行。软盘启动也不行。fdisk下可以看到。快帮帮我。谢谢!!!
搜索D: E: 子文件夹问题
代码:rnrnPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Clickrn ListBox1.Items.Clear()rn If folderbrow.ShowDialog = DialogResult.OK Thenrn TextBox1.Text = folderbrow.SelectedPathrn Dim fode As String() = System.IO.Directory.GetDirectories(folderbrow.SelectedPath)rn For Each fod In fodern Dim subfile As String() = System.IO.Directory.GetFiles(fod) '出错代码rn For i As Integer = 0 To subfile.Length - 1rn Dim trw As New StreamWriter(folderbrow.SelectedPath & "\sc.scr", True)rn Dim flx As String = Microsoft.VisualBasic.Right(subfile(i), 3)rn flx = LCase(flx)rn If flx = "dwg" Thenrn trw.WriteLine(subfile(i))rn End Ifrn trw.Close()rn Nextrn NextrnEnd Subrnrn在D: E:根目录下搜索就有错,错误如:对路径“D:\System Volume Information”的访问被拒绝。rn但在D: E: 里文件夹下搜索就没问题,为什么?如何改?谢谢!
在线紧急求救!!!(因ghost C盘而覆盖了D盘,急需D盘数据)
因为在在做GHOST的时候,将C盘数据覆盖到了D盘,D盘的数据不见了!D盘里的数据是单位人事信息,非常重要;请求各位大哥,怎么恢复D盘数据!我在线等待!!!!
桌面移到D盘
本资料介绍如何把桌面移到D盘,亲测试绝对可以
更改桌面到d盘
将c盘的桌面,我的文档都转移到的d盘,会将一般在这些地方的存储的东西,其实都在d盘,这样即便系统崩溃,只要恢复c盘,文件也不会丢失
遍历D盘
刚刚学了IO流中的文件操作,然后就想着能不能现实一个类似于系统提供的文件搜索。于是就开始动手做了,刚开始思路还是很清晰的,就是用递归遍历某个盘符(我这里递归遍历的是D盘)。 代码写好了,运行之后问题就出来:NullPointerException。重新看了代码之后也看不出什么问题,也请教了老师,老师也觉得代码是没问题的,但是运行的时候就是出现NullPointerException。(崩溃啊。。
文件上传到D盘
基本的io流
更改个人资料到D盘
双击此注册表,将桌面,我的文档,收藏夹,cookies等个人资料的路径改到D盘,重装电脑后,再双击此注册表,个人资料仍在
d、e盘不见了!
(没有都bios进行任何改动),在开机时检测不到d、e用了好多办法还是找不到,是为什么?
D盘没了!
我遇到了一个麻烦,一个并没有什么具体损失但让我头痛不已的麻烦。rn我的硬盘丢了一个,是系统里的硬盘丢了,不是丢了一块硬盘。rn简而言之,就是我的硬盘本来有两个分区,C:和D:,也不知怎么弄的,是上网还是游戏的原因,现在一开机只有一个C:了,那个硬盘怎么也找不到了。rn我开始怀疑是病毒,可是用KV3000和金山毒霸都查了,没有。rn请帮我想想办法。rn现在使用一切正常,可就是找不到D盘。
D盘不见了!
rnrnA盘启动,格C盘重心装上win/XP后,发现D盘里的所有东东都不见了,我只格了C盘,以前也常格C盘重装win/xp,没遇见过此问题。究竟是那里错了,能不能恢复D盘里的所有东东?rn谢谢!!rn
丢失D盘
原来有两个盘,现在只有C盘。20G,只剩下3G了。
win8 appx到D盘
win8 appx到D盘,【Win8应用默认安装路径修改方法】突破限制
解决PHP只能安装的D盘的限制
首先下载一个任意版本,然后进行安装,在起初的选择安装目录中选择其他盘,例如C:盘无论出现什么错误都将它先安装完毕。安装完毕后,找到以下几个文件:rnusr/local/php/php.inirnusr/local/apache/conf/httpd.confrnusr/local/mysal/my.intrnusr/install.batrn将其中的"D:"字符串该为你刚刚安装时选择的位置。如前面的C:rn最后运行install.bat处理文件!rnOK,我试过这个方法,是可以的,写出来主要是为了解决一些笔记本用户,他们的盘很有可能只有一个C:盘,就像我一样。rn另外补充一些,如果你下载的安装程序在安装的时候没有选择安装目录这一步,那么你可以先在其他机器上安装好,然后把D:/usr目录复制过来,在进行以上的步骤。rn我就是用这样方法安装的。rnrn
虚拟机内建D盘
我安装好了虚拟机 打开我的电脑只有C盘 能不能建个D盘
D盘文件无法删除
如题 ,朋友不知道用个什么盘装了系统之后就留下了..DOS删不会删 rn安全模式下删不了,不占空间,就是不知道是什么东西.有好几个! 也不隐藏,大明目张胆了rn用粉碎机,打不开目录///
VS08 D盘安装问题
安装VS08,我选择的安装路劲是D盘,但是安装后D盘只有几百M 其他的都在C盘,我想问下安装成这样,用起来会不会有问题,打SP1补丁会不会有问题
打不开D盘
中了震荡波和lovegate,杀毒之后打不开D、E盘,C盘可以正常打开。rn双击D盘出现提示rnWindows无法找到COMMOND.EXE.rn打开"文件"类型的文件需要该程序.rn键入要使用的可执行文件:rn _________________rn|C:\ |rn|_________________|rnrn确定 取消 浏览...rnrn怎么办?
无法格式化D盘
想格式化D盘,电脑提示:"无法格式该驱动器,退出所有调用该驱动器的应用程序",可我打开MSCONFIG中的启动项看了一下,里面已经没有从D盘启动的文件了,怎么还有这提示呢?这是怎么回事,如何处理?
D盘打不开怎么办?
因为系统老是出毛病,所以重新安装了一下win2000系统。结果重新安装后它的D盘打不开了,一双击它,就死机,只能重新启动了。但其他盘都是正常的,该怎么办呢?各位帮帮忙!
安装在D盘.bat安装在D盘.bat安装在D盘.bat
安装在D盘.bat安装在D盘.bat安装在D盘.bat安装在D盘.bat安装在D盘.bat安装在D盘.ba安装在D盘.bat安装在D盘.bat安装在D盘.bat安装在D盘.bat安装在D盘.batt
删除d盘数据
删除d盘数据
D盘不能修改
我放在D盘里的文件不能修改文件名,复制的时候提示有程序在调用,但实际上没程序调用,咋回事
D盘哪里去了
我的机器原来分为:c,d,e,f(f为光驱)rn今天开机:我的电脑里只有c,d(d显示为光驱).rn原来的d,e两个盘都不见了.rn在dos下找d,则返回光驱的内容,找e,则显示'无效驱动器invalid drive..'rn桌面上所有的指向原来d,e的快捷方式均出错:找不到相应连接.rn一句话:d,e两盘就这样神秘失踪了.rn因为有重要文件在这两个盘上,实在不想使用格式化等类似方法.rn恳请赐教.rn速,速,速
D盘,别捉迷藏了
各位大大,小弟今晚优化电脑,进行了一系列的垃圾清理,看到金山的系统瘦身功能,心想这两天刚装完系统,更新了不少东西,系统盘肯定有不少的垃圾,就清理一下吧。谁知道谁知道,清理完D盘在资源管理器都显示不出来了,双击提示“设备未就绪”。。。。[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/32.gif][/img]rn重启一下电脑,又恢复正常了。过了一会儿。。。又出现刚才的情况了。。。[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/32.gif][/img]rn难道系统盘瘦身把分区表信息给搞坏了。。。。用DiskGe检测硬件一切正常。。。rn特此请教各位大大。。。
打不开d盘^^…… 求救
原本有三个分区c盘 d盘 e盘。 一个主引导区c盘,现在在windows下打不开d盘,说是需要格式化。rn而在dos可以看到d盘的内容,但用fdisk察看,三个分区都成了主引导区,并且d盘成了c盘,c盘反而没盘符了。rnrn怎么办~~~~~~ 先谢谢了!!!
个人文件夹转移到D盘
可以把C盘用户下所有文件夹全部转移到其它盘。安全方便以后安装系统时不小心把重要文件格式化掉。
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数