针对 root 用户的 virtusertable 调试命令

针对 root 用户的 virtusertable 调试命令

我在 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跟踪地图的查找(也是虚拟用户表查找)。


更多提示:

  1. m4期望另一个引用

    FEATURE(virtusertable,`hash /etc/mail/virtusertable')
    
  2. 不要将 virtusertable 设为可选。从行中删除 。sendmail-oFEATURE忽略缺失的 virtusertable。
    -o

  3. Sendmail 使用 virtusertable 的编译版本。用于makemap编译 virtusertable。

  4. $=wvirtusertable 仅针对本地电子邮件域( )和$={VirtHost}域进行咨询。

    以 root 身份使用以下命令获取两个域列表

    echo '$=w' | sendmail -bt
    echo '$={VirtHost}' | sendmail -bt
    

相关内容