首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>NET专区>C#语言>c#中收发邮件处理代码(POP3,IMAP,SMTP)
c#中收发邮件处理代码(POP3,IMAP,SMTP)
来源: 发布时间:2007-10-22 发布人: 浏览: 人次   字体: [ ]  

但是这种方式的一个问题就是关于解析信件的格式。如果是附件的话,他也直接给出了二进制,不容易使用。
所以,可以使用一个现成的工具:LumiSoft.Net.POP3.Client。这里面已经给写好了实现,用起来也很简单。
这是一个简单的用法(这里使用了两种处理方式,前一种是不建议使用的)
。。
            using (POP3_Client pop3 = new POP3_Client())
            {
                //与Pop3服务器建立连接
                pop3.Connect(_popServer, _pop3port,false);
                //验证身份
                pop3.Authenticate(_user, _pwd, false);

                //get all messages
                POP3_MessagesInfo infos = pop3.GetMessagesInfo();
                 foreach (POP3_MessageInfo info in infos)
                {
                    byte[] bytes = pop3.GetMessage(info.MessageNumber);
                    Mime mime = Mime.Parse(bytes);
                    HandleMail(mime);
                    //delete it at last
                    //pop3.DeleteMessage(info.MessageNumber);
                }
                //the second way to do it
//for (int i = 0; i < pop3.Messages.Count; i++)
                //{
                //    byte[] bytes = pop3.Messages[i].MessageToByte();
                //    Mime mime = Mime.Parse(bytes);
                //    HandleMail(mime);
                //    //delete it at last
                //    //pop3.DeleteMessage(pop3.Messages[i].SequenceNumber);
                //}。
。。。
取得的邮件可以这要给获得。
   #region pop3
            //string customer = mime.MainEntity.To.ToAddressListString();//cargo company
            //string sender = mime.MainEntity.From.ToAddressListString();//this is customer who send

            #endregion
            string customer = MailboxesToString(envelope.To);//cargo company
            string sender = MailboxesToString(envelope.From);//this is customer who send

。。。
除此之外,它提供的另外一个工具是IMAP,它操作起来更加方便。代码如下:

  IMAP_Client clnt = new IMAP_Client();
            try
            {
                clnt.Connect("mail.xx.com", 143, false);
                clnt.Authenticate("user", "password");
                string[] folders = clnt.GetFolders();//get all types

                string folder = "Inbox";
                clnt.SelectFolder(folder);


                IMAP_SequenceSet sequence_set = new IMAP_SequenceSet();
                // All messages
                sequence_set.Parse(string.Format("{0}:{1}", 1, clnt.MessagesCount));

                IMAP_FetchItem[] fetchItems = clnt.FetchMessages(
                        sequence_set,
                        IMAP_FetchItem_Flags.UID | IMAP_FetchItem_Flags.MessageFlags | IMAP_FetchItem_Flags.Size | IMAP_FetchItem_Flags.Envelope,
                        true, false
                        );
                //int count =0;
                foreach (IMAP_FetchItem fetchItem in fetchItems)
                {
                    IMAP_Envelope envelope = fetchItem.Envelope;
                    //hanldle it, means read and search and reply
                    try
                    {
                        HandleMail(envelope);
                        //count++;
                    }
                    catch (Exception ex)
                    {
                        Log("Sys", ex.Message);
                    }
                }
                //delete it after hanlde
                clnt.DeleteMessages(sequence_set, false);
                //disconnect
                clnt.Disconnect();

                //MessageBox.Show(count.ToString() + " of " + fetchItems .Length+ " Success");
            }
            catch (Exception x)
            {
                Log("Sys", x.Message);
                //MessageBox.Show(x.Message);
            }
 
。。
上边都是如何收邮件。
关于如何发送邮件是比较简单的。这里提供两种方式。
第一种方式是使用网上的smtp。这种方式必须要提供用户名和密码。这个适合于web应用,使用的smtp也是网上的,我一般使用163的smtp,基本没有问题。
第二种方式是使用本地的smtp。不需要提供密码,用户也可以是不存在的(垃圾邮件是不是就是这么产生的?),但是必要要提供smtp端口号。
第二种方法测试的时候有时候会报错“Mailbox unavailable. The server response was: 5.7.1 Unable to relay for xxx”,查过资料之后(在baidu上没找到,还是google信息多一点),才发现问题原来是IIS里SMTP服务的配置有问题。
这样修改可以解决:到开SMTP属性—>Access页面?Reply Restrictions/ Reply-?Only this Below选项,加上自己的ip:127.0.0.1(允许本机,使用loalhost,如果是允许其他机器,类似设置)
代码如下
public class EMail
    {
        static public string accountName;
        static public string password;
        static public string smtpServer;
        static public int smtpPort;

        /// <summary>
        /// need password,username, smtpserver
        /// </summary>
        /// <param name="to"></param>
        /// <param name="subject"></param>
        /// <param name="body"></param>
        static public void SendMail(string sendTo, string subject, string body)
        {
            //.net smtp
            System.Web.Mail.MailMessage mailmsg = new System.Web.Mail.MailMessage();
            mailmsg.To = sendTo;
            //mailmsg.Cc = cc;
            mailmsg.Subject = subject;
            mailmsg.Body = body;

            //sender here
            mailmsg.From = EMail.accountName;
            // certify needed 
            mailmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");//1 is to certify
            //the user id  
            mailmsg.Fields.Add(
                "http://schemas.microsoft.com/cdo/configuration/sendusername",
                EMail.accountName);
             //the password
            mailmsg.Fields.Add(
                "http://schemas.microsoft.com/cdo/configuration/sendpassword",
                 EMail.password);

            System.Web.Mail.SmtpMail.SmtpServer = EMail.smtpServer;
            System.Web.Mail.SmtpMail.Send(mailmsg);

        }


        #region send mail2
        /// <summary>
        /// need username,smtp,smtp port
        /// </summary>
        /// <param name="sendTo"></param>
        /// <param name="subject"></param>
        /// <param name="body"></param>
        static public void SendMail2(string sendTo, string subject, string body)
        {
            System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
            msg.To.Add(sendTo);
            msg.From = new System.Net.Mail.MailAddress(accountName );

            msg.Subject = subject;
            msg.SubjectEncoding = System.Text.Encoding.UTF8;
            msg.Body = body;//
            msg.BodyEncoding = System.Text.Encoding.UTF8;
            msg.IsBodyHtml = false;
            //msg.Priority = MailPriority.High;//

            System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
            client.Host = smtpServer;
            client.Port = smtpPort;
            //client.Credentials = new System.Net.NetworkCredential("user@xxx.com", "pass");
            client.Send(msg);

        }
        #endregion

    }


共2页: 上一页 [1] 2 下一页
相 关 文 章   发布商链接
·C#中正则表达式进行忽略大小写的字符...
·如何在C#中播放AVI短片并使背景透明...
·如何用C#读取Windows注册表中的多重...
·asp.net打造进度条窗口代码,还有取消...
·C#实现日期转换为大写代码
·C#装箱与拆箱的代码事例小解
·C#获取硬件标志代码示例
·快速进行List排序的通用方法代码
·C#实现病毒及流氓软件能够自我复制的...
·String.Split 方法使用及其代码示例
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·有助快速理解C#委托和事件之...
·C#泛型学习笔记总结
·c#语言从dbf数据库提取数据并
·C#编写控制线程的运行和线程...
·怎样在C#中删除只读文件及其...
·C#函数中返回多个值的两种方...
·如何在C#中插入照片到Excel文
·如何在c#中获取事件注册的方...
·C#对timer类的使用操作代码
·什么是泛型?泛型的一些概述
·C#如何从文本文件读取信息并...
·如何在c#中去掉字符串中的回...
·如何使用C#获取IIS服务器版本...
·什么是泛型编程思想?及其简...
·c#子线程控制进度条的一个简...
热 门 文 章
·C#如何获取文件路径中的文件...
·什么是c#深拷贝与浅拷贝及其...
·C#中关于四舍五入函数的讨论...
·c#中的ArrayList属性祥解及其...
·C#语言实现创建、删除和移动...
·快速进行List排序的通用方法...
·C#对timer类的使用操作代码
·String.Split 方法使用及其代...
·如何在c#中去掉字符串中的回...
·用C#编写ActiveX控件代码实例
·C#语言实现从XML文件导出数据...
·C#如何从文本文件读取信息并...
·浅谈接口和抽象类的区别,加...
·c#子线程控制进度条的一个简...
·C#语言绘制实时曲线图代码实...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .