【教学课件】第13章电子邮件服务器.ppt

上传人:小飞机 文档编号:5657861 上传时间:2023-08-06 格式:PPT 页数:43 大小:449.97KB
返回 下载 相关 举报
【教学课件】第13章电子邮件服务器.ppt_第1页
第1页 / 共43页
【教学课件】第13章电子邮件服务器.ppt_第2页
第2页 / 共43页
【教学课件】第13章电子邮件服务器.ppt_第3页
第3页 / 共43页
【教学课件】第13章电子邮件服务器.ppt_第4页
第4页 / 共43页
【教学课件】第13章电子邮件服务器.ppt_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《【教学课件】第13章电子邮件服务器.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第13章电子邮件服务器.ppt(43页珍藏版)》请在三一办公上搜索。

1、第13章 电子邮件服务器,13.1 Unix的电子邮件系统13.2 Linux下的邮件系统13.3 mail命令13.4 建立Linux下的邮件服务器,13.1 Unix的电子邮件系统,13.1.1 电子邮件的历史13.1.2 电子邮件的体系结构和服务电子邮件系统一般由两个子系统组成:用户代理(UA:User Agent),它允许人们读取和发送电子邮件或者通过POP、IMAP将信件从传输代理服务器处取到本机上;消息传输代理(MTA:Message Transfer Agent),它将消息从出发地传到目的地。用户代理是一个本地程序,它提供命令行方式、菜单方式或者图形方式的界面来与电子邮件系统交互

2、。消息传输代理是在后台运行的系统守护进程(Daemon),在系统间传输电子邮件。,邮件传输是从服务器到服务器的,而且每个用户必须拥有服务器上存储信息的空间(称为信箱)才能接收邮件(发送邮件不受这个限制)。常见的投递代理包括procmail等。常见的用户代理有“foxmail”、“outlook express”等邮件客户程序。有许多的程序可以作为信件传输代理,包括qmail、sendmail、postfix等等。,13.2 Linux下的邮件系统,13.2.1 Linux下的邮件服务器1.Postfix Postfix是一个在IBM资助下由Wietse Venema 负责开发的自由软件工程的产

3、物,其目的是为用户提供除sendmail之外的邮件服务器选择。Postfix力图做到快速、易于管理、提供尽可能的安全性,同时尽量做到和sendmail邮件服务器保持兼容性以满足用户的使用习惯。起初,Postfix是以VMailer这个名字发布的,后来由于商标上的原因改名为Postfix。,1)主要设计目标 Postfix工程的目标是实现一个邮件服务器,提供除sendmail以外的选择。其设计目标包括:性能:Postfix要比同类的服务器产品速度快三倍以上,一个安装Postfix的台式机一天可以收发百万封信件。兼容性:Postfix设计时考虑了保持sendmail的兼容性问题,以使移植变得更加容

4、易。安全和健壮性:Postfix设计上实现了程序在过量负载情况下仍然保证程序的可靠性。灵活性:Postfix结构上由十多个小的子模块组成,每个子模块完成特定的任务,如通过SMTP协议接收一个消息,发送一个消息,本地传递一个消息,重写一个地址等等。安全性:Postfix使用多层防护措施防范攻击者来保护本地系统,几乎每一个Postfix守护进程都能运行在固定低权限的chroot之下,在网络和安全敏感的本地投递程序之间没有直接的路径一个攻击者必须首先突破若干个其他的程序,才有可能访问本地系统。,2)Postfix的特点支持多传输域:sendmai支持在Internet、DECnet、X.400及UU

5、CP之间转发消息。Postfix则灵活的设计为无须虚拟域(vistual domai)或别名来实现这种转发。虚拟域:在大多数通用情况下,增加对一个虚拟域的支持仅仅需要改变一个Postfix查找信息表。UCE控制(UCE,unsolicited commercial email):Postfix能限制哪个主机允许通过自身转发邮件,并且支持限定什么邮件允许接进。Postfix实现通常的控制功能:黑名单列表、RBL查找、HELO/发送者DNS核实。基于内容过滤当前没有实现。表查看:Postfix没有实现地址重写语言,而是使用了一种扩展的表查看来实现地址重写功能。表可以是本地dbm或db文件等格式。,

