`
pcajax
  • 浏览: 2159385 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

发送邮件现在应用得最多的两种情况就是利用.NET自带的发送邮件和利用jmail组件来发送邮件。

阅读更多


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

public void SendMails()
...{
    string SendTos=SendTo.Text.Trim();  //发送人
    string CcTos=CcTo.Text.Trim();      //抄送人
    string[] Receiver=System.Text.RegularExpressions.Regex.Split(SendTos+CcTos,",");  //总收件人
    string FromMail="mailto:ustbwuyi1@163.com%22;//发件人
    string Title="你好"; //邮件主题
    string Body="附件里重要文档,请查收!";   //邮件主体
    string ShowName="ustbwuyi";//显示名字

    if(SendTos!="" || CcTos!="")
    ...{
        //用户名(取发送邮箱的@前面的部分,即ustbwuyi1
        string MailUserName=FromMail.Substring(0,FromMail.IndexOf("@"));

        //密码
        string MailPassword="ustbwuyi";
        System.Web.Mail.MailMessage mailmessage=new MailMessage();
        mailmessage.From=FromMail;
        mailmessage.Subject=Title;
        mailmessage.Body=Body;

        //添加附件
        ArrayList FileNames;
        //如果存在附件
        if(FileNames.Count>=1)
        ...{                   
            //添加附件
            string Filename;
            for(int k=0;k<FileNames.Count;k++)
            ...{                           
                Filename=FileNames[k].ToString();
                mailmessage.Attachments.Add(new MailAttachment(Filename));                       
            }           
        }
    }
    mailmessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate%22,1);
    mailmessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername%22,MailUserName);
    mailmessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword%22,MailPassword);
                   
    //向收件人和抄送人循环发送
    for(int j=0;j<Receiver.Length;j++)
    ...{
        mailmessage.To=Receiver[j].ToString();
        System.Web.Mail.SmtpMail.SmtpServer="smtp.163.com";
        try
        ...{
            System.Web.Mail.SmtpMail.Send(mailmessage);
        }
        catch(Exception ex)
        ...{       
            Response.Write("<script language='javascript'>alert('邮件发送失败,请您和ustbwuyi联系(QQ:108556024)!')</script>");
        }
    }
}
  上面的例子是利用163的SMTP邮件服务器来发送邮件,当然,如果你有自己的邮件服务器更好。
  其次,是利用jmail组件来发送,现在jmail组件的版本很多,在这里我个人推荐jmail4.4pro版本,因为如果你要收邮件的话,必须用pro版本,另外,个人经过测试了其它几个版本,发现只有这个版本不会出现附件丢失的情况,其他几个版本都会出现附件丢失或者损坏的情况,这个对txt文件来说没有影响,但是对于传送图片或者其他的一些压缩文件,会发现从pop服务器上下过来的附件有一些损坏,从而不能正常打开文件。下面是jmail发送邮件的代码。

public void SendMails()
...{
    jmail.MessageClass MyMail = new jmail.MessageClass();
    string SendTos=SendTo.Text.Trim();  //发送人
    string CcTos=CcTo.Text.Trim();      //抄送人
    string[] Receiver=System.Text.RegularExpressions.Regex.Split(SendTos+CcTos,",");  //总收件人
    string FromMail="mailto:ustbwuyi1@163.com%22;//发件人
    string Title="你好"; //邮件主题
    string Body="附件里是重要文档,请查收!";   //邮件主体
    string ShowName="ustbwuyi";//显示名字
    //取email的@前面部分为用户名,即ustbwuyi1,当然也可以自己设置.
    string MailUserName=FromMail.Substring(0,FromMail.IndexOf("@"));
    string MailPassword="ustbwuyi";
    if(SendTos!="" || CcTos!="")
    ...{
        // 字符集
        MyMail.Charset = "GB2312";
        //附件的编码格式
        MyMail.Encoding = "BASE64";
        //是否将信头编码成iso-8859-1字符集
        MyMail.ISOEncodeHeaders = false;
        //发送人邮件地址
        MyMail.From = FromMail;
        //发送人姓名
        MyMail.FromName = ShowName;
        // 邮件主题
        MyMail.Subject =Title;
        //身份验证的用户名
        MyMail.MailServerUserName = MailUserName;
        //用户密码
        MyMail.MailServerPassWord = MailPassword;
        //邮件内容
        MyMail.Body = Body;
        ArrayList FileNames;
        //如果存在附件
        if(FileNames.Count>=1)
        ...{
            //添加附件
            string Filename;
            for(int k=0;k<FileNames.Count;k++)
            ...{
                Filename=FileNames[k].ToString();
                MyMail.AddAttachment(Filename,false,HttpUtility.UrlDecode(Filename.Substring(Filename.LastIndexOf(".")+1,3)));
            }           
        }

        try
        ...{
            //循环发送
            for(int i=0;i<Receiver.Length;i++)
            ...{
                MyMail.AddRecipient(Receiver[i],"","");
                MyMail.Send("Mail.rshi.cn",false);
            }
                   
        }
        catch(Exception ex)
        ...{
            Response.Write("<script language='javascript'>alert('邮件发送失败,请您和ustbwuyi联系(QQ:108556024)!')</script>");
        }
    }
}
  好了,现在我们来看看接收邮件的问题。一般来说,接收邮件主要分为两部分,一是将接收到的邮件的信息保存到数据库,如邮件的主题,内容,发送人,发送时间等。其次是对邮件附件的处理,主要将邮件附件从POP服务器上下载下来并保存到数据库,然后将附件信息保存到数据库,如附件的路径,附件对应的邮件编号等信息。这一点.NET自带的似乎并不太好处理,没有jmail组件处理方便,当然关于.NET自带的我并没有深入研究,个人经过比较还是推荐jmail,当然前面说过关于jmail几个版本在这方面的差异,所以个人还是推荐jmail4.4pro版本。下面是收邮件的代码:

public void ReceiveMails(string Username)
...{
    jmail.Message Msg=new jmail.Message();
    jmail.POP3 jpop = new jmail.POP3();
    jmail.Attachments atts;
    jmail.Attachment att;
           
    //username为用户名,该方法通过用户名获取该用户的pop设置,即用户的POP用户名,密码,POP服务器地址以及端口号这四个参数,这四个参数是连接POP服务器的必用参数.
    SqlDataReader dataReader = this.ExtGetSetting(Username);
    if(dataReader.Read())
    ...{
        if(dataReader["PopServer"].ToString()!=""&&dataReader["PopUsername"].ToString()!="")
        ...{
            //连接POP服务器
            jpop.Connect(dataReader["PopUsername"].ToString(),dataReader["PopPassword"].ToString(),dataReader["PopServer"].ToString(),Int32.Parse(dataReader["PopPort"].ToString()));
            //如果服务器上有邮件
            if(jpop.Count>=1)
            ...{
                for(int i=1;i<=jpop.Count;i++)
                ...{
                    Msg = jpop.Messages[i];
                    atts=Msg.Attachments;

                    //取数据库中邮件信息中的最大发送时间,即最近接收到的一封邮件的时间
                    Database dbase=new Database();
                    DataTable data=dbase.GetDataTable("select max(MailSendDate) as MailSenderDate from TabMailList where MailTypeFlag='1'");
                               
                    //对服务器上的邮件的发送时间和数据库最近一封邮件的时间进行比较,如果大那么证明该邮件还未被收取,是一封新邮件,这样避免重复收取邮件入库
                    if(Msg.Date>Convert.ToDateTime(data.Rows[0][0].ToString()))
                    ...{
                        //将这封新邮件的信息保存到数据库
                        this.SaveExtMail(Msg,Username,dataReader["Email"].ToString(),jpop.GetMessageUID(i));
                           
                        //获取附件上传到服务器并且将信息存入数据库
                        if(atts.Count>=1)
                        ...{
                            for(int k=0;k<atts.Count;k++)
                            ...{
                                att=atts[k];//获得附件
                                string attname=att.Name;
                                try
                                ...{
                                    Random TempNameInt    = new Random();
                                    string NewMailDirName  = TempNameInt.Next(100000000).ToString();
                                    Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath(".")+"AttachFiles"+Username+""+NewMailDirName);
                                    string mailPath="AttachFiles"+Username+""+NewMailDirName+""+attname;
                                    att.SaveToFile(System.Web.HttpContext.Current.Server.MapPath(".")+mailPath);
                                    //获取该封邮件在数据库的ID,以便和附件信息相对应,取邮件表中的最大ID即可
                                    int mailID=this.GetMailID();
                                    //将附件信息存入数据库
                                    this.AttExtSend(mailID,attname,att.Size,mailPath,Msg.From);
                                }
                                catch(Exception ex)
                                ...{
                                    throw new Exception(ex.Message);
                                }
                            }
                        }
                    }
                }
            }
            //删除服务器上的邮件
            jpop.DeleteMessages();
            //断开连接
            jpop.Disconnect();
        }
    }
}
至于将邮件信息和附件信息如何存入数据库,就看你自己对表的设计了,我就不多说了,经过上面就可以完全将你POP服务器上的邮件完全接收到你的本地了。


 

分享到:
评论

相关推荐

    asp.net中使用Jmail发送邮件

    首先,Jmail是一个由DimiSoft公司开发的组件,它支持SMTP、POP3、IMAP等协议,使得在.NET应用程序中发送和接收邮件变得简单。Jmail提供了丰富的功能,包括HTML邮件、附件、多语言支持、邮件模板等,非常适合企业级...

    asp.net利用Jmail发送邮件和接收全部代码

    1. **Jmail库介绍**:Jmail是专门为.NET Framework设计的一个邮件处理组件,它允许开发者在ASP.NET应用程序中方便地发送和接收邮件。它支持SMTP(Simple Mail Transfer Protocol)协议发送邮件,以及POP3(Post ...

    jmail发送邮件 asp.net使用jmail

    jmail jmail是一种服务器端的邮件发送组件,和个人用的客户端邮件软件不一样的。jmail是在服务器上给程序用来发邮件用的,除了软件编程人员,其他人一般平常用不上。  jmail是一个第三方邮件操作组件,通常位于web...

    利用Jmai.net组件收发邮件

    "利用Jmail.net组件收发邮件"是一个这样的解决方案,它允许程序员通过简单的API调用来实现邮件功能。下面我们将详细探讨Jmail.net组件及其在邮件收发中的应用。 **Jmail组件简介** Jmail是一款针对.NET Framework...

    jmail发邮件,.net自带mail发邮件

    在.NET框架中,发送电子邮件是常见的任务,通常有两种主要的方法:使用Jmail组件和使用内置的System.Net.Mail命名空间。这两种方法各有优缺点,适用于不同的场景。下面将详细讲解这两种方式。 首先,Jmail是一个第...

    ASP.NET邮件收发源码(jmail)

    ASP.NET邮件收发是Web应用程序开发中的重要组成部分,它允许开发者构建可以发送和接收电子邮件的系统。在本案例中,我们关注的是一个基于ASP.NET的邮件收发源码,使用了名为“jmail”的控件,它具备发送多附件的功能...

    jmail组件很好用的ASP.NET收发邮件组件

    jmail组件是专门为ASP.NET设计的邮件发送和接收工具,它提供了一种简单易用的方式来处理电子邮件通信。标题中提到的"jmail组件很好用的ASP.NET收发邮件组件",表明该组件在功能性和易用性上都有良好的表现。开发者...

    使用Jmail组件发送和接收邮件(含附件)

    JMail是一个流行的Java组件,它允许开发者轻松地在Java应用程序中实现邮件的发送和接收功能,包括处理附件。本篇文章将详细探讨如何使用JMail组件来完成邮件的发送与接收,以及如何处理邮件中的附件。 首先,我们来...

    Jmail .NET v1.1

    标题中的“Jmail .NET v1.1”指的是一个基于.NET框架的邮件发送组件,主要用于在Web应用程序中实现批量电子邮件的自动化发送。Jmail是一款功能强大的邮件服务工具,它为开发者提供了一种方便的方式来集成电子邮件...

    ASP.Net环境下使用Jmail组件发送邮件

    ASP.NET环境下使用Jmail组件发送邮件是一个常见的任务,尤其对于开发Web应用程序的程序员来说,能够通过电子邮件与用户交互是至关重要的。Jmail是一款用于发送邮件的ActiveX组件,它可以在ASP.NET环境中工作,尽管...

    ASP.NET 发邮件 JMail实例

    总的来说,JMail控件为ASP.NET开发者提供了一种方便且功能强大的方式来处理邮件发送,减少了与SMTP服务器交互的复杂性,使得开发者可以更专注于应用程序的核心业务逻辑。通过熟练掌握JMail的使用,你可以轻松地在ASP...

    asp.net 实现jmail 接收和发送邮件程序.zip

    JMail是专门为.NET Framework设计的一个邮件处理组件,它支持SMTP、POP3和IMAP4协议,可以用来发送和接收电子邮件。JMail包含了丰富的功能,如HTML邮件、附件、邮件模板、邮件队列等,使开发者能够高效地实现邮件...

    ASP.Net使用jmail和System.Net.Mail发送邮件

    ASP.NET 提供了多种方式来实现邮件发送功能,其中两种较为常用的方法是通过第三方库 Jmail 和 .NET Framework 自带的 `System.Net.Mail` 命名空间。 #### Jmail 库的使用 **Jmail** 是一款非常流行的用于 ASP.NET ...

    JMail 邮件发送添加组件

    总的来说,JMail邮件发送组件是.NET开发中实现邮件功能的一个实用工具,其易用性和强大的功能使其在许多网站后台应用中得到了广泛的应用。通过理解和熟练使用JMail,你可以快速实现邮件服务的集成,提升你的项目开发...

    c#.net收发邮件系统源码(jmail组件开发)

    这个项目使用了JMail组件来实现邮件的发送和接收,同时将接收到的邮件写入数据库,确保数据的安全性和可追溯性。下面我们将详细探讨这个系统的核心技术和知识点。 1. C#.NET基础:C#是一种面向对象的编程语言,由...

    Asp.Net邮件发送插件

    总之,这个Asp.Net邮件发送插件涵盖了基础的邮件发送技术以及两种可能的第三方组件,对于想要在Asp.Net应用中添加邮件功能的开发者来说,是一个非常有价值的资源。在实践中,不仅要理解邮件发送的基本原理,还要学会...

    ASP.NET源码——Jmail发送邮件系统源码.zip

    Jmail是一款广泛用于ASP.NET平台的邮件发送组件,它允许开发者通过简单的API调用来发送邮件。Jmail支持SMTP(简单邮件传输协议)和POP3(邮局协议)服务,可以处理HTML邮件、附件、多部分/混合内容以及邮件队列等...

    jmail4.4-发送邮件

    总结来说,`jmail4.4-发送邮件`是一个帮助开发者在ASP和ASP.NET环境中发送邮件的工具。通过理解Jmail的工作原理,学习其API和实例,开发者可以轻松地在自己的Web应用程序中实现邮件通信功能。无论你是初学者还是经验...

    利用Jmail发送邮件:

    ### 使用Jmail发送与接收邮件的关键技术点 #### 发送邮件 在提供的代码片段中,主要涉及了如何使用Jmail库来实现邮件的发送功能。Jmail是一个强大的.NET类库,用于开发支持SMTP、POP3协议的应用程序。下面将详细...

    C#利用jmail组件发送电子邮件

    首先,jMail是一款强大的.NET邮件组件,它允许开发者通过SMTP或POP3协议发送和接收电子邮件。在VS2008环境下,你需要先安装jMail组件及其相关的使用说明。安装包通常包含了jMail的DLL文件和详细的API文档,确保你...

Global site tag (gtag.js) - Google Analytics