电子邮件是人们在网上最常使用的通信工具之一,它已经成为我们网络生活中不可或缺的一部分,因此建立一个安全、可靠的电子邮件系统是十分必要的。由于电子邮件的使用有着悠久的历史,因此有关电子邮件服务器系统的软件非常丰富,不过目前使用最广泛的还是一种自由软件──sendmail,它支撑着当前Internet邮件系统的主体。不过sendmail也有种种的不足,接下来我就给大家介绍一下Sendmail的弱点,以及两种可用于替换Sendmail的邮件服务器软件,希望大家在读完这篇文章之后能够对目前的邮件服务器系统软件有一个深入的了解。
Sendmail的不足之处
无论从使用的广泛程度,还是从代码的复杂程度来讲,sendmail都是一款非常优秀的软件。如果使用它来构建网站的电子邮件系统,基本上不必费心,因为几乎所有的Unix缺省配置中都内置这个软件,只需要设置好操作系统,它就能立即运转起来。然而,Internet用户的要求更为苛刻,纷纷指出sendmail中包含的各个不足之处。
1、sendmail的安全性较差,这是因为当其作者Eric Allman最初开始写作这个软件的时候,Internet的用户还很少,因而安全性并不没有得到大家的重视。由于邮件系统需要处理的是外部发送来的各种各样的信息,甚至包含一些恶意数据,然而sendmail在大多数系统中都是以root身份运行,一旦出现问题,就会对系统安全造成严重影响。在这种情况下,要防止出现安全问题,仅仅依赖程序本身是不可取的,应该从系统结构出发,使程序拥有的特殊权限限制到最小。
2、由于其早期的Internet用户数量及邮件数量都相当小,Sendmail的系统结构并不适合较大的负载,对于高负载的邮件系统,需要对Sendmail进行复杂的调整。例如,通常情况下sendmail只启动一个进程顺序向外发送邮件,如果邮件较多时就要花费相当长的时间。
3、Sendmail的设置相当复杂,对于使用缺省设置来收发电子邮件,问题并不存在。当管理员打算进行一些特殊设置,以便利用Sendmail提供的复杂邮件处理能力时,就不得不面对复杂的宏和正则表达式。虽然现在Sendmail使用了宏预处理程序m4使设置更易于理解一些,但是掌握Sendmail的设置仍然是对系统管理员的一大挑战。
第一种替换选择Qmail
为了解决sendmail的安全问题,整个系统结构需要重新设计。基本的原则是将系统划分为不同的模块,有负责接收外部邮件的,有管理缓冲目录中待发送的邮件队列的,有将邮件发送到远程服务器或本地用户的。Qmail就是按照这个原则进行的设计,它由多个不同功能的小程序组成,只有必要的程序才是setuid程序(即以root用户权限执行),这样就减少了安全隐患,并且由于这些程序都比较简单一些,因此就可以达到较高的安全性。
这种按照Unix思路的模块化设计方法也使得Qmail具备较高的性能,因为如果需要,Qmail可以启动某个模块的多个实例来完成同一个任务,例如启动多个发送程序同时向外发送邮件,这对于提供邮件列表服务的邮件系统是非常有益的。这种方式也使得Qmail要占用较大的网络带宽,如果带宽有限,效果反而不好,但在当前网络性能大幅度提高的情况下,这种方式是非常合适的。
Qmail还提供一些非常有用的特色来增强系统的可靠性,例如,它提出了Maildir格式的邮件存储方式,这使得通过网络文件系统NFS存取邮件成为可能。此外,Qmail还具备一些非常别致的特色,它不仅仅提供了与Sendmail兼容的方式来处理转发、别名等能力,还可以用以Sendmail完全不同的方式来提供这些功能。从它的编译安装方式、提供的扩展功能和源代码的风格,可以看出其作者Dan Bernstein是一个极具个性化的程序员。正因为如此,对于Qmail的某些方面,有着一些争论,例如有些人认为Qmail的安装设置并不易于理解,很容易让人糊涂,而另一些人的看法则相反。基本上这是因为Qmail提供解决问题的方式,和Sendmail不大相同的缘故,这样对那些不太熟悉Sendmail的邮件系统管理员,反而更容易接受Qmail一些。
第二种替换选择Postfix
Postfix同样也是采用了模块化的方式,但与Qmail不同的是,Postfix使用了一个主控进程进行监控。Postfix在很多方面都考虑到了安全问题,它甚至不向root分发电子邮件,以避免以root身份读写文件或启动外部程序。考虑到它的作者Wietse Venema曾编写了著名的安全软件TcpWrapper,并是SATAN程序的合作人员之一,Postfix的安全性是非常值得信赖的。
同样,Postfix的性能也非常不错,甚至在Qmail作者自己进行的测试中也表明,Postfix的性能和Qmail基本相当。但Postfix占用的内存要大一些,这主要是由于Postfix和Qmail在系统结构上的差异造成的。
与Qmail不同,Postfix更着眼于作为Sendmail的直接替换,使用Postfix替换Sendmail却相当简单,因为Postfix使用的很多文件和Sendmail一致,只需要在配置文件中指明原有Sendmail配置文件的位置就可以了,Postfix甚至还提供了sendmail和mailq程序,以保持兼容性。基本上,可以直接从Sendmail转换为使用Postfix,而不需要额外的设置。Postfix提供的安装配置方式也相当简单,它使用中心化的配置文件和非常易理解的配置指令。
Postfix提供的一些强大的功能主要在于多种数据库表查询方式,例如它支持DB、DBM、passwd文件、正则表达式、MySQL数据库以及LDAP方式的查询,用于支持系统级的别名、虚拟主机等。虽然在Qmail中也能支持这些功能,但没有象Postfix那样统一、简洁。此外,更改Postfix的设置之后,也不需要重新启动整个系统,只需要使用postfix reload就能完全刷新配置,这也避免了丢失邮件的可能性。
事实上,除了Qmail和Postfix之外,还有很多种邮件系统,例如Smail、Exim等,然而毫无疑问Qmail和Postfix是其中最优秀的,也是Sendmail最有力的竞争者。此外,还有一些商业邮件服务器产品,但一般情况下,购买商业邮件服务器软件大部分是冲着其提供的服务或者是附加功能来的,例如群件产品通常带有很多额外功能用于办公环境等。
至于在Sendmail、Postfix和Qmail之间进行选择,基本上依赖于用户自己的偏好。有些人喜欢Qmail提供的复杂特色,而有的人希望对Sendmail的替换能简单一些,也有人不打算更换,而坚持使用Sendmail的最新版本。对于一个熟悉Unix系统而又愿意改善邮件系统性能和安全性的管理员,应该转换为使用Postfix或Qmail,除非对Sendmail非常熟悉而保持了特殊的感情。在Postfix和Qmail之间,它们各自有一批忠心拥护者,选择哪个都是可行的。不管选择哪种邮件系统核心,都需要选择过硬的专业电子邮件系统厂商提供完善的技术支持服务,除非您本身有强大过硬的技术力量,否则,您将面对的是一场恶梦.
文章转载:奇码科技站长网(bbs.gmakj.com) 原文地址: http://bbs.gmakj.com/fuwuqi/linux/060A2F02010_2.html
分享到:
相关推荐
Linux邮件服务器软件在IT行业中扮演着重要的角色,特别是在企业级通信和自动化任务中。这篇文章将对比几种主流的Linux邮件服务器软件,重点介绍Postfix的特点和优势。 Postfix是由IBM资助并由Wietse Venema开发的,...
在Linux环境中,邮件服务器软件(Mail Transfer Agent,MTA)的选择多样,其中Sendmail曾是主流,但随着技术的发展,出现了许多替代品,如Qmail、Postfix、Exim和Zmailer等。这些MTA各有特点,其中Postfix是一个受到...
注意:为了安全,你应该对Sendmail进行适当的防火墙配置,允许必要的端口(如25/tcp for SMTP)通信,并考虑使用安全增强的Sendmail配置或结合其他邮件服务器(如Postfix)以提高安全性。 安装Sendmail后,可以与...
在实际应用中,我们可能还需要处理异常,例如网络问题、认证失败或者邮件服务器拒绝发送等。此外,还可以通过`email.addAttachment`方法添加附件,或使用`MultiPartEmail`来发送包含文本和图片等多部分的复杂邮件。 ...
在提供的"SendMail"示例中,可能包含了实现上述步骤的代码示例,包括如何设置邮件内容、如何连接SMTP服务器以及如何处理发送过程中的各种情况。通过研究这个示例,开发者可以更好地理解如何在Android应用中实现自动...
本文将介绍如何使用SendEmail这个轻量级的工具代替sendmail在Nagios中发送报警邮件。 首先,让我们了解一下SendEmail。SendEmail是一个小巧的命令行工具,适用于Linux和Unix系统,能够方便地通过SMTP协议发送邮件。...
- `sendMail()`方法:这是主要的发送方法,接收必要的参数如收件人、主题、正文等,然后构建并发送邮件。 - `createSession()`方法:创建一个`Session`对象,设置SMTP服务器的属性。 - `createMessage()`方法:...
在这里,你可以设置邮件服务器的主机名、SMTP服务器的地址以及其他参数。 3. **PHP设置**:在PHP中,`mail()`函数的使用还需要在`php.ini`文件中进行适当配置。`sendmail_path`指令应指向`sendmail`的可执行文件,...
SMTP是互联网上标准的邮件传输协议,通常由邮件服务器提供。QQ邮箱作为常见的免费邮件服务,提供了SMTP服务器供用户使用。在使用PHPMailer与QQ邮箱集成时,你需要获取并配置SMTP的相关信息,包括SMTP服务器地址、...
通过`SMTP`类,我们可以连接到SMTP服务器,使用`login`方法进行身份验证,然后使用`sendmail`方法发送邮件。结合`email.mime`模块,我们可以构建包含不同格式和内容的邮件。理解这些基本概念和操作,将使你能够灵活...
smtplib是一个用于发送邮件的库,它能够通过SMTP协议与邮件服务器进行交互。而email模块是一个用于生成邮件内容的库,它能够方便地构建出符合RFC 2822标准的邮件内容。 在开始编写发送邮件的代码之前,我们需要准备...
这个过程基本上涵盖了三个主要步骤:连接到邮件服务器、进行用户验证以及发送邮件内容。 首先,要使用smtplib模块,需要导入smtplib包。通常,为了发送带附件或图片的邮件,还会需要导入email.mime包,这是一个支持...
需要注意的是,由于网络和安全性的原因,许多邮件服务商要求在发送邮件时使用SSL加密连接,即使用`SMTP_SSL`代替`SMTP`类,并且可能需要安装额外的加密证书。在实际的使用中,开发者需要根据邮件服务商的官方文档来...
它定义了邮件服务器之间交换邮件的规则。邮件从发送方的SMTP服务器经过一系列中转,最终到达接收方的SMTP服务器,然后放入接收者的邮箱。 2. **Python的`smtplib`库**: Python的`smtplib`库为开发者提供了一个...
总结以上内容,使用Python的smtplib库发送邮件是一个简单的过程,但需注意邮箱的安全设置,特别是在使用第三方客户端时,使用授权码代替登录密码是必须的操作。这样就可以有效避免`SMTPAuthenticationError`这类认证...
当邮件无法发送时,检查邮件服务器的日志(如sendmail的maillog)是非常有用的。日志中的错误信息,如`dsn=5.0.0, stat=Serviceunavailable`,通常能指示出问题所在,可能是服务器配置问题、网络问题或者是邮件服务...
在描述中提到的"nodemailer-transport"是Nodemailer的一个核心部分,它定义了如何与邮件服务器通信的策略。"nodemailer-plugin"则可能包含一些自定义插件,这些插件可以扩展Nodemailer的功能,例如添加日志、错误...
最后,通过`sendmail()`方法发送邮件,并用`quit()`关闭连接。 如果你的邮件需要包含附件,可以使用`MIMEBase`或者其他相关的MIME类来添加附件。例如: ```python from email.mime.base import MIMEBase from ...
SMTP,全称为Simple Mail Transfer Protocol(简单邮件传输协议),是一种互联网标准协议,用于在邮件服务器之间传输电子邮件。通过一系列命令,SMTP能够控制邮件从源地址到目标地址的传递过程。在现代互联网通信中...