C#基础--基于POP3协议的邮件接收和基于STMP的邮件发送

  最近在用outlook同步邮件。对邮件协议有一点兴趣。于是就去收集了一些资料,学习了一下如何通过.net来实现邮件的收发。

  

   一:SMTP协议

     1.什么是SMTP协议:

      SMTP目前已是事实上的在Internet传输E-Mail的标准,是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确定是存在的),然后消息文本就传输了。可以很简单地通过Telnet程序来测试一个SMTP服务器,SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX(Mail eXchange)DNS。(来自百度百科)

 2.如何实现:

为了实现SMTP协议,.net提供了MailMessage类,用于存储邮件信息(包括主题,发件人地址,收件人地址,附件,包括邮件的格式[文本,HTML...]。SmtpClient类来实现协议连接。StmpClient提供了stmp 和port两个参数,有关协议和端口号是可以再网上查询到的。常用邮箱端口号: STMP默认25.实现代码如下:

        public static bool SendEmail()
        {
            try
            {
                MailMessage msg = new MailMessage();
                msg.From = new MailAddress(fromEmailAddress); // 发件人邮箱
                msg.Subject = "来自小聪的邮件";
                msg.Body = "今天吃饭了没有呀,小强同学";
                msg.BodyEncoding = System.Text.Encoding.Default;
                msg.To.Add(toEmailAddress); //收件人地址,可以添加多个
                SmtpClient client = new SmtpClient(smtp, port); // smtp = "smtp.qq.com"; port=25 QQ邮箱
                client.Credentials = new System.Net.NetworkCredential(msg.From.Address, password);
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                client.Send(msg);
            }
            catch (Exception ex)
            {
                return false;
            }
            return true;
        }

       二:POP3协议:
              1.什么是POP3协议:

       邮局协议Post Office Protocol,简称POP)是TCP/IP协议族中的一员,由RFC 1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。最新版本为POP3,全名“Post Office Protocol - Version 3”,而提供了SSL加密的POP3协议被称为POP3S。(来自维基百科)

2.如何实现:

        要想实现邮件的操作。只需要遵守相应的命令协议即可。对于一般操作。需要先通过user 和pass的验证。验证成功后。方可执行后面的命令。

命令 描述
user 用户名
pass  密码,执行命令后可以获取到邮件数量和邮件总字节
apop 一种安全传输口令的办法,digest是md5消息摘要,执行成功导致状态转换
stat 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
uidl 返回邮件的唯一标识符,pop3会话的每个标识符都将是唯一的
list 返回邮件数量和每个邮件的大小
retr 返回由参数标识的邮件的全部文本,retr+5 表示返回前5封邮件的文本,但是返回回来的信息是乱码,需要转码
dele 服务器将由参数标识的邮件标记为删除,由quit命令执行
rset 服务器将重置所有标记为删除的邮件,用于撤消dele命令
top 服务器将返回由参数标识的邮件前n行内容,n必须是正整数
noop 服务器返回一个肯定的响应,不做任何操作。
quit 退出

如上面的命令为了更方便的理解,请看下面代码: 对于每次的sr.Readline 如果获取成功了。在读取的字符串里面都会有一个"+OK",可以通过判断字符串是否包含OK,来确定是否命令操作成功(代码中我忽略了). 其次对于RERT命令来说。返回的是乱码。需要转码。这个会在后续的博客更新。

NOTES: pop3端口号默认110,代码的宽口好。账号密码,是存在了类的静态变量。没有展示出来。

 public static void GetMessage()
        {
            TcpClient Server = new TcpClient(pop3,pop_port); //Tcp协议
            NetworkStream netSream = Server.GetStream();
            StreamReader sr = new StreamReader(netSream);
            byte[] byData;
            string data;
            try
            {
                string str = string.Empty;
                data = "USER " + fromEmailAddress+ "\r\n";
                byData = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray());
                netSream.Write(byData, 0, byData.Length);
                Console.WriteLine(sr.ReadLine());
                data = "PASS " + password + "\r\n";
                byData = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray());
                netSream.Write(byData, 0, byData.Length);
                Console.WriteLine(sr.ReadLine());
                data = "STAT" + "\r\n";
                byData = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray());
                netSream.Write(byData, 0, byData.Length);
                Console.WriteLine(sr.ReadLine());
                Console.WriteLine("链接成功...");
            }
            catch (Exception ex)
            {
                Console.Write("链接服务器失败...");
                return;
            }

            try
            {
                data = "RETR " +5 +"\r\n";
                byData = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray());
                netSream.Write(byData, 0, byData.Length);
                string emailData = string.Empty;
                string szTemp = sr.ReadLine();
                if (szTemp[0] != ‘-‘) // 如果获取有错的话.服务器会返回一个字符串以"-"开头
                {
                    while (szTemp != ".")
                    {
                        szTemp = sr.ReadLine();
                        emailData += szTemp;
                    }
                    Console.WriteLine(emailData);
                }
                else
                {
                    Console.WriteLine(szTemp);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Get email 失败");
            }
        }

    

    三.总结:博客很多地方需要改进。里面大部分都是借鉴的别人的代码。以及其他博客的文章。然后凑在一起的。希望博友对这方面了解多的。都给给自己的意见。3KU。

