我在 Solaris 5.11 上運行 sendmail。本地用戶名的格式為<字母><數字>(例如hn06511)。過去,我們使用別名來指向 <使用者名稱>@olddomain.com。
<使用者名稱> <使用者名稱>@olddomain.com
現在有一個新的電子郵件地址方案和一個新的網域。現在,電子郵件地址的格式為 <firstname>.<lastname>@newdomain.com。
所以我將別名改為:
<使用者名稱> <名字>.<姓氏>@newdomain.com
這有效,但是 <用戶名>@olddomain.com 不再有效。雪上加霜的是,許多腳本都採用舊風格硬編碼電子郵件地址。
所以我想更改 <username>@olddomain.com -> <firstname><lastname>@newdomain.com。我認為我可以使用 virtusertables 來完成此任務,因此我製作了一個 virtusertable,其中包含:
@olddomain.com %1
據說應該採用 <anybody>@olddomain.com 並將其路由到使用者名稱 (%1)。我希望我定義的別名能夠翻譯 <username> -> <firstname>.<lastname>@newdomain.com。但據我所知,sendmail 完全忽略了這個 virtusertable,並嘗試傳遞到 <username>@olddomain.com,當然失敗了。
AFAICT 我正確格式化了 virtusertable 並運行了 makemap(我應該使用 dbm 還是 hash?我都見過)。 AFAICT 我已經放入了正確的 FEATURE 並完成了 make 並確保生成的 sendmail.cf 位於正確的位置。我見過 FEATURE 表示兩者
功能(
virtusertable',
dbm -o /etc/mail/virtusertable')
和
功能(
virtusertable',
哈希-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 設定為可選。
-o
從線上移除FEATURE
。
使用-o
sendmail 會忽略缺少的virtusertable。Sendmail 使用 virtusertable 的編譯版本。用於
makemap
編譯virtusertable。$=w
virtusertable 僅針對本機電子郵件網域 ( ) 和$={VirtHost}
網域進行諮詢。以 root 身分使用以下命令來取得兩個網域列表
echo '$=w' | sendmail -bt echo '$={VirtHost}' | sendmail -bt