发新话题
打印

Sendmail大全

263shanghai

Sendmail大全

本章要点:

本章讨论电子邮件服务的基本概念及其配置、管理。

本章具体包括以下内容。

邮件传送的基本过程

sendmail的配置

邮件服务的一些特殊功能

qmail的简单介绍

7.1 sendmail 和SMTP

7.1.1 smtp和邮件传输代理

sendmail是最重要的邮件传输代理程序。理解电子邮件的工作模式是非常重要的。一 般情况下,我们把电子邮件程序分解成用户代理,传输代理和投递代理。

用户代理用来接受用户输入的指令,将用户给出的信件报文传送至信件传输代理。而 投递代理则从信件传输代理取得信件传送至最终用户的邮箱。显然,最终用户只能看到 用户投递代理。

当用户试图发送一封电子邮件的时候,他并不能直接将信件发送到对方的机器上,用 户代理必须试图去寻找一个信件传输代理,把邮件提交给它。

信件传输代理得到了邮件后,首先将它保存在自身的缓冲队列中,然后,根据邮件的 目标地址,信件传输代理程序将找到应该对这个目标地址负责的邮件传输代理服务器, 并且通过网络将邮件传送给它。对方的服务器接收到邮件之后,将其缓冲存储在本地, 直到电子邮件的接收者察看自己的电子信箱。

显然,邮件传输是从服务器到服务器的,而且每个用户必须拥有服务器上存储信息的 空间(称为信箱)才能接受邮件。(发送邮件不受这个限制)

可以看到,一个邮件传输代理的主要工作是监视用户代理的请求,根据电子邮件的目 标地址找出对应的邮件服务器,将信件在服务器之间传输并且将接收到的邮件缓冲或者 提交给最终投递程序。

有许多的程序可以作为信件传输代理,但是sendmail是其中最重要的一个,事实证明 它可以支持数千甚至更多的用户,而且占用的系统资源相当少。不过,sendmail的配置 十分复杂,因此,也有人使用另外的一些工具,如qmail。当然,基 于Windows NT的Exchange Server和NetScape Message Server也是这种产品的例子。

无论什么产品,它们必须支持同样的规范,如信件传输的报文格式,监听的端口等等 。一般来说,系统管理员并不需要了解信件传输的命令标准,用户代理会生成正确的命 令。但是,了解其他一些信息是重要的。

信件传输代理运行在25端口接受请求,当接受用户的请求时,它不需要了解用户的真 实身份,或者说不需要身份验证。因此用户不需要提交用户口令就可以发出电子邮件, 这意味着任何用户都可以冒充成另外一个用户发出假的电子邮件,这是电子邮件设计的 一个基础,无法消除。(关于这一点目前有一点说明。许多基于UNIX的系统运行indent d,可以记录客户机器上的用户的登录名字。不过,这个功能实际上用处不大,毕竟大部 分人不会用UNIX/Linux作为他的个人机器)。

当sendmail程序得到一封待发送的邮件的时候,它需要根据目标地址确定将信件投递 给那一个服务器,这是通过DNS服务实现的。例如,有一封邮件的目标地址是someone@y ahoo.com,那么,sendmail首先确定这个地址是用户名(someone)+机器名(yahoo.co m)的格式,然后,通过查询DNS来确定需要把信件投递给某个服务器。

DNS数据中,与电子邮件相关的是MX记录,这可以在查询DNS时设置查询类型为mx来得 到:

[wanghy@mail ~]$ nslookup

Default Server: www.asnc.edu.cn

Address: 202.199.248.2

set q=mx

yahoo.com

Server: www.asnc.edu.cn

Address: 202.199.248.2

Non-authoritative answer:

yahoo.com preference = 0, mail exchanger = mx1.mail.yahoo.com

yahoo.com preference = 1, mail exchanger = mx2.mail.yahoo.com

mx1.mail.yahoo.com internet address = 128.11.68.225

