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, , byData.Length);
Console.WriteLine(sr.ReadLine());
data = "PASS " + password + "\r\n";
byData = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray());
netSream.Write(byData, , byData.Length);
Console.WriteLine(sr.ReadLine());
data = "STAT" + "\r\n";
byData = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray());
netSream.Write(byData, , byData.Length);
Console.WriteLine(sr.ReadLine());
Console.WriteLine("链接成功...");
}
catch (Exception ex)
{
Console.Write("链接服务器失败...");
return;
} try
{
data = "RETR " + +"\r\n";
byData = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray());
netSream.Write(byData, , byData.Length);
string emailData = string.Empty;
string szTemp = sr.ReadLine();
if (szTemp[] != '-') // 如果获取有错的话.服务器会返回一个字符串以"-"开头
{
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
C#基础--基于POP3协议的邮件接收和基于STMP的邮件发送的更多相关文章
- 一个基于POP3协议进行邮箱账号验证的类
最近老陈要针对企业邮箱做一些开发,以对接企业OA神马的,但企业邮箱唯独没有开放账号密码验证功能,很恼火!不得已,翻出早些年的Asp代码改编成了C#类,实现了一个C#下的通过POP3协议进行邮箱账号验证 ...
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
- SMTP协议及POP3协议-邮件发送和接收原理(转)
本文转自https://blog.csdn.net/qq_15646957/article/details/52544099 感谢作者 一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 ...
- 前端基础(http协议相关篇)
网络协议篇: 1.http请求过程 DNS解析——tcp三次握手——建立tcp连接后发起http请求——服务器响应http请求 ——浏览器得到资源——浏览器渲染 2.http报文 通用首部:可以出现在 ...
- javamail模拟邮箱功能--邮件回复-中级实战篇【邮件回复方法】(javamail API电子邮件实例)
引言: JavaMai下载地址l jar包:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...
- 基于Lumisoft.NET组件的POP3邮件接收和删除操作(转载)
Lumisoft.NET组件是一个非常强大的邮件发送.邮件接收等功能的开源组件,一般用它来处理邮件的相关操作,是非常合适的.之前也写过一些该组件的随笔文章,不过主要是利用来发送邮件居多,最近由于项目需 ...
- 基于Lumisoft.NET组件的POP3邮件接收和删除操作
From: http://www.cnblogs.com/wuhuacong/archive/2013/05/06/3063093.html Lumisoft.NET组件是一个非常强大的邮件发送.邮件 ...
- PHP+socket+SMTP、POP3协议发送、接收邮件
.实现SMTP协议的类dsmtp.cls.php:<?php , $webname=).); } } .实现POP3协议的类dpop3.cls.php: <? ...
- 邮件实现详解(二)------手工体验smtp和pop3协议
上篇博客我们简单介绍了电子邮件的发送和接收过程,对参与其中的邮件服务器,邮件客户端软件,邮件传输协议也有简单的介绍.我们知道电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行传递必须 ...
随机推荐
- ADO.NET操作数据库(一)
---恢复内容开始--- [1]ADO.Net简介2015-12-07-20:16:05 ADO.Net提供对Microsoft SQL Server数据源以及通过OLE DB和XML公开的数据源的一 ...
- 关于HTML面试题汇总之H5
一.H5有哪些新特性,移除了哪些元素?如何处理h5新标签的浏览器兼容性问题,如何区分html和html5 1. html5不在是SGL(通用标记语言)的一个子集,而包含了:图像.位置.存储.多任务等功 ...
- bootstrap源码分析之Carousel
源码文件: Carousel.scssCarousel.js 实现原理: 隐藏所有要显示的元素,然后指定当前要显示的为block,宽.高自适应 源码分析: 1.Html结构:主要分为以四个部分 1. ...
- 基于 jQuery 实现垂直滑动的手风琴效果
今天我们要与大家分享一个漂亮而灵活的垂直 jQuery 手风琴效果.其主要思想是扩大手风琴片上的点击和显示更多的信息.其他内容片段将变得不那么透明.当使用一个导航箭头导航下一个片段,新的片会从顶部或底 ...
- Owl Carousel – 支持触摸的 jQuery 响应式传送带插件
Owl Carousel 是一个 jQuery 插件,使我们能够迅速地创建响应式传送带滑块.这个插件是触摸友好的,能与几乎任何的 HTML 内容兼容使用.另外,强大的选项设置支持分页/滑动速度,启用/ ...
- Ampersand.js - 模块化的 JS 应用程序开发框架
Ampersand.js 是一个高度模块化,松耦合,用于构建先进的 JavaScript 应用程序的框架.通过良好定义的方法,结合了一系列微小的 CommonJS 模块.条理清晰,没有多余的冗余代码. ...
- Resumable.js – 基于 HTML5 File API 的文件上传
Resumable.js 是一个 JavaScript 库,通过 HTML5 文件 API 提供,稳定和可恢复的批量上传功能.在上传大文件的时候通过每个文件分割成小块,每块在上传失败的时候,上传会不断 ...
- HTTP与HTTPS握手的那些事
今天我总结了什么是HTTP三次握手,还有HTTPS握手的过程以及为什么HTTPS是安全的. 前提 在讲述这两个握手时候,有一些东西需要提前说明. HTTP与TCP/IP区别? TPC/IP协议是传输层 ...
- OpenGL显示图片
最近想用C++在windows下实现一个基本的图像查看器功能,目前只想到了使用GDI或OpenGL两种方式.由于实在不想用GDI的API了,就用OpenGL的方式实现了一下基本的显示功能. 用GDAL ...
- Android的消息循环机制 Looper Handler类分析
Android的消息循环机制 Looper Handler类分析 Looper类说明 Looper 类用来为一个线程跑一个消息循环. 线程在默认情况下是没有消息循环与之关联的,Thread类在ru ...