| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1117 人关注过本帖
标题:System.Net.Mail发送附件总是失败
只看楼主 加入收藏
zhuxuanzhu
Rank: 1
等 级:新手上路
帖 子:12
专家分:3
注 册:2011-2-21
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:5 
System.Net.Mail发送附件总是失败
protected void btnSend_Click(object sender, EventArgs e)
  {
  if (this.txtReceiver.Text != string.Empty && this.txtSender.Text != string.Empty)
  {
  MailMessage myMail = new MailMessage();
  myMail.From = new MailAddress(txtSender.Text.Trim(), "TT", Encoding.UTF8);
  myMail.To.Add(new MailAddress(txtReceiver.Text.Trim(), "Troy", Encoding.UTF8));
  myMail.Subject = txtSubject.Text.Trim();
  myMail.Body = txtContent.Text.Trim();
  myMail.Priority = MailPriority.High;
  string sFilePath = this.upFile.PostedFile.FileName;
  FileInfo fi = new FileInfo(sFilePath);
  if (fi.Exists)
  {
  Attachment myAttachment = new Attachment(sFilePath, );
   disposition = myAttachment.ContentDisposition;
  disposition.CreationDate = File.GetCreationTime(sFilePath);
  disposition.ModificationDate = File.GetLastWriteTime(sFilePath);
  disposition.ReadDate = File.GetLastAccessTime(sFilePath);
  myMail.Attachments.Add(myAttachment);
  }
  SmtpClient client = new SmtpClient("smtp., 25);
  client.Credentials = new (this.txtSUser.Text.Trim(), this.txtEPwd.Text.Trim());
  client.Send(myMail);
  }
  }



这是代码,问题是,如果我在FileUpload控件中添加一个文件,路径是C:\user\desktop,那么FileInfo对象fi在调用exists()函数就永远是false,如果把if条件拿掉,提示该文件不在C:\Program Files (x86)\Common Files\microsoft shared\DevServer里面。然后我试着把文件放进这个文件夹中,又发现一个问题,提示是invalid mail header '周',为什么不添加附件什么问题都没有,只有一添加一个附件就会有问题呢?求高手解答!!最好两个问题都能给点提示,文件路径和mail header的编码问题。。
搜索更多相关主题的帖子: void 
2011-02-21 22:35
zhuxuanzhu
Rank: 1
等 级:新手上路
帖 子:12
专家分:3
注 册:2011-2-21
收藏
得分:0 
补充::
后来测试下来是ContentDispotion的三个属性添加问题,如果不给disposition添加属性,文件就能发送成功,但是一添加就会出现invalid mail header‘周’,这又是为什么呢?求教!!谢谢
2011-02-22 10:20
hhy420459674
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:203
专家分:179
注 册:2010-4-9
收藏
得分:0 
我现在也正在做邮件功能:
给你看看我的代码(成功的):
程序代码:
SmtpClient client = new SmtpClient("服务器域名");

            //验证邮箱用户名 密码
            NetworkCredential ncd = new NetworkCredential("userName", "password");
            client.Credentials = ncd;
           
            MailMessage mess = new MailMessage();
            MailAddress addrFrom = new MailAddress(from);
            mess.From = addrFrom;

            string[] strTo = to.Split(';');
            for (int i = 0; i < strTo.Length; i++)
            {
                if (strTo[i] != "")
                {
                    MailAddress addressTo = new MailAddress(strTo[i]);
                    mess.To.Add(addressTo);
                }
            }

            mess.Subject = subject;
            mess.SubjectEncoding = System.Text.Encoding.GetEncoding("GB2312");
            mess.Body = body;
            mess.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");
            mess.IsBodyHtml = true;
            mess.Priority = MailPriority.Normal;

            //抄送地址
            if (cc.Visible == true)
            {
                string ccs = TB_Cc.Text.Trim();
                string[] strCc = ccs.Split(';');
                for (int i = 0; i < strCc.Length; i++)
                {
                    if (strCc[i] != "")
                    {
                        MailAddress addrCC = new MailAddress(strCc[i]);
                        mess.CC.Add(addrCC);
                    }
                }
            }

            //密送地址
            if (bcc.Visible == true)
            {
                string bccs = TB_Bcc.Text.Trim();
                string[] strBcc = bccs.Split(';');
                for (int i = 0; i < strBcc.Length; i++)
                {
                    if (strBcc[i] != "")
                    {
                        MailAddress addrBcc = new MailAddress(strBcc[i]);
                        mess.Bcc.Add(addrBcc);
                    }
                }
            }

            //附件处理
            HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
            int fileLeng = 0;
            for (int i = 0; i < files.Count; i++)
            {
                HttpPostedFile file = files[i];     //得到其中的一个文件
                if (file.ContentLength > 0)
                {
                    fileLeng += file.ContentLength;
                     streamFile = file.InputStream;  //返回的上传文件的文件流
                    string uLoadType = file.ContentType;
                    ContentType contentTpye = new ContentType();//获取或设置由此实例表示的 Content-Type 标头.
                    contentTpye.MediaType = uLoadType;//数据的类型为上传文件的类型
                    Attachment attachment = new Attachment(streamFile, contentTpye);
                    mess.Attachments.Add(attachment);
                }
            }
client.Send(mess);          //发送邮件
                mess.Dispose();

引用的命名空间:
using
using
using

你看看对你有帮助不?
2011-02-23 17:22
zhuxuanzhu
Rank: 1
等 级:新手上路
帖 子:12
专家分:3
注 册:2011-2-21
收藏
得分:0 
回复 3楼 hhy420459674
//附件处理
            HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
            int fileLeng = 0;
            for (int i = 0; i < files.Count; i++)
            {
                HttpPostedFile file = files[i];     //得到其中的一个文件
                if (file.ContentLength > 0)
                {
                    fileLeng += file.ContentLength;
                     streamFile = file.InputStream;  //返回的上传文件的文件流
                    string uLoadType = file.ContentType;
                    ContentType contentTpye = new ContentType();//获取或设置由此实例表示的 Content-Type 标头.
                    contentTpye.MediaType = uLoadType;//数据的类型为上传文件的类型
                    Attachment attachment = new Attachment(streamFile, contentTpye);
                    mess.Attachments.Add(attachment);
                }
            }


我用你这段代码就无法发送附件了。。。原来我把disposition注释掉还可以的。。你这里面的file对象是上传的文件流吧,我是直接用文件路径作为参数来发送附件的,文件流的话,是不是必须把文件上传到服务器的?我想问的是,你用这段代码的时候,附件是在哪儿呢?在桌面上还是?网页里附件的添加方法是通过upLoad控件吗?还是什么呢?求教~3Q
2011-02-23 21:12
hhy420459674
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:203
专家分:179
注 册:2010-4-9
收藏
得分:10 
我使用的js添加上传控件的:<input type=file name=upload1>
然后再body中的form1中这样子:<form id="form1" runat="server" enctype="multipart/form-data">
在后台就可以用我那样子写的代码了,就可以获取到上传的文件

我是用的流的方式发送
2011-02-24 08:48
zhuxuanzhu
Rank: 1
等 级:新手上路
帖 子:12
专家分:3
注 册:2011-2-21
收藏
得分:0 
回复 5楼 hhy420459674
我试试看···
2011-02-24 17:26
快速回复:System.Net.Mail发送附件总是失败
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019658 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved