Linux 版 (精华区)

发信人: tcpip (高级草包), 信区: Linux
标  题: 公报11-家庭网络中的邮件配置-2
发信站: 紫 丁 香 (Wed May  3 09:21:05 2000) WWW-POST


1. 如果sendmail找不到你的邮件服务器:
编辑/etc/sendmail.cf找下面的行: 

#Dj$w.Foo.COM 

改成: 

Djmaster.kulai.org 

kulai.org是你的邮件服务器。注意:删去“#”,因为“#”表示是注释行。这是
sendmail的一条规则,它告诉sendmail邮件服务器在什么地方 -- 如果是DNS的话,则不
需要。 

2. 基于目的的伪装:
最为困难的时候是让sendmail只在给INTERNET发信的时候伪装而在本地的邮件中却不。例
如:我想让本地的邮件显示发送者为:bmote@kulai.org而不是bmote@deniz.com,很显然
我希望发往INTERNET的邮件都具有bmote@deniz.com的发送者信息。为解决这个问题,你
可以手工地修改/etc/sendmail.cf文件,找到本地邮件规则集的10和30(提示:找S10和
S30),删掉这两行 -- 或是注释掉。 

# Envelope sender rewriting 

S10 
R<@> $n errors to mailer-daemon 
R@ <@ $*> $n temporarily bypass Sun bogosity 
R$+ $: $>50 $1 add local domain if needed 
R$* $: $>94 $1 do masquerading <-- delete this line 

# Header sender rewriting 

S30 
R<@> $n errors to mailer-daemon 
R@ <@ $*> $n temporarily bypass Sun bogosity 
R$+ $: $>50 $1 add local domain if needed 
R$* $: $>93 $1 do masquerading <-- delete this line  

对于这个问题m4不能解决,所以你必须直接修改sendmail.cf文件。当然你需要重启
sendmail。 

注意: 在我的邮件程序中,我的"From:"行是“jpollman@kulai.org”,所以sendmail只
是伪装向外发的邮件。非常感谢 Achim Lobbert。 

3. 使用未允许的名字失败:
如果你只是在邮件的"To:"部分写上用户的名字,邮件将会消失在INTERNET上。你应该告
诉sendmail这些未允许的名字的邮件该发到哪里。 在master.mc的末尾加入: 