6、3)Postfix体系结构Postfix是基于半驻留,互操作的进程的体系结构,每个进程完成特定的任务,没有任何特定的进程衍生关系(父子关系)。而且,独立的进程来完成不同的功能相对于“单块”程序具有更好的隔离性。这种实现方式具有这样的优点:每个服务如地址重写等都能被任何一个Postfix部件所使用,无须进程创建等,而仅仅需要重写一个地址,当然并不是只有postfix采用这种方式。Postfix是按照这种方式实现的:一个驻留主服务器根据命令运行Postfix守护进程,守护进程完成发送或接收网络邮件消息,在本地递交邮件等等功能。守护进程的数目由配置参数来决定的,并且根据配置决定守护进程运行的次数(r

7、e-used times),当空闲时间到达配置参数指定的限度时,自动消失。这种方法明显地降低了进程创建开销,但是单个进程之间仍然保持了良好的隔离性。,Postfix的设计目标就是成为sendmail的替代者。Postfix的核心是由十多个半驻留程序实现的。Postfix进程之间传递的数据量是有限制的。Postfix采用一些通常的措施来避免丢失信息:在收到确认以前通过调用flush和fsync()保存所有的数据到磁盘中。检查所有的系统调用的返回结果来避免错误状况。大多数构建邮件服务器者都会选择sendmail,公平地来讲sendmail是一个不错的MTA(Mail Transfer Agent)

8、,最初开发时Eric Allman的设计主要放在了邮件传递的成功性。不幸的是,Sendmai开发时没有太多的考虑Internet环境下可能遇到的安全性问题。sendmail在大多数系统上只能以根用户身份运行,这就意味着任何漏洞都可能导致非常严重的后果,除了这些问题之外,在高负载的情况sendmail运行情况不是很好。,4)安全Postfix则并不一定要以root的身份运行,而只需要一个主(master)程序以root身份运行,其生成进程来处理接入、发出及本地邮件投递工作。通过使用一系列模块部件,每个任务由一个单独的程序来运行(这样使审计变的容易一些)。用户可以限制Postfix以哪个用户的身份

9、运行,一般来说是以“postfix”用户(概念上该用户和Apache的nobody类似)运行,该用户可以访问特定的队列目录。Postfix其他的主要优点是起配置文件的清晰易懂性。5)与sendmail的比较6)与Qmail的比较,2.Qmail1)Qmail的特点安全性:为了验证Qmail的安全性,Qmail的支持者甚至出资寻找Qmail的安全漏洞,一年以后,该奖金没有被领取,而被捐献给自由软件基金会。速度:Qmail在一个中等规模的系统可以投递大约百万封邮件,甚至在一台486机上一天能处理超过10万封邮件,且支持并行投递,同时可以投递大约20封邮件。可靠性:为了保证可靠性,Qmail只有在邮

10、件被正确地写入到磁盘才返回处理成功的结果,这样即使在磁盘写入时发生系统崩溃或断电等情况,也可以保证邮件不被丢失,而是重新投递。特别简单的虚拟域管理:甚至有一个第三方开发的称为vchkpw的add-on来支持虚拟POP域。使用这个软件包,POP3用户不需要具有系统的正式账户。,2)sendmail vs Qmail首先,sendmail是发展历史悠久的MTA。sendmail在发展过程中产生了一批经验丰富的sendmail管理员,并且sendmail有大量完整的文档资料,除了sendmail的宝典:Oreilly的sendmail book(由Bryan Costales 和Eric Allma

11、n所写)以外,网络上有大量的tutorial、FAQ和其他的资源。这些大量的文档对于很好地利用sendmail的各种特色功能是非常重要的。所以Sendmai在当前来说是一个成熟的MTA。,sendmail具有一些缺点,其特色功能过多而导致配置文件的复杂性。当然,通过使用m4宏使配置文件的生成变得容易很多。但是,要掌握所有的配置选项是一个很不容易的事情。Qmail在设计实现中特别考虑了安全问题。Qmail要比sendmail小很多,其缺乏一些现今邮件服务器所具有的特色功能。若用户系统有很好的带宽,Qmail将具有更好的性能,而如果用户系统的带宽资源有限,并且要发送很多邮件列表信息,则sendma

12、il效率更高一些。Qmail的源代码相对于sendmail来说要更加容易理解,这对于希望深入到内部了解MTA机制的人员来说是一个优点。Qmail在安全性方面也要稳定一些。Qmail有很好的技术支持,但是没有像sendmail那样被广泛地应用和大量的管理员用户群。Qmail的add-ons比sendmail要少一些。Qmail被认为相对于sendmail更加安全和高效,运行Qmail的一台pentium机器一天可以处理大约2,000,000条消息。,Qmail相对于其他的MTA要简单很多,主要体现在:(1)其他的MTA的邮件转发、邮件别名和邮件列表都是采用相互独立的机制,而Qmail采用一种简单

13、的转发(forwarding)机制来允许用户处理自己的邮件列表。(2)其他的MTA都提供快速而不安全的方式及慢的队列方式的邮件投递机制;而Qmail发送是由新邮件的出现而触发的,所以其投递只有一种模式:快速的队列方式。(3)其他的MTA实际上包括一个特定版本的inetd来监控MTA的平均负载,而Qmail设计了内部机制来限制系统负载,所以qmail-smtpd能安全地从系统的inetd来运行;sendmail有很多的商业支持,而且由于大量的用户群,在互联网上有大量的潜在技术支持。而Qmail只有很有限的技术支持。,Qmail还具有一些其他的缺憾。如它不是完全遵从标准,它不支持DSN,作者认为D

14、SN是一个即将消亡的技术,而Qmail的VERP可以完成同样的工作,而又不像DSN依赖于其他主机的支持。Qmail另外一个问题是其不遵从支持7bit系统标准,而每次都发送8bit。若邮件接收一方不能处理这种情况,就会出现邮件乱码的情况。从安全性来讲,sendmail要比Qmail差一些,sendmail在发展中出现过很多很著名的安全漏洞;而Qmail相对要短小精悍,但是仍然提供了基本的STMP功能。而Qmail的代码注释要少一些。Qmail的优点是每个用户都可以创建邮件列表而无须具有根用户的权限,Qmail速度快并且简单:Qmail是安全且容易配置的最佳的选择;Qmail可以在2个小时内完成配

15、置,而sendmail可能在两天内都完不成。,3.ZMailerZMailer是一个高性能、多进程的Unix系统邮件程序(又叫MTA per X.400 parlance),其可以从服务器ftp:/b/unix/mail/zmailer/中自由下载。它也是按照单块模式设计的,如Hotmail等邮件系统就是用Zmailer构建的。4.EximExim是由Cambridge大学开发的,遵从GPL的MTA,其风格上类似于Smail 3,但是比Smail 3更加完善。当前最新版本是3.34,其主站点为http:/。其最大的特点就是配置简单性,但是其安全性不如Qmail及Postfix。除了这里介绍的几

16、种MTA以外,还有Smail、Post.Office、the Sun Internet Mail Server(SIMS)、MMDF、CommuniGate、PMDF、Netscape Messaging Server、Obtuse smtpd/smtpfwdd、Intermail和MD Switch等其他商业或者免费的MTA可以选择。,13.2.2 Linux下的邮件用户代理1.MuttMutt继承elm并缺省使用相似的命令,但更强大和容易配置。它可以作为POP3或IMAP的客户端,并且对MIME和PGP有极好的支持。Mutt的主页在Http:/。Mutt遵从EDITOR/VISUAL约定。

17、2.ElmElm是第一个现代、屏幕驱动的Unix邮件系统,但已经停止开发并已被Mutt所取代。一些版本的Elm内置对POP3的支持。Elm不支持PGP。Elm也遵从EDITOR/VISUAL约定。,3.PinePine是为初学者设计的用户代理;它包括新闻阅读能力和内置的IMAP支持。许多人不喜欢它,命令集太少,可置配置性较差,自带的编辑器很难使用。但是,它对IMAP的支持极好。如果想下载,可以到Http:/pine处下载。Pine遵从EDITOR/VISUAL约定。4.NetscapeNetscape内置对POP3和IMAP的支持,可以作为一个邮件用户代理使用。因为它并不是专门作为MUA而设计

