話說Sendmail是大學時候看過的東西,對它還真是越來越陌生。
Smart Host是一種email message transfer agent,簡單來說就是一台中繼的Mail Server,凡是User要送出的信,並不會直接送給收件者的Mail Server,而是先送到該中繼點,再由Smart Host送給收件者的Mail Server,如下圖所示。
透過 sendmail 的sendmail.mc 設定,讓外寄的信都轉送到該SMART HOST(我的SMART HOST是1.1.1.3),為了避免外寄來的信都轉給該主機的User,必須加上FEATURE(stickyhost)。
所以請將以下兩行加入/etc/mail/sendmail.mc 中,建議用copy and paste,避免符號寫錯。
... FEATURE(stickyhost) define(`SMART_HOST', `relay.dnsexit.com') ...
接著執行更新
# m4 sendmail.mc > sendmail.cf # /etc/init.d/sendmail restart
接著利用mail這個指令,與/var/log/mail.log進行check與deubg。
brook@vista:~$ mail --debug-line-info --debug-level=30 rene3210@gmail.com -s "brook" Cc: in sendmail.c:112: sendmail (/usr/sbin/sendmailn mu_auth.c:255: Getting auth info for UID 1000 mu_auth.c:195: Trying generic... mu_auth.c:198: generic yields 38=Function not implemented mu_auth.c:195: Trying system... mu_auth.c:198: system yields 0=Success mu_auth.c:206: source=system, name=brook, passwd=x, uid=1000, gid=1000, gecos=BROOK,,,, dir=/home/brook, shell=/bin/bash, mailbox=/var/mail/brook, quota=0, change_uid=1 mu_auth.c:255: Getting auth info for UID 1000 mu_auth.c:195: Trying generic... mu_auth.c:198: generic yields 38=Function not implemented mu_auth.c:195: Trying system... mu_auth.c:198: system yields 0=Success mu_auth.c:206: source=system, name=brook, passwd=x, uid=1000, gid=1000, gecos=BROOK,,,, dir=/home/brook, shell=/bin/bash, mailbox=/var/mail/brook, quota=0, change_uid=1 mailer.c:454: mu_mailer_send_message(): using From: brook@vista progmailer.c:188: Sending headers... progmailer.c:221: Sending body... progmailer.c:269: /usr/sbin/sendmail exited with: 0 brook@vista:~$ tail -f /var/log/mail.log May 2 21:35:44 vista sendmail[383]: My unqualified host name (vista) unknown; sleeping for retry May 2 21:36:44 vista sendmail[383]: unable to qualify my own domain name (vista) -- using short name May 2 21:36:44 vista sendmail[383]: t42DaiZa000383: from=brook@vista, size=85, class=0, nrcpts=1, msgid=<201505021336.t42DaiZa000383@vista>, relay=brook@localhost May 2 21:36:44 vista sm-mta[388]: t42DaiNp000388: from=<brook@vista>, size=364, class=0, nrcpts=1, msgid=<201505021336.t42DaiZa000383@vista>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1] May 2 21:36:44 vista sendmail[383]: t42DaiZa000383: to=<rene3210@gmail.com>, ctladdr=brook@vista (1000/1000), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30085, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (t42DaiNp000388 Message accepted for delivery) May 2 21:36:45 vista sm-mta[390]: t42DaiNp000388: to=<rene3210@gmail.com>, ctladdr=<brook@vista> (1000/1000), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=120364, relay=[1.1.1.3] [1.1.1.3], dsn=2.0.0, stat=Sent (<201505021336.t42DaiZa000383@vista> [InternalId=109168394] Queued mail for delivery)
關於FEATURE(stickyhost)的說明
Beginning with V8.7 sendmail, addresses with and without a host part that resolve to local delivery are handled in the same way. For example, user and user@local.host are both looked up with the User Database (userdb on page 942) and processed by the localaddr rule set 5 (The localaddr Rule Set 5 on page 700). This processing can result in those addresses being forwarded to other machines. user ← not sticky user@local.host ← sticky
如果該Smart Host想要開放給其他Mail Server做relay用,請在/etc/mail/access做設定,如我要開放給jpr-Version-M4610這台機器做relay用,設定畫面如下。
接著執行
# makemap -v hash /etc/mail/access.db < /etc/mail/access # /etc/init.d/sendmail restart
-
參考資料:
- SMART_HOST, http://www.codemud.net/~thinker/GinGin_CGI.py/show_id_doc/237
- https://www.dnsexit.com/support/mailrelay/sendmail.html
#!/bin/sh
回覆刪除((
s=${1:-Quota}
to=${2:-rene3210@fake.mail.tw}
quota=$(SUDO_ASKPASS=/home/brook/pass sudo -A repquota -sa | txt2html)
echo "From: rene3210@fake.mail.tw;"
echo "To: $to"
echo "Subject: $s"
echo "Content-Type: text/html;"
echo "MIME-Version: 1.0;"
echo "$quota";
) |/usr/sbin/sendmail -t -v) > /tmp/sendmail
brook@vista:~$ cat ~/pass
#!/bin/sh
echo this_is_my_password