1.11. FAQ

1.11.1. 安装 majordomo,aliases 文件中有:majordomo: "|/usr/local/majordomo/wrapper majordomo"。majordomo运行时报错:smrsh: "wrapper" not available for sendmail programs (stat failed)。为什么?
1.11.2. 尤其是在和其它软件配合使用时,Sendmail经常会因为文件或者目录的权限问题——组写权限,而报错。怎么办?
1.11.3. 如何让sendmail具有泛email支持?即无需设置本机账号的邮件账户?
1.11.4. 一个用户离开了公司,但仍然收到许多关于他/她的邮件,我怎么让别人知道此人已经使用新的邮件地址?
1.11.5. 为什么我更改了上面各种配置文件后仍然不起作用?
1.11.6. 怎么检查一封邮件的发封过程?
1.11.7. 如果用 POP3 命令,直接在服务器上操作邮件?
1.11.8. 如何用 SMTP 命令,远程登录到服务器上发送邮件?
1.11.1.

安装 majordomo,aliases 文件中有:majordomo: "|/usr/local/majordomo/wrapper majordomo"。majordomo运行时报错:smrsh: "wrapper" not available for sendmail programs (stat failed)。为什么?

因为Sendmail使用 smrsh (SendMail Restricted SHell)。smrsh程序的目的是作为在mailer中为sendmail定义的"/bin/sh"的替代shell。smrsh是一种受限shell工具,它通过"/etc/smrsh"目录来明确指定可执行文件的列表。简而言之smrsh限制了攻击者可以执行的程序集。当它与sendmail程序一起使用的时候,smrsh有效的将sendmail可以执行的程序的范围限制在smrsh目录之下。

在 sendmail.mc 文件中的配置:

FEATURE(`smrsh',`/usr/sbin/smrsh')dnl

smrsh 允许执行的程序,需要在 "/usr/adm/sm.bin" 目录中创建符号连接。如果定义了环境变量 SMRSH_CMDDIR,则smrsh允许运行的程序放在该环境变量定义的目录中,否则该目录为:"/usr/adm/sm.bin"。测试 smrsh:

$ ln -s /usr/bin/vim /usr/adm/sm.bin/
$ /usr/sbin/smrsh -c /usr/bin/vim
1.11.2.

尤其是在和其它软件配合使用时,Sendmail经常会因为文件或者目录的权限问题——组写权限,而报错。怎么办?

如果不想对文件、目录的设置过于苛刻的话,可以考虑使用 DontBlameSendmail 选项。例如:


define(`confDONT_BLAME_SENDMAIL', `AssumeSafeChown')
define(`confDONT_BLAME_SENDMAIL', `GroupWritableAliasFile')
define(`confDONT_BLAME_SENDMAIL', `GroupWritableDirPathSafe')
define(`confDONT_BLAME_SENDMAIL', `GroupWritableIncludeFileSafe')
define(`confDONT_BLAME_SENDMAIL', `IncludeFileInGroupWritableDirPath')
define(`confDONT_BLAME_SENDMAIL', `IncludeFileInUnsafeDirPath')

1.11.3.

如何让sendmail具有泛email支持?即无需设置本机账号的邮件账户?

通过设置 LUSER_RELAY,还和 procmail 配合使用。


define(`LUSER_RELAY', `local:root')

1.11.4.

一个用户离开了公司,但仍然收到许多关于他/她的邮件,我怎么让别人知道此人已经使用新的邮件地址?

加下面的行到M4宏配置文件中

FEATURE(`redirect')dnl

然后加下面的行到aliases文件中:

olduser: him@new.address.REDIRECT

所有发到旧的邮件地址的人将收到一个新邮件地址的通知消息.

1.11.5.

为什么我更改了上面各种配置文件后仍然不起作用?

更改配置后,需要进入到/etc/mail 目录下,执行:


cd /etc/mail
make
newaliases
/etc/init.d/sendmail restart

或者:在任意配置文件更改后都要运行makemap,例如:


# makemap hash virtusertable.db < virtusertable

但是对于local-host-names和relay-domains文件的更改要用下面的命令重启Sendmail


#killall -HUP sendmail 

对aliases文件的更改要运行

#newaliases 
1.11.6.

怎么检查一封邮件的发封过程?

在Sendmail邮件服务器上执行下面的命令.


# echo testing | /usr/sbin/sendmail -f sender@somedomain.com -v someone@somedomain.com 

1.11.7.

如果用 POP3 命令,直接在服务器上操作邮件?

telnet 登陆服务器的 110 端口,执行 POP3 命令:

  • USER <username>

  • PASS <password>

  • LIST [msg]

  • TOP [msg] [count_n]

  • UIDL [msg]

  • APOP name digest

  • DELE [msg]

  • NOOP

  • QUIT

1.11.8.

如何用 SMTP 命令,远程登录到服务器上发送邮件?

telnet 登陆服务器的 25 端口,执行 SMTP 命令:

  • HELO <your.site.name>

    或者:EHLO <your.site.name>

  • MAIL FROM:<user@somewherer.net>

  • RCPT TO: <username@dest.domain>

  • DATA

  • QUIT