频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

关于.NET邮件的收发问题总结

来源: 作者: 出处:巧巧读书 2007-10-22 进入讨论组

讨论组http://group.qqread.com

发送邮件现在应用得最多的两种情况就是利用.NET自带的发送邮件和利用jmail组件来发送邮件。
       .NET自带的邮件发送利用了System.Web.Mail.MailMessage这个类,这是在VS2003的情况下,在VS2005下更多的是利用System.Net.Mail.MailMessage,下面的例子是在VS2003的情况下写的,请在应用的时候自己替换掉里面的参数。

关于.NET邮件的收发问题总结(图一)
            string SendTos=SendTo.Text.Trim();  //发送人
关于.NET邮件的收发问题总结(图一)            string CcTos=CcTo.Text.Trim();      //抄送人
关于.NET邮件的收发问题总结(图一)            string[] Receiver=System.Text.RegularExpressions.Regex.Split(SendTos+CcTos,",");  //总收件人
关于.NET邮件的收发问题总结(图一)            string FromMail="ustbwuyi1@163.com";//发件人
关于.NET邮件的收发问题总结(图一)            string Title="你好"; //邮件主题
关于.NET邮件的收发问题总结(图一)            string Body="附件里重要文档,请查收!";   //邮件主体
关于.NET邮件的收发问题总结(图一)            string ShowName="ustbwuyi";//显示名字
关于.NET邮件的收发问题总结(图一)
关于.NET邮件的收发问题总结(图一)            if(SendTos!="" || CcTos!="")
关于.NET邮件的收发问题总结(图二)关于.NET邮件的收发问题总结(图三)            ...{
关于.NET邮件的收发问题总结(图四)                //用户名(取发送邮箱的@前面的部分,即ustbwuyi1
关于.NET邮件的收发问题总结(图四)                string MailUserName=FromMail.Substring(0,FromMail.IndexOf("@"));
关于.NET邮件的收发问题总结(图四)
关于.NET邮件的收发问题总结(图四)                //密码
关于.NET邮件的收发问题总结(图四)                string MailPassword="ustbwuyi";
关于.NET邮件的收发问题总结(图四)                System.Web.Mail.MailMessage mailmessage=new MailMessage();
关于.NET邮件的收发问题总结(图四)                mailmessage.From=FromMail;
关于.NET邮件的收发问题总结(图四)                mailmessage.Subject=Title;
关于.NET邮件的收发问题总结(图四)                mailmessage.Body=Body;
关于.NET邮件的收发问题总结(图四)
关于.NET邮件的收发问题总结(图四)                //添加附件
关于.NET邮件的收发问题总结(图四)
关于.NET邮件的收发问题总结(图四)                ArrayList FileNames;
关于.NET邮件的收发问题总结(图四)                //如果存在附件
关于.NET邮件的收发问题总结(图四)                if(FileNames.Count>=1)
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                ...{                    
关于.NET邮件的收发问题总结(图四)                    //添加附件
关于.NET邮件的收发问题总结(图四)                        string Filename;
关于.NET邮件的收发问题总结(图四)                        for(int k=0;k<FileNames.Count;k++)
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                        ...{                            
关于.NET邮件的收发问题总结(图四)                            Filename=FileNames[k].ToString();
关于.NET邮件的收发问题总结(图四)                            mailmessage.Attachments.Add(new MailAttachment(Filename));                        
关于.NET邮件的收发问题总结(图七)                        }            
关于.NET邮件的收发问题总结(图七)                    }
关于.NET邮件的收发问题总结(图八)                }
关于.NET邮件的收发问题总结(图一)                mailmessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",1);
关于.NET邮件的收发问题总结(图一)                mailmessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername",MailUserName);
关于.NET邮件的收发问题总结(图一)                mailmessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword",MailPassword);
关于.NET邮件的收发问题总结(图一)
关于.NET邮件的收发问题总结(图一)                
关于.NET邮件的收发问题总结(图一)            //向收件人和抄送人循环发送
关于.NET邮件的收发问题总结(图一)                for(int j=0;j<Receiver.Length;j++)
关于.NET邮件的收发问题总结(图二)关于.NET邮件的收发问题总结(图三)                ...{
关于.NET邮件的收发问题总结(图四)                    mailmessage.To=Receiver[j].ToString();
关于.NET邮件的收发问题总结(图四)                    System.Web.Mail.SmtpMail.SmtpServer="smtp.163.com";
关于.NET邮件的收发问题总结(图四)                    try
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                    ...{
关于.NET邮件的收发问题总结(图四)                        System.Web.Mail.SmtpMail.Send(mailmessage);
关于.NET邮件的收发问题总结(图七)                    }
关于.NET邮件的收发问题总结(图四)                    catch(Exception ex)
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                    ...{        
关于.NET邮件的收发问题总结(图四)                        Response.Write("<script language='javascript'>alert('邮件发送失败,请您和ustbwuyi联系(QQ:108556024)!')</script>");
关于.NET邮件的收发问题总结(图七)                    }
关于.NET邮件的收发问题总结(图八)                }
关于.NET邮件的收发问题总结(图一)            }
关于.NET邮件的收发问题总结(图一)

