电子邮件在Internet上发送和接收其实和我们日常生活中的邮寄服务一样:当我们要寄一个包裹的时候,我们首先要找到一个有这项业务的邮局,在填写完收件人姓名、地址等信息之后,包裹就寄到了收件人所在地的邮局,那么对方取包裹的时候就必须去这个邮局才能取出。同样的,当我们发送电子邮件的时候,这封邮件是由邮件发送服务器(任何一个都可以)发出,并根据收信人的地址判断对方的邮件接收服务器而将这封信发送到该服务器上,收信人要收取邮件也只能访问这个服务器才能够完成。

电子邮件工作原理

电子邮件的工作过程遵循客户-服务器模式。每份电子邮件的发送都要涉及到发送方与接收方,发送方式构成客户端,而接收方构成服务器,服务器含有众多用户的电子信箱。发送方通过邮件客户程序,将编辑好的电子邮件向邮局服务器(SMTP服务器)发送。邮局服务器识别接收者的地址,并向管理该地址的邮件服务器(POP3服务器)发送消息。邮件服务器识将消息存放在接收者的电子信箱内,并告知接收者有新邮件到来。接收者通过邮件客户程序连接到服务器后,就会看到服务器的通知,进而打开自己的电子信箱来查收邮件。
     通常Internet上的个人用户不能直接接收电子邮件,而是通过申请ISP(Internet Service Provider的缩写,意为“Internet服务提供商”)主机的一个电子信箱,由ISP主机负责电子邮件的接收。一旦有用户的电子邮件到来,ISP主机就将邮件移到用户的电子信箱内,并通知用户有新邮件。因此,当发送一条电子邮件给一另一个客户时,电子邮件首先从用户计算机发送到ISP主机,再到Internet,再到收件人的ISP主机,最后到收件人的个人计算机。
      ISP主机起着“邮局”的作用,管理着众多用户的电子信箱。每个用户的电子信箱实际上就是用户所申请的帐号名。每个用户的电子邮件信箱都要占用 ISP主机一定容量的硬盘空间,由于这一空间是有限的,因此用户要定期查收和阅读电子信箱中的邮件,以便腾出空间来接收新的邮件。

电子邮件在发送与接收过程中都要遵循SMTP、POP3等协议,这些协议确保了电子邮件在各种不同系统之间的传输。其中,SMTP负责电子邮件的发送,而POP3则用于接收Internet上的电子邮件。

最简单的邮件发送流程如图:

如果将这个网络分的更细一点,其具体的流程图如下:

当然在我们的实际的应用中,特别是架设比较庞大的邮件系统的时候,涉及的技术更多、更复杂,如果是多台收件服务器、多台发件服务器,就要再附加一台服务器做负载均衡。里面还要涉及防火墙、垃圾过滤一些安全问题。尽管这些不是我们平时能够的用的着的,但是了解这些还是必须的。

ASP.net发送邮件  

电子邮件是最初的网络通信技术,在信息技术高速发展的今天,电子邮件已经作为一种不可或缺的通信方式深入到了企业的各个层面。最常见的就是我们熟知的bug报告、密码重置通知、申请确认等。特别是我们在从事企业软件开发的时候,常常要用到电子邮件技术。

而微软的ASP.NET很好的将其进行了封装,使得发送电子邮件十分便捷。在.net框架1.x版本中ystem.Web.Mail已经实现了这一点。但是其通过的是第三方控件实现的,具体的代码会在后面介绍。在后来的2.0版本已经将其很好的封装在System.Net.Mail中,在这里面有最核心的两个类,即MailMessage和SmtpClient。

· MailMessage:描述一个电子邮件消息;它拥有From,To,Subject,Body,Attachments等属性;

· SmtpClient:把一个指定的MailMessage实例发送到一个指定的SMTP服务器。

我们只要将对象的属性赋值,就能顺利发送一封电子邮件了。流程图如下:

注意:在邮件发送的过程中会产生异常,比较常见的就是SmtpException,所以发送一定要进行try,catch操作,捕捉可能出现的异常。