18、的,因此不像一个真正的MUA可以提供更多的服务(例如别名和PGP支持)。Netscape提供一个自带的小型编辑器,5.Emacs rmail/smail和vmEmacs有一个能发送的邮件模式称为smail,还有一个能接收阅读邮件的模式称为rmail。另一方面,rmail模式并不值得推荐。每一次运行rmail模式,它总是将收件箱转换成BABYL格式;通常的邮件工具将因此而无法工作(一旦出现这种情况,就在Emacs命令行输入M-x unrmail)。有一个支持emacs的邮件阅读器“vm”,可以读写标准的V7收件箱。它并没有随GNU Emacs一起发布,但可以访问它的主页Http:/。Emacs

19、smail/rmail/vm并不遵从EDITOR/VISUAL约定。作为替代,可以使用内嵌的Emacs。,6.BSD Mail如果在Linux或其他标准Unix的shell中简单输入“mail”,就调用了BSD Mail程序的某个版本。它是为终端方式设计的命令行驱动界面。BSD Mail遵从EDITOR/VISUAL约定。7.其他用户代理以下是一些已知的可以在Linux下运行的邮件用户代理程序。mush-mail users shell,在邮件过滤和批处理方面功能强劲。mh-mail handler它们都有相当复杂的界面。,13.3 mail命令,利用mail命令发送邮件,可以输入:mail

20、利用mail命令发送邮件,如下图所示。如果有多个接收人,他们的账号之间用空格隔开。,13.4 建立Linux下的邮件服务器,13.4.1 sendmailsendmail程序实际上由好几个部分组成,包括程序、文件、目录以及其所提供的服务。而配置文件是最基础的,用来定义其他几个部分的位置与行为,以及它们的规则与重写地址。一个队列目录缓存所有的邮件直到它被发送。还有一个别名文件为用户提供类似邮件列表的服务。,1.sendmail守护进程如果要sendmail处理发送来的信件,必须有一个守护进程在运行。sendmail守护进程就是带有特殊标志位的sendmail程序。这个守护进程是/etc/init

21、.d/mail脚本在系统启动的时候自动启动的,在此脚本中用来启动sendmail的命令如下:/usr/lib/sendmail-bd-q15m-bd标志是使sendmail作为一个守护程序运行。-q15m标志使sendmailfork出一个子守护进程来每隔15分钟处理一次消息队列。,2.sendmail脚本在一般的系统中随sendmail提供有两个脚本来完成一些通用的功能,尽量去使用这两个脚本来完成任务,因为它们是经过测试可以正确执行的。1)/etc/init.d/mail用户很少需要去手动启动或者停止sendmail。只有在要改变设置等情况下,必须终止所有运行的sendmail进程,“冻结(

22、refreeze)”设置文件,然后重新启动sendmail以使新的设置生效。要简化该工作,系统提供了一个脚本/etc/init.d/mail。这个脚本只有一个参数start|stop,其用来启动或者关闭sendmail进程。要停止sendmail进程,用以下命令:/etc/initod/mail stop,2)/etc/init.d/mail star/stop但用户必须是root才可以有这个权限。如果用start参数来启动/etc/init.d/mail,它检查sendmail相关文件和目录的权限以及存在与否。如果需要的东西(例如/var/spool/mqueue目录)不见了,这个脚本就创建

23、它。而对其他一些复杂的问题,例如/etc/aliases,该脚本就退出并给出一个提示。当/etc/init.d/mail stop命令被执行的时候,它向所有的sendmail进程发出SIGTERM信号来终止它们。系统在启动和终止的时候也是调用了/etc/inin.d/mailstart|stop。如果该系统在verbose模式下运行,则会显示下面的信息,此时证明sendmail已经启动了。Mailer daemons:sendmail,3)/usr/etc/configmail/usr/etc/configmail脚本提供了在命令行输入和sendmail.cf文件之间的接口。它把宏和类定义从管

24、道输入到sendmail.params文件中去。该脚本简化了sendmail设置。configmail脚本允许用户更改和设置几个sendmail参数。这些参数相当与sendmail.cf中的宏和类。可以验证当前的参数设定,设置特定参数,运行一个快速设置命令,以及可以得到一些在线帮助。configmail把用户做的改变保存在senmail.params文件中。sendmail在每次启动的时候都要读取该文件。,3.sendmail相关的文件和目录sendmail的设置文件和目录是:/etc/sendmail.cf/etc/sendmail.fc/etc/sendmail.hf/etc/sendma