上面的例子是利用163的SMTP邮件服务器来发送邮件,当然,如果你有自己的邮件服务器更好。


      其次,是利用jmail组件来发送,现在jmail组件的版本很多,在这里我个人推荐jmail4.4pro版本,因为如果你要收邮件的话,必须用pro版本,另外,个人经过测试了其它几个版本,发现只有这个版本不会出现附件丢失的情况,其他几个版本都会出现附件丢失或者损坏的情况,这个对txt文件来说没有影响,但是对于传送图片或者其他的一些压缩文件,会发现从pop服务器上下过来的附件有一些损坏,从而不能正常打开文件。下面是jmail发送邮件的代码。

关于.NET邮件的收发问题总结(图一)jmail.MessageClass MyMail = new jmail.MessageClass();
关于.NET邮件的收发问题总结(图一)
关于.NET邮件的收发问题总结(图一)            string SendTos=SendTo.Text.Trim();  //发送人
关于.NET邮件的收发问题总结(图一)            string CcTos=CcTo.Text.Trim();      //抄送人
关于.NET邮件的收发问题总结(图一)            string[] Receiver=System.Text.RegularExpressions.Regex.Split(SendTos+CcTos,",");  //总收件人
关于.NET邮件的收发问题总结(图一)            string FromMail="ustbwuyi1@163.com";//发件人
关于.NET邮件的收发问题总结(图一)            string Title="你好"; //邮件主题
关于.NET邮件的收发问题总结(图一)            string Body="附件里是重要文档,请查收!";   //邮件主体
关于.NET邮件的收发问题总结(图一)            string ShowName="ustbwuyi";//显示名字
关于.NET邮件的收发问题总结(图一)            //取email的@前面部分为用户名,即ustbwuyi1,当然也可以自己设置.
关于.NET邮件的收发问题总结(图一)            string MailUserName=FromMail.Substring(0,FromMail.IndexOf("@"));
关于.NET邮件的收发问题总结(图一)            string MailPassword="ustbwuyi";
关于.NET邮件的收发问题总结(图一)            if(SendTos!="" || CcTos!="")
关于.NET邮件的收发问题总结(图二)关于.NET邮件的收发问题总结(图三)            ...{
关于.NET邮件的收发问题总结(图四)
关于.NET邮件的收发问题总结(图四)                // 字符集
关于.NET邮件的收发问题总结(图四)                MyMail.Charset = "GB2312";
关于.NET邮件的收发问题总结(图四)                //附件的编码格式
关于.NET邮件的收发问题总结(图四)                MyMail.Encoding = "BASE64";
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                /**//**//**/////是否将信头编码成iso-8859-1字符集
关于.NET邮件的收发问题总结(图四)                     MyMail.ISOEncodeHeaders = false;
关于.NET邮件的收发问题总结(图四)                //发送人邮件地址
关于.NET邮件的收发问题总结(图四)                MyMail.From = FromMail;
关于.NET邮件的收发问题总结(图四)                //发送人姓名
关于.NET邮件的收发问题总结(图四)                MyMail.FromName = ShowName;
关于.NET邮件的收发问题总结(图四)                // 邮件主题
关于.NET邮件的收发问题总结(图四)                MyMail.Subject =Title;
关于.NET邮件的收发问题总结(图四)                     //身份验证的用户名
关于.NET邮件的收发问题总结(图四)                MyMail.MailServerUserName = MailUserName;
关于.NET邮件的收发问题总结(图四)                //用户密码
关于.NET邮件的收发问题总结(图四)                MyMail.MailServerPassWord = MailPassword;
关于.NET邮件的收发问题总结(图四)                     //邮件内容
关于.NET邮件的收发问题总结(图四)                MyMail.Body = Body;
关于.NET邮件的收发问题总结(图四)                ArrayList FileNames;
关于.NET邮件的收发问题总结(图四)                    //如果存在附件
关于.NET邮件的收发问题总结(图四)                    if(FileNames.Count>=1)
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                    ...{
关于.NET邮件的收发问题总结(图四)                        //添加附件
关于.NET邮件的收发问题总结(图四)                        string Filename;
关于.NET邮件的收发问题总结(图四)                        for(int k=0;k<FileNames.Count;k++)
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                        ...{
关于.NET邮件的收发问题总结(图四)                            Filename=FileNames[k].ToString();
关于.NET邮件的收发问题总结(图四)                            MyMail.AddAttachment(Filename,false,HttpUtility.UrlDecode(Filename.Substring(Filename.LastIndexOf(".")+1,3)));
关于.NET邮件的收发问题总结(图七)                        }            
关于.NET邮件的收发问题总结(图七)                    }
关于.NET邮件的收发问题总结(图四)
关于.NET邮件的收发问题总结(图四)                try
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                ...{
关于.NET邮件的收发问题总结(图四)                    //循环发送
关于.NET邮件的收发问题总结(图四)                    for(int i=0;i<Receiver.Length;i++)
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                    ...{
关于.NET邮件的收发问题总结(图四)                        MyMail.AddRecipient(Receiver[i],"","");
关于.NET邮件的收发问题总结(图四)                        MyMail.Send("Mail.rshi.cn",false);
关于.NET邮件的收发问题总结(图七)                    }
关于.NET邮件的收发问题总结(图四)                
关于.NET邮件的收发问题总结(图四)            
关于.NET邮件的收发问题总结(图七)                }
关于.NET邮件的收发问题总结(图四)                catch(Exception ex)
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                ...{
关于.NET邮件的收发问题总结(图四)                Response.Write("<script language='javascript'>alert('邮件发送失败,请您和ustbwuyi联系(QQ:108556024)!')</script>");
关于.NET邮件的收发问题总结(图四)
关于.NET邮件的收发问题总结(图七)                }
关于.NET邮件的收发问题总结(图八)            }

       好了,现在我们来看看接收邮件的问题。一般来说,接收邮件主要分为两部分,一是将接收到的邮件的信息保存到数据库,如邮件的
