关于在邮箱接收不到邮件上编写的文件和收发的邮件,属于那类格式,怎样才能将邮件格式转换成为pDF格式。请指教

摘要电子邮件是因特网上最为流荇的应用之一如同邮递员分发投递传统邮件一样,电子邮件也是异步的也就是说人们是在方便的时候发送和阅读邮件的,无须预先与別人协同与传统邮件不同的是,电子邮件既迅速又易于分发,而且成本低廉另外,现代的电子邮件消息可以包含超链接、HTML格式文本、图像、声音甚至视频数据我们将在本文中查看处于因特网电子邮件核心地位的应用层协议。但在深入讨论这些协议之前让我们先概覽一下因特网邮件系统及其重要部件。 关键词电子邮件 因特网 应用层 邮件服务器是一种用来负责电子邮件收发管理的设备它比网络上的免费邮箱接收不到邮件更安全和高效,因此一直是企业公司的必备设备 1 引言 1.1 电子邮件介绍 电子邮件简称E-mai1又称电子信箱、电子邮政,它昰种用电子手段提供信息交换的通信方式它是全球多种网络上使用最普遍的一项服务。这种非交互式的通信,加速了信息的交流及数据传送,它是个简易、快速的方法通过连接全世界的Internet,实现各类信号的传送、接收、存贮等处理,将邮件送到世界的各个角落。到目前为止,可以说電子邮件是Internet资源使用最多的一种服务E-mai1不只局限于信件的传递,还可用来传递文件、声音及图形、图像等不同类型的信息。 电子邮件不是一種“终端到终端”的服务,是被称为“存贮转发式”服务这正是电子信箱系统的核心,利用存贮转发可进行非实时通信属异步通信方式。即信件发送者可随时随地发送邮件不要求接收者同时在场,即使对方现在不在仍可将邮件立刻送到对方的信箱内,且存储在对方的电孓邮箱接收不到邮件中。接收者可在他认为方便的时候读取信件,不受时空限制在这里,“发送”邮件意味着将邮件放到收件人的信箱中,而“接收”邮件则意味着从自己的信箱中读取信件,信箱实际上是由文件管理系统支持的个实体。因为电子邮件是通过邮件服务器mai1 server来传递档的通常mail server是执行多任务操作系统UNIX的计算机,它提供24小时的电子邮件服务,用户只要向 mail server管理人员申请个信箱账号,就可使用这项快速的邮件服务 電子邮件的工作原理 1 电子邮件系统是一种新型的信息系统,是通信技术和计算机技术结合的产物。 电子邮件的传输是通过电子邮件简单传输協议Simple Mail Transfer Protocol,简称SMTP这一系统软件来完成的,它是Internet下的一种电子邮件通信协议 2 电子邮件的基本原理,是在通信网上设立“电子信箱系统”,它实际上是┅个计算机系统系统的硬件是一个高性能、大容量的计算机。硬盘作为信箱的存储介质,在硬盘上为用户分一定的存储空间作为用户的“信箱”每位用户都有属于自己的个电子信箱。并确定个用户名和用户可以自己随意修改的口令存储空间包含存放所收信件、编辑信件鉯及信件存盘三部分空间,用户使用口令开启自己的信箱,并进行发信、读信、编辑、转发、存档等各种操作。系统功能主要由软件实现 3 电孓邮件的通信是在信箱之间进行的。用户首先开启自己的信箱然后通过键入命令的方式将需要发送的邮件发到对方的信箱中。邮件在信箱之间进行传递和交换,也可以与另个邮件系统进行传递和交换收方在取信时,使用特定账号从信箱提取 1.2 开发背景 当前流行的各大邮件客户端软件的除了最主要的收发信件之外,功能越来越复杂但是人们平常真正用到的功能很少,很多功能尤其对于那些计算机知识相对缺乏的人来说,更加显得太过于华丽而不太实用有鉴于此,在了解RFC底层协议的基础上我们开发了这个各种功能相对简单实用的邮件客戶端程序,简化了很多不必要的功能 1.3 开发环境及运行环境 1.3.1 开发环境 AMD 发送者字段。说明实际提交发送这个信件的人给出他的电子信箱地址。当发信人与写信人不一样时使用比如,秘书替经理发信发送者对发送负责。 格式Reply-TOmailbox 举例 回复字段指定应当把回信发到哪里。如果有此字段回信将会发给它指定的邮箱接收不到邮件,而不会发给From字段指定的邮箱接收不到邮件比如,发送的是经理的信但回信应交办公室处理。 与收信方有关的信头字段 格式TOmailbox list 举例 抄送字段指定此信件要同时发给哪些人,也称为抄送也可以使用邮箱接收不到郵件地址列表,抄送给多个人 格式Bccmailbox list 密抄字段。指定此信件要同时秘密发给哪些人也称为密件抄送。也可以使用邮箱接收不到邮件地址列表密抄给多个人。 其它的信头字段 格式Datedate-time 举例DateTue,04 Dec 800 日期字段Date字段含有电子邮件创建的日期和时间 ;物理路径 [“id“ msg-id] ;接收者msg id 接受字段。是投递信件的特定邮件服务器所作的记录处理邮件投递的每个服务器必须给它处理的每个信头的前面加一个Received字段,用以描述信件到达目的地所经過的路径以及相关信息当跟踪各个电子邮件问题时,这个信息很有帮助 举例Receivedfrom 重发字段。当需要把收到的信件重发给另一组收信人的时候可以保持整个原始信件不变,并简单地产生重发信件所要求的新信头字段为避免与以前的字段相混。新添加的信头字段都加上Resent-前缀芓符串它们的语法与未加前缀的同名字段相同。 格式Message-IDmsg-id 信件标识字段用于表示一个信件唯一标识,该字段通常有Smtp服务器生成这个值通瑺是唯一的。形式根据使用的软件而定通常左边是标识符,右边指定电脑名 图2 7 - 2表中的关键字表明了电子邮件借用了办公室备忘录中的概念和术语电子邮件的头部能够包含一行说明应当接收到该备忘录的接收方象传统的办公室备忘录一样,电子邮件使用关键字Cc指明一个复寫副本carbon copy.电子邮件软件必须向Cc后面的电子邮件地址表中的每个地址发送一份消息的副本 传统的办公室过程要求备忘录的发送方通知接收方副本是否传给其它人。有时发送方希望将备忘录的一个副本给别人而不显示出有一个副本被发送出去一些电子邮件系统提供这样的选项,遵循传统的办公室术语用盲复写副本blind carbon copy来表示。创建消息的用户 在关键字Bcc后给出一个电子邮件地址表指定一个或多个盲复写副本。虽嘫Bcc在发送方出现但当信息发送时,邮件系统将它从消息中除去每个接收方必须检查头部的To和Cc行以决定信息是直接发送还是作为盲副本發送的有些邮件系统在正文部分附加信息来告诉接收者它是一个盲副本。其它接收者不知道有哪些用户接收到盲副本 电子邮件使用与传統的办公室备忘录相同的格式和术语头部包括与消息有关的信息,正文包括消息文本电子邮件头部的行说明发送方、接收方、日期、主題、应当收到副本的人的列表。 (5)扩展字段 如果想在信头中加入RFC822中没有规定的字段就需要创建非标准字段。方法非常简单只要在自萣义的信头字段名的前面使用X-前缀。RFC822将这种方法称为扩展字段 事实上已经有许多扩展字段被广泛应用,但没有标准定义例如 X-LOOP字段 X-LOOP字段鼡来防止邮件的循环传送。过滤或邮件列表处理程序可以给它处理的每个信件增加一个X-LOOP字段,以后就可以根据这个字段中含有的特别值判断一个信件是否被循环传送。如果确认邮件发生了循环过滤或邮件列表处理程序就可以用不同的方式处理该信件。 ◆X-Mailer字段 X-Mailer字段用于指示什么样的程序产生了这个信件它是使用最广泛的扩展字段。产生邮件的软件可以为所有发送的信件增加合适的X-Mailer字段该字段不仅含囿软件的名称,还包含软件的版本号例如软件名为Littlefox Mailer,版本为V1.0 可以将“X-MailerLittlefox Mailer V1.0”加到邮件信头中去。 图2 7 - 2列出了一些在因特网电子邮件中可以找箌的普通关键字以及使用它们的目的。 关键字 含义 From 发送方地址 To 接收方地址 Cc 复制副本地址 Date 信息创建日期 Subject 信息主题 Reply-To 回复地址 X-Charset 使用的字符集(通常为ASCII) X-Mailer 发送信息所使用的软件 X-Sender 发送方地址的副本 X-Face 经编码的发送方面孔的图象 整个系统的核心是收发信件的操作,因此为了方便维护,以后的升级,故将这两个最主要的操作写成类库.dll的形式,以组件的形式加载到主程序中而且其它的功能如果需要的话,也可以通过这样的组件的形式增加到主程序中这也体现了C Sharp这一新的微软主推语言的方便和高校。而且这样做也方便了我们小组的程序的顺利结合 5 命名控件MailSend 由于在C Sharp語言中,都是以命名控件来组织程序的而所有的类都归属于一个特定的命名空间下。需要的命名空间系统本身自带了一部分而且如果系统没有你需要的命名空间的话,就可以自己编写本节中的这个命名空间就是由于需要而编写的。而调用某一个类中的某个变量成员的方法就是通过 命名空间名.类名.变量成员 来访问的当然在C Sharp 中如果在程序开始通过Using 命名空间名,就可以直接的象C那样来访问成员变量可以說相当的方便,这些都会在程序中体现出来再次不再做过多的叙述。 5.1 发送邮件类SmtpMail 5.1.1 主要成员变量说明 1网络连接类及实例TcpClient tc 为 TCP 网络服务提供客户端连接类TcpClient实例对象tcTcpClient 类提供了一些简单的方法,用于在同步阻塞模式下通过网络来连接、发送和接收流数据而实例化的过程也昰连接SMTP服务器的过程。它的重载方法之一的两个参数一个为服务器名称字符串另一个为服务器的埠。 2)提供用于网络访问的基础数据流忣其实例 NetworkStream ns 此类提供访问网络的基础数据流的方法其中最基本也是最重要的两个方法就是Write()和Read()方法,至于参数不再次赘述 3)一维芓符串数组变量FilePath 此字符串数组主要用来存放用户选择的附件的绝对路径名,并在发送带附件的邮件时用到 4)发送邮件所需的基本参数 比洳用于ESMTP等录检验用的用户名、密码,发送邮件需要的收信人发信人地址以及主题等等在此不再赘述。 5.1.2 主要成员函数说明 1)重载的构慥函数 SmtpMail() 此函数主要用于在初始化过程中把用户选择的附件的路径以参数的形式传给FilePath。 2)添加附件的函数AddAttachment 传给FilePath的路径通过这样一个函数就可以循环的动态的添加到IList接口的一个对象中了,方便以后在具体的实现的过程中的使用 3)得到上传的附件的文件流GetStream 由于在网络中嘚操作都是以网络流的形式来实现的,因此先将上传的附件转换成文件流然后再用Write的方法把这些附件的文件流写入到网络中,来完成发送附件的操作具体实现代码如下所示 private string GetStreamstring FilePath { //建立文件流对象 System.IO.FileStreamFileStrnew 4)将字符串编码为字符串的函数Encode 由于ESMTP的LOGIN认证机制是采用编码,当用户发出AUTHLOGIN的命令后服务器返回334的应答码等待用户输入。如果身份确认后服务器返回235的应答码否则返回失败信息。所以要将用户名和密码转换成编码然后洅发给服务器此函数的作用就是把给定的字符串转换成相应的编码的字符串。 5发送SMTP命令的函数SendCommand 这个函数的作用是把SMTP命令的字符串转换成對应的字节型值(C#中规定的Write方法只能写入字节型的数据)然后写入网络中如果操作成功就返回一个标志为真的布尔型变量,如果操作夨败或者发生异常就返回标志为假的布尔型变量具体代码如下所示 private bool SendCommandstring str { //定义一个数组 byte[] WriteBuffer; 它们的作用是与服务器交互,发送命令并接收回应不哃的是参数是字符串类型的那个函数,每次发送一条命令并接受服务器的响应,根据响应的信息来判断交互的结果是否成功而参数是芓符串数组的函数每次发送的是一组命令,用于和服务器的交互这个函数主要是用于ESMTP服务器的验证的功能,因为验证的过程是一个等待嘫后又输入的过程因此将他们放在一个数组中有利于理解和操作。而他们的实现主要是通过调用上面的发送SMTP命令函数SendCommand以及接受SMTP服务器响應的函数RecvResponse来实现的具体的代码如下所示 这是整个程序的核心部分。具体的实现SMTP协议的程序正是通过它一步一步实现并最终实现发送简单郵件甚至带附件的邮件的功能而它的实现是调用以上给出的各个函数的结果。以下就简单的通过几个SMTP命令的格式来实现 private bool SendEmail { //连接网络 try { //建立一個TCP连接 tcnew TcpClientmailserver,mailserverport;

}

我要回帖

更多关于 邮箱接收不到邮件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信