25、il.st/etc/aliases/var/spool/mqueue/var/mail,1)/etc/sendmail.cfsendmail程序的核心是sendmail设置文件/etc/sendmail.cf。该文件是一个ASCII文件,包含了绝大多数设置信息。sendmail在每次启动的时候都要读取它。它包括选项、头定义、发送程序定义、信任用户定义、消息优先级别、重写地址规则、宏定义和类定义。2)/etc/sendmail.fcsendmail.fc文件是一个冻结(frozen)的设置文件,一个冻结的设置文件就是当设置文件在被读取的时候sendmail来存放数据的一个镜像区域,sendmai

26、l.fc不是默认产生的。可以用touch命令来产生该文件。在sendmail.fc文件产生之后,它被用在/etc/sendmail.cf的场合,这个过程加快了启动速度。命令是:/usr/lib/sendmail-bz,3)/etc/sendmail.hf该文件是SimpleMailTransferProtocol(SMTP)的帮助文件。它包括一些SMTP命令的简单信息。4)/etc/sendmail.st该文件使用来统计和sendmail相关的信息。这个文件也不是随系统带的。你也可以用touch命令来创建它。如果该文件已经存在,sendmail自动将相关的统计数据更新到该文件中。5)/etc/

27、aliases该文件包含sendmail程序所用到的别名数据库的文本形式。别名数据库包括本地收信者的别名。,6)/var/spool/mqueue/var/spool/mqueue是邮件队列临时存放的目录,/var/spool/mqueue下有不同的队列,消息被存放在不同的队列中。消息队列文件有以下的形式:qf*-消息队列控制文件。df*-数据文件。tf*-临时文件。nf*-每个用户对应的消息队列。xf*-当前会话过程的transcript文件。一般来说,sendmail守护子进程周期性的处理此队列,尝试发送每个消息。,/etc/init.d/mail脚本启动sendmail进程使它每15分钟

28、fork出一个子进程来处理这个mail队列。每次sendmail处理这个队列的时候,它就读取此队列并排序,然后试图依次运行各个任务。7)/var/mail该目录存放所有收到的邮件。每个本地的用户都会从/var/mail目录下的一个文件中收到自己的邮件。例如,guest用户从/var/mail/guest文件中收取邮件。,4.sendmail命令这一节要讲述的是:sendmail0newaliasesmailq1)sendmailsendmail是实现sendmail路由和转发服务的程序。作为一个程序,它在命令行有很多标志可以被设置用来构件sendmail环境。用man1sendmail可以得到

29、更详细的介绍。2)/usr/bsd/newaliasesnewaliases是用来更新DBM格式的别名数据库的程序。在别名文件被改动之后必须运行此程序。否则,更改过的别名没有记录在DBM别名数据库中,也就不能为sendmail所知道。3)/usr/bin/mailq此命令打印当前消息队列列表。,5.邮件的域在sendmail的环境中,一个域是一个逻辑上管理而定义的控制区域,而不是物理上的边界。可以设置三个一般的域:root:本地域空间中最高的域。direct:一个节点(station)可以直接发送邮件的域(不需要转信或者中级)。local:一个节点(station)所属于的域。下面的参数在/u

30、sr/etc/configmail脚本和/etc/sendmail.cf文件中指明了域:configmail参数:rootdomain、directdomain和localdomain。sendmail.cf的宏和类:root域:Tmacro。direct域:Dclass。local域:Dmacro。,6.邮件转发站邮件转发站是一个作为邮件网关进入另一个网络的机器。一般来说,网关两边的机器不可以直接通信,因此建立一个转发站是物理上必要的(而不仅仅是管理上定义的),邮件转发站并不一定比网络中的其他机器在邮件路由上更“聪明”,但是它们被“更好的连接”。邮件转发站可以把邮件转发到域名空间之外的某些点

31、上。指派一个邮件转发站主要是由一个网络的物理拓扑决定的;缺省的sendmail.cf文件只指定一个邮件转发站,该站的名字必须在设置文件中被定义(hard-coded)。下面的参数在/usr/etc/configmail脚本和/etc/sendmail.cf文件中指明了邮件转发站:configmail参数:forwarder。sendmail.cf宏和类:F。,7.邮件中继一个邮件中继站是一个收集所有发送到指明的域或者一组域的邮件的机器。在没有MX记录和邮件中转(mail exchanger)的情况下,邮件中继站提供了一种让邮件在实际的发送之前被集中到一个中心点的机制。邮件中继站不一定要比网络中