主题,内容,发送人,发送时间等。其次是对邮件附件的处理,主要将邮件附件从POP服务器上下载下来并保存到数据库,然后将附件
信息保存到数据库,如附件的路径,附件对应的邮件编号等信息。这一点.NET自带的似乎并不太好处理,没有jmail组件处理方便,
当然关于.NET自带的我并没有深入研究,个人经过比较还是推荐jmail,当然前面说过关于jmail几个版本在这方面的差异,所以个人
还是推荐jmail4.4pro版本。下面是收邮件的代码:

关于.NET邮件的收发问题总结(图一)    public void ReceiveMails(string Username)
关于.NET邮件的收发问题总结(图二)关于.NET邮件的收发问题总结(图三)        ...{
关于.NET邮件的收发问题总结(图四)            
关于.NET邮件的收发问题总结(图四)            jmail.Message Msg=new jmail.Message();
关于.NET邮件的收发问题总结(图四)            jmail.POP3 jpop = new jmail.POP3();
关于.NET邮件的收发问题总结(图四)            jmail.Attachments atts;
关于.NET邮件的收发问题总结(图四)            jmail.Attachment att;
关于.NET邮件的收发问题总结(图四)            
关于.NET邮件的收发问题总结(图四)            //username为用户名,该方法通过用户名获取该用户的pop设置,即用户的POP用户名,密码,POP服务器地址以及端口号这四个参数,这四个参数是连接POP服务器的必用参数.
关于.NET邮件的收发问题总结(图四)                SqlDataReader dataReader = this.ExtGetSetting(Username);
关于.NET邮件的收发问题总结(图四)                if(dataReader.Read())
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                ...{
关于.NET邮件的收发问题总结(图四)                    if(dataReader["PopServer"].ToString()!=""&&dataReader["PopUsername"].ToString()!="")
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                    ...{
关于.NET邮件的收发问题总结(图四)                        //连接POP服务器
关于.NET邮件的收发问题总结(图四)                        jpop.Connect(dataReader["PopUsername"].ToString(),dataReader["PopPassword"].ToString(),dataReader["PopServer"].ToString(),Int32.Parse(dataReader["PopPort"].ToString()));
关于.NET邮件的收发问题总结(图四)                        //如果服务器上有邮件
关于.NET邮件的收发问题总结(图四)                        if(jpop.Count>=1)
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                        ...{
关于.NET邮件的收发问题总结(图四)                         for(int i=1;i<=jpop.Count;i++)
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                            ...{
关于.NET邮件的收发问题总结(图四)                            
关于.NET邮件的收发问题总结(图四)                                Msg = jpop.Messages[i];
关于.NET邮件的收发问题总结(图四)                                atts=Msg.Attachments;
关于.NET邮件的收发问题总结(图四)
关于.NET邮件的收发问题总结(图四)                             //取数据库中邮件信息中的最大发送时间,即最近接收到的一封邮件的时间
关于.NET邮件的收发问题总结(图四)                                Database dbase=new Database();
关于.NET邮件的收发问题总结(图四)                                DataTable data=dbase.GetDataTable("select max(MailSendDate) as MailSenderDate from TabMailList where MailTypeFlag='1'");
关于.NET邮件的收发问题总结(图四)                                
关于.NET邮件的收发问题总结(图四)                             //对服务器上的邮件的发送时间和数据库最近一封邮件的时间进行比较,如果大那么证明该邮件还未被收取,是一封新邮件,这样避免重复收取邮件入库
关于.NET邮件的收发问题总结(图四)                                if(Msg.Date>Convert.ToDateTime(data.Rows[0][0].ToString()))
关于.NET邮件的收发问题总结(图四)
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                                ...{
关于.NET邮件的收发问题总结(图四)                                    //将这封新邮件的信息保存到数据库
关于.NET邮件的收发问题总结(图四)                                    this.SaveExtMail(Msg,Username,dataReader["Email"].ToString(),jpop.GetMessageUID(i));
关于.NET邮件的收发问题总结(图四)                            
关于.NET邮件的收发问题总结(图四)                                    //获取附件上传到服务器并且将信息存入数据库
关于.NET邮件的收发问题总结(图四)                                    if(atts.Count>=1)
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                                    ...{
关于.NET邮件的收发问题总结(图四)                                        for(int k=0;k<atts.Count;k++)
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                                        ...{
关于.NET邮件的收发问题总结(图四)
关于.NET邮件的收发问题总结(图四)                                            att=atts[k];//获得附件
关于.NET邮件的收发问题总结(图四)
关于.NET邮件的收发问题总结(图四)                                            string attname=att.Name;
关于.NET邮件的收发问题总结(图四)                                            try
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                                            ...{
关于.NET邮件的收发问题总结(图四)
关于.NET邮件的收发问题总结(图四)                                                Random TempNameInt    = new Random(); 
关于.NET邮件的收发问题总结(图四)                                                string NewMailDirName  = TempNameInt.Next(100000000).ToString();
关于.NET邮件的收发问题总结(图四)                                                Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath(".")+"\AttachFiles\"+Username+"\"+NewMailDirName);
关于.NET邮件的收发问题总结(图四)                
关于.NET邮件的收发问题总结(图四)                                                string mailPath="\AttachFiles\"+Username+"\"+NewMailDirName+"\"+attname;
关于.NET邮件的收发问题总结(图四)            
关于.NET邮件的收发问题总结(图四)                                                att.SaveToFile(System.Web.HttpContext.Current.Server.MapPath(".")+mailPath); 
关于.NET邮件的收发问题总结(图四)                                                
关于.NET邮件的收发问题总结(图四)                                                //获取该封邮件在数据库的ID,以便和附件信息相对应,取邮件表中的最大ID即可 
关于.NET邮件的收发问题总结(图四)                                                int mailID=this.GetMailID();
关于.NET邮件的收发问题总结(图四)                                               //将附件信息存入数据库
关于.NET邮件的收发问题总结(图四)                                                this.AttExtSend(mailID,attname,att.Size,mailPath,Msg.From);
关于.NET邮件的收发问题总结(图七)                                            }
关于.NET邮件的收发问题总结(图四)                                            catch(Exception ex)
关于.NET邮件的收发问题总结(图五)关于.NET邮件的收发问题总结(图六)                                            ...{
关于.NET邮件的收发问题总结(图四)                                                throw new Exception(ex.Message);
关于.NET邮件的收发问题总结(图七)                                            }
关于.NET邮件的收发问题总结(图四)                                        
关于.NET邮件的收发问题总结(图七)                                        }
关于.NET邮件的收发问题总结(图七)                                    }                                        
关于.NET邮件的收发问题总结(图七)                                }                            
关于.NET邮件的收发问题总结(图七)                            }                        
关于.NET邮件的收发问题总结(图七)                        }    
关于.NET邮件的收发问题总结(图四)
关于.NET邮件的收发问题总结(图四)                        //删除服务器上的邮件
关于.NET邮件的收发问题总结(图四)                        jpop.DeleteMessages();
关于.NET邮件的收发问题总结(图四)                        //断开连接    
关于.NET邮件的收发问题总结(图四)                        jpop.Disconnect();
关于.NET邮件的收发问题总结(图七)                    }
关于.NET邮件的收发问题总结(图四)                
关于.NET邮件的收发问题总结(图七)            }
关于.NET邮件的收发问题总结(图八)        }
关于.NET邮件的收发问题总结(图一)


       至于将邮件信息和附件信息如何存入数据库,就看你自己对表的设计了,我就不多说了,经过上面就可以完全将你POP服务器上的
邮件完全接收到你的本地了。

更多文章 更多内容请看.NET移动与嵌入式技术.NET开发手册邮件服务器专题专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章