代码Link:http://files.cnblogs.com/FourLeafCloverZc/SpongeBob.Email.Learn.zip

时间: 2024-10-21 03:25:44

C#基础--基于POP3协议的邮件接收和基于STMP的邮件发送的相关文章

Yosemite上手动增加基于POP3协议的QQ邮箱账记

不知道是升级到Yosimite还是qq邮箱账户的问题,反正是创建邮箱账号时系统自动创建一个所谓的互联网账号.通过这种方式创建的账号少了一个以往的手动选择账号类型的步骤. 说起来,其实这也是一种进步,可惜的是不知道为什么,通过这种方式建立的邮箱账号在接收邮件时速度超慢,不知各位看官的体验是怎样的,反正老猿是非常的不爽拉. 老猿心中一动,突然想到,还不如使用老的POP3协议接收呢,预先下载到本地,再点击阅读的速度一定会比使用那该死的IMAP快不少. 于是乎,老猿便开始了疼苦的手动配置之旅,原因非它,

网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1.A2和B2提供服务. Socket概述 ①   所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过“套接字”向网络发出请求或者应答网络请求. ②   Socket是连接运行在网络上的两个程序间的双向通信的端点. ③  

SMTP协议及POP3协议-邮件发送和接收原理(转)

本文转自https://blog.csdn.net/qq_15646957/article/details/52544099 感谢作者 一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu.163等等他们都有自己的邮件服务器. 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中. 电子邮箱(E

Java Mail---SMTP、POP3协议-DOS下手动收发邮件演示过程

转载请注明出处: http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] E-Mail协议简介: 邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器我接收邮件的服务器. 发送邮件的服务器使用发送协议,现在常用的是SMTP协议.所以,通常发邮件的服务器也称为SMTP服务器. 接收邮件的服务器使用接收协议,现在常用的是POP3协议或IMAP协议,所以通常也被称为POP3或IMAP服务器. 目前经常见到的服务器为SMTP和POP3服务器.如大家在注册了

Java中基于UDP协议的的网络编程(基础篇)

---恢复内容开始--- 一:什么是网络编程? 通俗的来说, 网络编程就是编写程序,让联网的两个或多个设备(例如计算机)之间进行数据传输.Java语言也支持网络编程,JDK提供的 java.net包提供了很多于网络编程相关的类,来支持网络编程方面的学习. 二:java网络编程所使用的协议? 有了计算机网络的基础,我们不难理解,在java中,网络编程是基于网络传输协议的. java网络编程,可以是基于TCP协议的,也可以基于UDP协议的.那么首先我们得知道tcp协议和udp两种协议的区别. 区别:

前端基础(http协议相关篇)

网络协议篇: 1.http请求过程 DNS解析--tcp三次握手--建立tcp连接后发起http请求--服务器响应http请求 --浏览器得到资源--浏览器渲染 2.http报文 通用首部:可以出现在请求报文,也可出现在响应报文 请求报文:请求行(包含请求方法和请求URL).请求头部(header).空行和请求数据4个部分组成 响应报文: 状态行(包含http版本.状态码.原因短语).消息报头.响应正文 3.请求方法 get:普通的请求服务器资源 head:只返回头部信息,用于在客户端为获取实际

javamail模拟邮箱功能--邮件回复-中级实战篇【邮件回复方法】(javamail API电子邮件实例)

引言: JavaMai下载地址l jar包:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本篇章建议先阅读上一篇  -->javamail模拟邮箱功能获取邮件内容-中级实战篇[内容|附件下载方法](javamail API电子邮件实例) 在上一篇中,讲解了邮件获取内容的两个方法(HTML和附件),简单介绍了邮件发送和内容获取的相同和不同之处,并且引入了新类-->javax.mail.St

基于Lumisoft.NET组件的POP3邮件接收和删除操作

Lumisoft.NET组件是一个非常强大的邮件发送.邮件接收等功能的开源组件,一般用它来处理邮件的相关操作,是非常合适的.之前也写过一些该组件的随笔文章,不过主要是利用来发送邮件居多,最近由于项目需要,需要利用该组件来接收邮件,邮件通过POP3协议进行接收到本地,故对该组件进行了全面的了解和使用.本文主要是在此背景上,介绍该组件的POP3协议处理类的使用.Lumisoft.NET组件2013年作者有做了一定的更新,修复了一些问题,本文是基于该组件的最新版本进行开发使用. 1.POP3登录及头部

PHP+socket+SMTP、POP3协议发送、接收邮件

1.实现SMTP协议的类dsmtp.cls.php: <?php          // 通过socket实现SMTP协议的功能// version: 1.1// author : DCC// create : 2014-01-17 23:38:24// modify : 2014-01-18 16:59:04// more   : http://www.thinkful.cn/archives/389.html          class Dmail_smtp{