32、的其他机器“更好的连接”,但是它们在邮件路由上要更“聪明”。它们把邮件发送到域名空间内所有的点。中继站的机器名称是一个特别的名称,用来在网络中识别中继站。这个特殊的名字一般是用宏R来定义典型的名称是“relay”。一个中继站还通过别名“relay”来指派。默认的sendmail.cf文件探测一个名字或者别名是特殊中继站的机器,然后把邮件优先发送到这个站而不是实际的目的站。当本地站不能确定合适的路由的时候,邮件也都被发送到中继站。下面的参数在/usr/etc/configmail和/etc/sendmail.cf中指派一个邮件中继站:configmail参数:relayname。sendmail

33、.cf宏:R。,8.用户设置的宏和变量1)域名的宏和类(D)D宏定义本地域名。要确认这个宏包括这个机器所在的域名。2)转发站名字宏和类(F)F宏定义这个机器把未知的机器或者域的邮件要转发到机器的名字或者别名。3)中继站名字的宏(R)R宏定义给所有机器用做中继站的机器的名字(或者别名)。4)顶层的域宏(T)T宏定义了本地域空间顶层的名字。5)终止(killed)机器类(K)K类是一个在本地域中已知“终止(killed)”或者“死(dead)”的机器列表。6)路径别名数据库宏Pathalias(P)P宏定义了sendmail用来发送UUCP邮件路由的路径别名数据库的位置。,9.安装配置简单介绍一下

34、从源代码编译、配置sendmail的过程,因为使用RPM或者dpkg的包安装比较简单,配置也大同小异,需要的读者可参考相关的资料。从下载sendmail和。当前其最新的稳定版本为。下载得到tar.gz格式的压缩包以后,将其存放在/usr/src目录下。解压软件包:rootemail src#tar xvfzrootemail src#cd编译安装:rootemail sendmail-8.12.2#cd sendmailrootemail sendmail#sh Build生成配置文件:rootemail sendmail#cd一般该目录下应该有config.mc的文件,如果没有则创建新文件c

35、onfig.mc,然后运行:rootemail cf#sh Build config.cf 该命令将在该目录下生成config.cf文件。然后安装sendmail:rootemail sendmail#sh Build install将config.cf拷贝到/etc/mail目录下,并改名为sendmail.cf:rootemail mail#cpsendmail.cf在/etc/mail目录下创建access文件,内容如下:127.0.0.1 RELAY202.116.95 RELAY这里表示允许本机和网段中的机器通过该邮件服务器转发邮件。其中是拥有的局域网络IP网段的IP地址,只需要写网

36、络部分即可。,然后对access文件生成易于检索的库文件格式:rootemail mail#makemap hash access.db access最后还要创建别名数据库。在/etc/mail/aliases目录下创建文件aliases,内容如下:MAILER-DAEMON:postmasterpostmaster:rootbin:rootdaemon:rootnobody:root然后生成aliases库:rootemail mail#newaliases然后可以启动sendmail了。rootemail mail#/usr/sbin/sendmail-bd-q20m,13.4.2 qma

37、il的安装和配置1.安装环境及准备工作2.安装qmail1)建立目录2)建立qmail用户3)打补丁和安装qmail4)安装ucspi-tcp-0.885)添加别名用户6)停用其他的mail服务,设置新的mail服务,3.安装ucspi-tcp-0.88#tar zxvf#cd ucspi-tcp-0.88#make#make setup check,4.安装vpopmail1)建立目录2)添加用户和组3)添加mysql的vpopmail用户4)编译安装vpopmail5)创建tcp.smtp文件6)进行编译7)vpopmail的操作(1)创建虚拟域:(2)创建用户名:(3)查询用户状态:(4)删除用户:(5)删除组:,5.安装cmd5checkpw6.生成qmail启动脚本在/etc/qmail中加入几个文件。,小结本章主要介绍E-mail在Linux上的应用,包括客户端和服务器端,并加以比较。通过学习,读者可以掌握现在流行的软件。需要注意配置各种服务时要大胆地进行尝试,例如:在配置sendmail时候,需要对照sendmail.cf和上面的配置细则。这样对于读者的收获将是不可估量的。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号