顶易中国整理邮件发送详解相关推荐

  1. Android邮件发送详解

    转载:http://flysnow.iteye.com/blog/1128354 Android中我为什么发不了邮件???我手机里明明有邮件客户端的,可我为什么不能调用它发送邮件???相信这是很多人会 ...

  2. Java-qq邮件发送详解

    Java发送邮件 概述 我们将用代码完成邮件的发送.这在实际项目中应用的非常广泛,比如注册需要发送邮件进行账号激活,再比如OA项目中利用邮件进行任务提醒等等. 使用Java发送 E-mail 十分简单 ...

  3. 张孝祥java邮件开发_张孝祥java邮件开发详解笔记(生成文本邮件)

    package zxx.createMessage; import java.io.FileOutputStream; import java.util.Date; import java.util. ...

  4. 革命性存储:易安ESATA系列产品详解

    革命性存储:易安ESATA系列产品详解<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office& ...

  5. Java经典面试题整理及答案详解(八)

    简介: Java经典面试题第八节来啦!本节面试题包含了进程.线程.Object类.虚拟内存等相关内容,希望大家多多练习,早日拿下心仪offer- 了解更多: Java经典面试题整理及答案详解(一) J ...

  6. Java经典面试题整理及答案详解(三)

    简介: 以下是某同学面试时,面试官问到的问题,关于面试题答案可以参考以下内容- 上一篇:Java经典面试题整理及答案详解(二) Java面试真题第三弹接住!相信通过前两节的学习,大家对于Java多少有 ...

  7. DBus glib 各数据类型接收与发送详解—C语言(3)

    DBus glib 各数据类型接收与发送详解-C语言(3) 动机 前置知识 正文 Python 测试服务 使用 C 实现复杂数据类型的传递 DICT_DICT ObjectPath_Dict_Stru ...

  8. FPGA串口接收与发送详解( part 3 )

    之前的part1~2已经详解完了单个数据的串口接收与发送,链接如下: FPGA串口接收与发送 详解 (part 1 )_居安士的博客-CSDN博客 FPGA串口接收与发送详解( part 2 )_居安 ...

  9. C#串口连接的读取和发送详解

    C#串口连接的读取和发送详解 一.串口连接的打开与关闭 串口,即COM口,在.NET中使用 SerialPort 类进行操作.串口开启与关闭,是涉及慢速硬件的IO操作,频繁打开或关闭会影响整体处理速度 ...

最新文章

  1. GPT-3 Finetune
  2. 特斯拉 model3 没有信号_Model 3在北京失控撞人,特斯拉:未发现任何系统故障
  3. 无法启动此程序,因为计算机中丢失msvcrtd.dll,Win7打开剑灵提示“丢失d3dx10_43.dll、MSVCRTD.dll文件”怎么办?...
  4. 深度神经网络DNN的多GPU数据并行框架 及其在语音识别的应用
  5. 我来更新了,说说工作中的Java处理异常
  6. [蓝桥杯][算法提高VIP]A Careful Approach(全排列+二分)
  7. 前端学习(1884)vue之电商管理系统电商系统之实现侧边栏的折叠和展开
  8. [机器学习笔记]Note11--聚类
  9. 使用 node.js 进行服务器端 JavaScript 编程
  10. java实现linux中gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩
  11. eclipse 查看变量或方法被调用的快捷键
  12. DevOps使用教程 华为云(7)团队绩效评估 工时统计
  13. Linux下输入法切换快捷键设置
  14. Caused by: java.lang.NoSuchMethodException: init [class android.content.Context, interface andr解决
  15. JavaScript 闭包理解
  16. PyQt、PySide、PySide2这三者到底有什么区别?
  17. css样式给标签加上小手图标
  18. 8家供应商、2300个特效镜头,ftrack助力《侍神令》协同制作
  19. 单页面网站优化技巧有哪些?
  20. BASE64加密解密问题

热门文章

  1. 这8大信用卡秘密!银行绝不会说
  2. [微软/Azure]IoT平台解决方案
  3. QCustomPlot的使用教程(一)
  4. 2022阿里云金秋云创季年终双十一活-动汇总!
  5. 线性表的抽象数据类型
  6. wampserver php cgi,wampserver 把apache 换成 nginx
  7. WiFi模块原理图其实不难看懂
  8. 10个免费的python学习网站 赶紧收藏吧!!!
  9. Rtools安装方法
  10. c语言转换字符编码为zhs16gbk,GitHub - veis-lzf/freecplus: freecplus开源框架,包含了数据库操作、socket、ftp服务器等。...