define(`LOCAL_RELAY',`mail.kulai.org')  

LOCAL_RELAY: 在说一次,把你的邮件服务器的名字,而不是mail.kulai.org放在这儿。
这一行让sendmail发送未允许的名字,像“bmote”,到你的邮件服务器上。例如:
sendmail将会为bmote加上kulai.org。这样你就可以在邮件中只输入bmote就行了,而不
用写bmote.kulai.org。当然,你还得使用m4,重复地重启,让它起作用。 

我不知道我用了多少次的m4编辑我的sendmai.mc,然后又重启了多少次。我写了一个脚本
程序去做这些工作。现在我只需要用m4修改文件,然后运行:./newsendmail(脚本程序
的名字)。程序如下: 

#!/bin/sh 
m4 master.mc > _master.cf 
cp _master.cf /etc/sendmail.cf 
/etc/rc.d/init.d/sendmail restart 

把它放到/usr/lib/sendmail-cf/cf目录下,并设置成可执行: 

chmod 700 newsendmail [Enter] 

------------------------------------------------------------------------------
--


家庭网络中的邮件配置
POP3
作者:JC Pollman and Bill Mote  译者:Chris Yang、刘健、王郸


------------------------------------------------------------------------------
--

设置一个POP3服务器是一件很简单的事。首先设置服务器再设置帐户。 

编辑/etc/services并保证下面这两行存在,删掉行头的“#”字符。 

pop-3 110/tcp # PostOffice V.3
pop 110/tcp # PostOffice V.3 

编辑/etc/inetd.conf并删去下面这行头上的“#”字符: 

pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d 

然后重启inetd; 

killall -HUP inetd [Enter] 

现在你的pop3服务器已经完全地启动了,并可以操纵它了,简单而漂亮。 

它将使用登录名和口令为在服务器上有帐户的用户提供邮件服务。如果有些用户只有邮件
服务的需要,为安全起见,你应该限制他们的其他权限。要使一个用户不能登录,可以把
/etc/passwd文件中该用户对应的口令域置为“*”,并指定一个假的shell -- 例如
/bin/fail -- 在所在行的最后一个域。这样,该用户还是可以使用邮件服务,如果IP伪
装设置好了话,还可以使用modem。但是他们不能telnet,ftp或其他一些远程程序连接到
邮件服务器。 

你们中的很多人可能想使用imap而不是pop3。本文的目的是先设置好pop3,等一切工作正
常后,再试试imap。尽管imap提供了很大的方便,尤其当你需要经常切换到不同的操作系
统和使用不同的邮件客户端程序,更是如此。但我们对此保留意见。几乎每次有人想侵入
我的邮件服务器的时候,他们都会测试一下imap。有些安全问题在imap的早期版本中存在
过但现在已经被修改了,所以如果你想在你的服务器上实现它的话,我们强烈推荐使用最
新版本。 

家庭网络中的邮件配置
Fetchmail
作者:JC Pollman and Bill Mote  译者:Chris Yang、刘健、王郸


------------------------------------------------------------------------------
--

Fetchamail会从网络上(你的ISP帐户或其他你拥有邮件帐户的地方)读取你的邮件并把
它们传给正在服务器上运行的procmail程序,然后procmail把邮件放进你的帐户里。它可
以用于很多中邮件服务器,包括pop3和IMAP,但它不能用于Exchange服务器。 

尽管fetchmail可以处理很多琐碎的事情,我们还是让它保持简单。每一个在INTERNET上
有帐户的用户得创建一个文件:~/.fetchmailrc。对我们服务器上的"jpollman"用户,
/home/jpollman/.fetchmailrc文件是这样的: 

poll www.deniz.com with proto POP3 
user "jpollman" there with password "mypassword" is jpollman here  

每一部分的解释: 

poll www.deniz.com: 连接 www.deniz.com -- 我的ISP的pop3服务器。 
with proto POP3: 使用pop3协议接收邮件。 
user "jpollman" there: 我在ISP邮件服务器的登陆名。
with password "mypassword": 密码。 
is jpollman here: jpollman 是在家庭邮件服务器的用户。 

放一个.fetchmailrc文件在每一个需要从INTERNET收邮件的用户的家目录下。注意:每个
.fetchmailrc文件应该有所不同,应为每个人都有不同的internet邮件地址。而且,
fetchmail在权限和所有权的设置上有写独特 -- 对于邮件口令应该应该是隐私来说是一
件好事。确认.fetchmailrc是正确的,对"jpollman"使用以上的例子: 

chown jpollman /home/jpollman/.fetchmailrc [Enter] 
chmod 700 /home/jpollman/.fetchmailrc [Enter] 

如果一个用户在INTERNET上有多于一个的帐户,则加入多个以该用户名开始的行。 

我们可以让fetchmail作为守护进程来运行,频繁地查看ISP。但是,如果没有建立连接,
fetchmail会启动diald。我们可以用一个脚本程序(我叫它getmail)来做。该脚本被cron
和ip-up.local调用-- 看下面的例子: 

#!/bin/sh 

if [ -f /var/lock/LCK..ttyS3 ]; then 
    su jpollman -c fetchmail 
    su bmote -c fetchmail 
fi 

但它运行时,首先检查是否已经建立了连接(diald在建立连接后会把一个LCK..ttyS3的
文件放在我的/var/lock目录下,在断开连接时删掉该文件)。注意:也许你的daild的设
置会和我们的不同,也许你在使用pppd或可能使用不同的com端口,那样lock文件可能会
有不同的名字。这个脚本程序如果没有发现lock文件则退出。如果我们建立的连接,脚本
程序用su命令变成用户jpollman然后执行fetchmail程序。选项“-c”表示执行一条命令
。fetchmail在接收完jpollman的邮件后,脚本程序又用su命令变成bmote然后再执行
fetchmail去接收他的邮件。注意:jpollman和bmote是我们自己服务器上的用户 -- 而不
是ISP邮件帐户的名字。 

Cron:这是cron的一个快速教程。crond是一个在你boot机器时被启动守护进程,并且一
直在后台运行。它每分钟读一次crontab看看有没有什么东西要执行的。你需要为"root"
用户创建一个crontab。在"root"下键入: 

crontab crontab [Enter] 

"root"用户现在有了他自己的crontab文件 -- 和系统的相同。修改"root"的crontab,键
入: 

crontab -e [Enter] 

留下所有头上的行并删掉程序行。完成后应像这样: 

SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
HOME=/ 
MAILTO="root" 

要让cron执行一个程序,加入一个由六个域组成的行:前5个是时间域,第六个是要执行
的程序。 例子: 

0 1 * * * getmail 

时间域可分解为: 

时间/日期域是: 

域名           允许值
----           ------
minute         0-59
hour           0-23
day of month   0-31
month          0-12(r names, see below)
day of week    0-7(0 or 7 is Sun, or use names) 

如果一个域的值是“*”则表示“从第一个允许值到最后一个允许值”。 

可以指定数字的范围。数字的范围由两个数字和一个连字符组成。例如:
在"hour"域指定8-11表示在8,9,10和11点执行。 

所以在上面的例子中(0 1 * * * getmail)getmail将在每天早上的1点钟被执行。我更
喜欢让它每5分钟执行一次,我的crontab是这样的: 

0-59/12 * * * * /usr/local/bin/getmail 

为得到更多的crontab文件的帮助,键入: 

man 5 crontab [Enter] 

ip-up.local:为了让脚本程序在每次建立连接时执行,需要把它加入到
/etc/ppp/ip-up.local( 或ip-up文件,如果你只有这个文件的话)。加入它需要一个行
指定脚本的全路径。我的是这样的: 

/usr/local/bin/getmail 

家庭网络中的邮件配置
最后的一些思考
作者:JC Pollman and Bill Mote  译者:Chris Yang、刘健、王郸


------------------------------------------------------------------------------
--

当sendmail将邮件排队时,它将会把邮件放在哪儿? 邮件队列的目录是
/var/spool/mqueue。所有的邮件都变成两个文件,一个为dfXXXnnnnn, 另一个为
qfXXXnnnnn。XXX是3个字母的序列号,nnnnn是5个数字的序列号。它们用于唯一地标识一
封邮件。"qf",表示队列控制文件,包含电子邮件的信息头和各种处理信息; "df"表示
数据文件,包含邮件的内容。还有另外两个文件,只是被sendmail所用。 

要看sendmail在做什么,可以查看/var/log/maillog文件这个文件非常难懂,但它是你唯
一可以查看错误发生的地方。 

你们中有些人在ISP的帐户名和在本机的登录名不一致。Fetchmail很明显地接受你的邮件
并把它们送到所属的地方,但sendmail却需要一些特别的帮助。查看一下
sendmail-Address_rewrite HOWTO。如果你能看懂本文的话,那篇文章应该是很简单的。
 

当开始不成功的时候千万别放弃。我用sendmail四年,并获得了不同程度的成功。它是一
个发展多年的怪兽。因为INTERNET上大部分的邮件是靠sendmail来传递的,所以它是值得
你花时间的。 

最后的想法:我们给了你一个设置简单家庭邮件系统的方法。成功总是会带来很多的乐趣
。下面是供进一步学习的资料: 

Sendmail Homepage
Fetchmail Homepage
Procmail Info 

两个sendmail的著名的替代品: 

Exim
Qmail 


--
"这一千多年没写诗了?"
"写了, 不过只写了两句."
"千年得两句, 一定是万古丽句了. 念来听听."
"好吧, 我现丑了" 太白星清了清嗓子, 浑厚的男中音在天庭响起:
大海啊, 都是水;
骏马啊, 四条腿;

※ 来源:·紫 丁 香 bbs.hit.edu.cn·[FROM: freesrc.hit.edu] 
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.635毫秒