mx2.mail.yahoo.com internet address = 128.11.68.217

显然,在DNS中说明yahoo.com有两个信件交换(MX)服务器,于是,sendmail试图将 邮件发送给两者之一。一般来说,排在前面的的MX服务器的优先级别比较高,因此服务 器将试图连接mx1.mail.yahoo.com的25端口,试图将信件报文转发给它。如果成功,你 的smtp服务器的任务就完成了,在这以后的任务,将由mx1.mail.yahoo.com来完成。在 一般的情况下,mx交换器会自动把信件内容转交给目标主机,不过,也存在这样的情况 ,目标主机(比如yahoo.com)可能并不存在,或者不执行smtp服务,而是由其mx交换器 来执行信件的管理,这时候,最终的信件将保存在mx机器上,直到用户来察看它。

可以简单地在DNS记录中用MX关键字设置信件交换,例如,在我们的设置中:

@ IN SOA openlab.asnc.edu.cn. wanghy.openlab.asnc.edu.cn. (

1997022700 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS openlab.asnc.edu.cn.

IN MX 10 mail.asnc.edu.cn.

IN MX 20 mail2.asnc.edu.cn.

openlab IN A 202.199.248.6

openlab IN MX 10 mail2.asnc.edu.cn.

mail IN A 202.199.248.11

www IN A 202.199.248.2

mail2 IN A 202.199.248.177

这里面定义了三个MX记录,MX记录的规则是[机器名/域名] IN MX [优先级] [服务 器]。优先级是一个整数,数值越小优先级越高。第一个IN MX 10 mail.asnc.edu.cn.因 为没有机器名,使用来自named.conf的缺省后缀,就是asnc.edu.cn,这个定义也就是让 所有some@asnc.edu.cn的信件传送到mail.asnc.edu.cn。IN MX 20 mail2.asnc.edu.cn .的概念差不多,只是其优先数为20,也就是说只有当mail.asnc.edu.cn拒绝接受(比如 ,服务器忙或者当机)的时候,信件才会投递到mail2.asnc.edu.cn。openlab IN MX 1 0 mail2.asnc.edu.cn.定义凡是someone@openlab.asnc.edu.cn的信件要发送到mail2.a snc.edu.cn,以此类推。

MX记录可以使得整个子域内的用户使用同样的邮件主机和传输代理,另外,如果你的 主机不 姨 痪了,那么信件可以暂时存储在你的信件 换主机上,直到你自己的机器恢 复为止。比如说,mail.yourdomain.com是一台smtp主机,而mx2.yourdomain.com是另外 一个smtp主机,你希望在mail.yourdomain.com正常的时候直接由其自身收发邮件,而万 一mail崩溃,mx2为它暂时存储一段时间的邮件直到mail恢复正常工作-这是常见的设置 ,那么,你需要把mail以比较高的优先数设置成自己的信件交换主机,而mx2作为一个优 先数较低的信件交换主机,也就是,在你的DNS配置文件中,应该这样配置:

mail IN MX 0 mail

IN MX 10 mx2

如果DNS查询无法找出对某个地址的MX记录(通常因为对方没有信件交换主机),那么 sendmail将是试图直接与对方的主机(来自邮件地址)对话并且发送邮件。例如,test@ openlab.asnc.edu.cn在DNS中没有对应的MX记录,因此sendmail在确定MX交换器失败后 ,将从DNS取得对方的IP地址并直接和对方对话试图发送邮件。

sendmail发送邮件时,如果经过设定的时间后仍然未能将信件投递到目的主机,它将 返回一个错误信息并且休息一段时间,然后重新试图投递,如果连续多次失败,sendma il最终将放弃投递并将错误信息投递给postmaster用户。在许多机器上,postmaster用 户是root用户的一个别名(参考下面关于别名的内容),你应该将它设置为邮件的实际 管理员的用户名。

上面说的基本就是sendmail的工作方式,然而仍然有一个很让人迷惑的东西,就是所 谓“信封地址”。简单地说,当sendmail向目标地址发信的时候,它并不是直接用你的 信件内容发送,相反,它依赖于你给它的命令。例如,你可能会用mail程序向某个地址 这样发信:

$mail someone@somedomain.com

To:other@otherdomain.com

Subject:test mail

test

.

那么,当sendmail发信的时候,它是向someone@somedomain.com发信而不是other@ot herdomain.com。相应地,如果你想向两个人发信,例如你在outlook里面写上:“投递 给user1@a.com,抄送user2@b.com”,那么sendmail应该怎么做?直接同时向两个地址 发信吗?否,它试图构造两个包装(称为信封),每个包装上只列出一个投递地址,各 投递一次。虽然邮件正文的头部仍然包含两个地址,但是sendmail不会看它。
来源:水木清华BBS

1.为了安全,请不要在发帖时公布你的真实IP及域名;请在获得别人的帮助问题解决之后,编辑帖子分类为[已解决],并同样帮助有能力帮助的人--分享您的经验,分享大家的快乐!
2.专业提供邮件系统选型\安装部署\升级迁移\维护外包等全方位技术支持与咨询顾问服务;提供反垃圾邮件软件、硬件网关;Push Mail(移动电邮),BlackBerry(黑莓) 解决方案。
3.联系方式:QQ:36335336;MSN:neil_ding#msn.com;Email: neil_ding2000#yahoo.com.cn;TEL:020-34382506

Re:Sendmail大全

INETD是什么啊!!!

Re:Sendmail大全

关于 pop服务器的问题
楼主选用的是imap-4.5-4,我现在安装的是“imap-uw-2002d,1”---这个版本加入了pam认证,所以我在进行pop3的连接时总不成功,下边是我的命令序列:

# telnet localhost 110
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.unix.abc.cn.
Escape character is '^]'.
+OK POP3 localhost.unix.abc.cn v2003.83 server ready
auth
+OK Supported authentication mechanisms:
.
user abc
-ERR Unknown AUTHORIZATION state command

实在不知如何着手,求解!

Re:Sendmail大全

我把sendmail邮件服务器放在网关机上,然后用来relay内网出去的所有邮件,?
但????
是当一个内网用户用163.com的帐户向163.com帐户发信时,?就出现了问题,?信件发不出去,?
????
我是这样理解的,?因为163需要认证,?而我们发信时mail?from是163.com的帐户,?所以它必?
???
需要让这个用户认证后才能发信.但是relay的机制是直接将信转发到目的邮件服务器,?从而
????
就忽略了认证的过程,?请问我可以修改什么地方的配置,然后达到解决以上问题的目的吗???
??
???
下面我还是举几个例子吧:???
发送 接收 结果???
abc@163.com bcd@163.com 失败???
abc@163.com bef@other.com 成功???
someone@other.com someone@another.com 成功

为什么?
sendmail

Re:Sendmail大全

是否可以在sendmail的配置作做出在转发的时候连通用户口令一齐转发
?
,就象现在很多的pop3?proxy一样?谢谢
sendmail
发新话题
  清除 Cookies - 联系我们 - 邮件技术资讯网 - Archiver - WAP - 繁體中文
当前时区 GMT+8, 现在时间是 2008-9-7 22:04

本论坛为非盈利中立机构,论坛所有言论纯属发表者个人意见,与《 邮件技术资讯网》论坛立场无关。内容所涉及的版权和法律相关事宜请参考各自所有者的条款。
如果认定侵犯了您的权利,请联系我们尽快处理。本论坛原创内容请联系本站后再行转载并务必保留我站信息。此声明修改不再另行通知,本论坛保留最终解释权。
*本论坛QQ群:1#群2233231(已满) 2#群2598254(推荐) 3#群15974064(推荐) 4#群14173252(推荐)*
* 建议使用 1024×768 模式查看本论坛 *
Powered by Discuz! 6.1.0