HttpFileCollection fileList = HttpContext.Current.Request.Files;
for(int i = 0; i < fileList.Count; i++)
{   ///添加单个附件
HttpPostedFile file = fileList[i];
if(file.FileName.Length <= 0 || file.ContentLength <= 0)
{
    break;
}
        Attachment attachment = new Attachment(file.FileName);
mailMsg.Attachments.Add(attachment);
nContain += file.ContentLength;
}为什么file.FileName得到的路径名称是:D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\订单.txt
而不是我上传文件的实际路径:H:\My Documents\订单.txt
请哪位好心的哥哥姐姐,帮我分析一下怎么回事儿?

解决方案 »

  1.   

    你需要把路径传过去。貌似丢失了路径,只有文件名。Program Files\Microsoft Visual Studio 8\Common7\IDE\ 是你的当前路径。
      

  2.   

    可是file.FileName应该返回的就是 客户端的文件的名称,包含目录路径 的啊
      

  3.   

    protected void NewBtn_Click(object sender,EventArgs e)
    {
    int nContain = 0; ///添加发件人地址
    string from = "[email protected]";
    MailMessage mailMsg = new MailMessage();
    mailMsg.From = new MailAddress(from);
    nContain += mailMsg.From.Address.Length; ///添加收件人地址
    string split = ";";
    string[] toList = To.Text.Trim().Split(split.ToCharArray());
    for(int i = 0; i < toList.Length; i++)
    {
    mailMsg.To.Add(toList[i].Trim());
    }
    nContain += To.Text.Length; ///添加抄送地址;
    string[] ccList = CC.Text.Trim().Split(split.ToCharArray());
    for(int i = 0; i < ccList.Length; i++)
    {
    if(ccList[i].Trim().Length > 0)
    {
    mailMsg.CC.Add(ccList[i].Trim());
    }
    }
    nContain += CC.Text.Length; ///添加邮件主题
    mailMsg.Subject = Title.Text.Trim();
    mailMsg.SubjectEncoding = Encoding.UTF8;
    nContain += mailMsg.Subject.Length; ///添加邮件内容
    mailMsg.Body = Body.Text;
    mailMsg.BodyEncoding = Encoding.UTF8;
    mailMsg.IsBodyHtml = HtmlCB.Checked;
    nContain += mailMsg.Body.Length; ///添加邮件附件
    HttpFileCollection fileList = HttpContext.Current.Request.Files;
    for(int i = 0; i < fileList.Count; i++)
    {   ///添加单个附件
    HttpPostedFile file = fileList[i];
    if(file.FileName.Length <= 0 || file.ContentLength <= 0)
    {
    break;
    }
                Attachment attachment = new Attachment(file.FileName);
    mailMsg.Attachments.Add(attachment);
    nContain += file.ContentLength;
    } if(mailMsg.IsBodyHtml == true)
    {
    nContain += 100;
    } try
    {   ///发送邮件
    IMail mail = new Mail();
    mail.SenderMail(mailMsg); ///保存发送的邮件
    int nMailID = mail.SaveAsMail(mailMsg.Subject,mailMsg.Body,from,
    To.Text.Trim(),CC.Text.Trim(),mailMsg.IsBodyHtml,
    nContain,mailMsg.Attachments.Count > 0 ? true : false);

    if(nMailID > 0)
    {   ///保存发送邮件的附件
    for(int i = 0; i < fileList.Count; i++)
    {   ///添加单个附件
    HttpPostedFile file = fileList[i];
    if(file.FileName.Length <= 0 || file.ContentLength <= 0)
    {
    break;
    }
    ///保存附件到硬盘中
    file.SaveAs(MapPath("MailAttachments/" + Path.GetFileName(file.FileName)));
    ///保存发送邮件的附件
    mail.SaveAsMailAttachment(
    Path.GetFileName(file.FileName),
    "MailAttachments/" + Path.GetFileName(file.FileName),
    file.ContentType,
    file.ContentLength,
    nMailID);
    }
    }
    }
    catch(Exception ex)
    {   ///跳转到异常错误处理页面
    Response.Redirect("ErrorPage.aspx?ErrorMsg=" + ex.Message.Replace("<br>","").Replace("\n","")
    + "&ErrorUrl=" + Request.Url.ToString().Replace("<br>","").Replace("\n",""));
    }
    Response.Redirect("~/MailDesktop.aspx");
    }
      

  4.   

    你倒过来了,httpposted过来的文件需要先保存下来,然后才可以作为附件发出去,客户端上传的是文件流,没办法发email的。
      

  5.   

    楼主在做邮件收发系统哈~~本人最近也正在做,收官阶段遇到一个问题:就是附件的解码问题,对纯文本文件的解码是没有问题的,但是图片,音频文件,.exe文件的解码会出问题.请文阁下是怎么解决的?处理附件的主要思路如何?
    在下感激不尽!