我在 Solaris 5.11 上运行 sendmail。本地用户名的格式为 <字母><数字>(例如 hn06511)。过去我们使用别名指向 <用户名>@olddomain.com。
<用户名> <用户名>@olddomain.com
现在有一个新的电子邮件地址方案和一个新的域名。现在电子邮件地址的格式为 <firstname>.<lastname>@newdomain.com。
因此我将别名改为:
<用户名> <名字>.<姓氏>@newdomain.com
这有效,但是 <username>@olddomain.com 不再有效。更糟糕的是,有许多脚本将电子邮件地址硬编码为旧样式。
因此,我想将 <username>@olddomain.com 更改为 <firstname><lastname>@newdomain.com。我认为我可以使用 virtusertables 来实现这一点,因此我创建了一个包含以下内容的 virtusertable:
@旧域名.com %1
据称,这应该采用 <anybody>@olddomain.com 并将其路由到用户名 (%1)。我希望我定义的别名会将 <username> -> <firstname>.<lastname>@newdomain.com 进行转换。但据我所知,sendmail 完全忽略了这个 virtusertable,并尝试将邮件发送到 <username>@olddomain.com,当然,失败了。
据我所知,我正确格式化了 virtusertable 并运行了 makemap(我应该使用 dbm 还是 hash?我都见过)。据我所知,我已经放入了正确的 FEATURE 并完成了 make,并确保生成的 sendmail.cf 位于正确的位置。我见过 FEATURE 以两种方式表达
功能(
virtusertable',
dbm -o /etc/mail/virtusertable')
和
功能(
virtusertable',
hash -o /etc/mail/virtusertable')
但都不起作用。
我可以提供并尝试什么样的调试或其他信息?
提前致谢。
答案1
针对 root 用户的 virtusertable 调试命令
@oldomain.com
在 virtusertable 中查找条目
echo '/map virtusertable [email protected]' | sendmail -bt
检查 sendmail 是否检查 virtusertable 中是否存在 olddomain.com 电子邮件地址
echo '3,0 [email protected]' | sendmail -d60.5 -bt
-d60.5
跟踪地图的查找(也是虚拟用户表查找)。
更多提示:
m4
期望另一个引用FEATURE(virtusertable,`hash /etc/mail/virtusertable')
不要将 virtusertable 设为可选。从行中删除 。sendmail
-o
会FEATURE
忽略缺失的 virtusertable。-o
Sendmail 使用 virtusertable 的编译版本。用于
makemap
编译 virtusertable。$=w
virtusertable 仅针对本地电子邮件域( )和$={VirtHost}
域进行咨询。以 root 身份使用以下命令获取两个域列表
echo '$=w' | sendmail -bt echo '$={VirtHost}' | sendmail -bt