Qmail使用SMTP發信的設置問題集

- 中國WEB開發者網絡 (http://www.webasp.net)
-- 技術教程 (http://www.webasp.net/article/)
--- Qmail使用SMTP發信的設置問題集 (http://www.webasp.net/article/10/9757.htm)
-- 作者:未知
-- 發佈日期: 2004-06-09
1.qmail的發信三個問題。
  2.對於發信的rcphosts文件答疑。
  3.向合法用戶發信無法forward。
  4.QMAIL除了禁IP控制發郵件有其他辦法嗎?
  5.smtp啟動腳本疑問。
  6.由relaying問題引起的qmail能收信不能發信問題解決。
  7.qmail的smtpd認證缺點.

  1.qmail的發信三個問題。

  Q: 1.qmail發信時與對方的smtp服務器有幾次認證過程,就是一次不成功的話回重發幾次?如何順序?如何調整?
  2.發信部成功的反彈消息是依靠什麼模塊?可以關掉嗎?
  3.如果對方機器沒有開啟,如何反應?

  A: 1 qmail與對方郵件服務器的之間交互不存在認證過程 只有能否鏈接上
  2 qmail根據一些列規則查找指定的郵件接收用戶,若沒有找到則缺省返回用戶不存在的信息,若使用了vpopmail則可以設定目標用戶不存在時將郵件投遞給一個指定用戶,可以參考我的第三篇qmail文章
  3 那qmail就會返回對方主機不可達的消息

  Q: 謝謝您的回答,還有點疑惑
  1。qmail與對方郵件服務器的之間交互不存在認證過程 只有能否鏈接上 ,是否只要對方的smtp開啟就把信發過去,但是對方因為沒有這個用戶不收如何?因為想加快郵件發送速度,想做到以下幾點,如何作?
  2。qmail發信時一次不成功的話不再重發,從隊列中刪去。
  3.發信不成功的不反彈消息。
  4.如果對方機器沒有開啟,這在10-30分鐘內不再發送此域的信。
  謝謝。這其實是在發大量的信的情況下才需要的。看到5分鐘內可發送1萬封電子郵件的報道,您認為如何?

  A: 1 那對方可能在當時smtp協議交互過程中就直接告訴no such user 或者將信接收下來 再判斷是否有該用戶 若沒有 則返回no such user 的錯誤信。這些要求可能比較麻煩 需要自己修改qmail程序
  ==============
  2.對於發信的rcphosts文件答疑。

  Q: 為何我在服務器上設置好qmail和vpopmail後,用foxmail向別的email服務器(如:163.net 21cn.com)發送email會出現:
  Warning
  The server says:
  553 sorry, that domain isn't in my list allowed rcpthosts
  (#5.7.1)
  Continue?
  可是我將21cn.com,163.net加入到/var/qmail/control/ rcpthosts 後就沒事了,可正常收發郵件。難道我要一個個郵件服務器加入到rcpthosts文件?有什麼方法可以不用那麼麻煩呢?...多謝了...^_^' 我將 rcpthosts刪除了,就沒事了,可是這樣做好不好呢?...^_^

  A: qmail有一個名為rcpthosts(該文件名源於RCPT TO命令)的配置文件,其決定了是否接受一個郵件。只有當一個RCPT TO命令中的接收者地址的域名存在於rcpthosts文件中時,才接受該郵件,否則就拒絕該郵件。若該文件不存在,則所有的郵件將被接受。當一個郵件服務器不管郵件接收者和郵件接收者是誰,而是對所有郵件進行轉發(relay),則該郵件服務器就被稱為開放轉發(open relay)的。當qmail服務器沒有rcpthosts時,其是開放轉發的。請仔細看這個文件的含義
  ----------------------------
  3.向合法用戶發信無法forward。

  Q:我安裝並配置qmail後,我嘗試向本機的某一合法用戶(sexy_boy)發信(非root組),產生如下信息:
  new msg 379069
  info msg 379069: bytes 204 from qp 2665 uid 0
  starting delivery 16: msg 379069 to local sexy_boy@mail.tom.com
  (1)status: local 1/10 remote 0/20
  (2)delivery 16: deferral : /bin/sh:_dot-forward:_command_not_found/
  而且(1),(2)行信息每隔一段時間就重複出現。我的mail server為mail.tom.com
  我了root的別名為:mr_ho 請高手們幫幫我。我已經搞了一個星期,還沒有搞好。謝謝!

  A:你沒有 安裝 .forward程序!請看我的主頁mlix.yeah.net看如何下載和安裝
  =============================
  4.QMAIL除了禁IP控制發郵件有其他辦法嗎?

  QMAIL-SMTPD密碼驗證
  Q: 大俠們,QMAIL除了禁IP控制發郵件有其他辦法嗎?一旦別人利用來發垃圾郵件不是慘了,難道就沒有密碼驗證的補丁嗎?有的話告訴我好嗎?最好告訴設置的方法

  A:如果使用vpopmail實現虛擬賬號 則其提供了一種使漫遊用戶使用mail relay二其他用戶不允許的方式。其原理是當一個用戶使用pop3取了信件以後 則在其後的一端時間內 允許該用戶的ip地址通過該服務器relay 具體可以參考< a HREF="www.inter7.com/vpopmail/">vpopmail的文檔
  ================
  5.smtp啟動腳本疑問。

  Q:smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd
  請問這語句在inetd.conf文件中是什麼意思?我知道它是啟動smtp服務的,可我想問的是,為什麼會有八個字段呢?還有一些服務的啟動不止八個字段還要長,又是怎麼會事呢?多謝了..^_^
  本來應該是:名稱 封包類型 協議 wait/nowait 用戶程序執行參數這七個字段的吶..

  A:最後兩個字段看作是參數
  ===============
  6.由relaying問題引起的qmail能收信不能發信問題解決。

  Q:我的QMAIL可以收!不能發出去!好像就是RELAYING的問題!各位大俠可以幫幫我嗎?

  A: 您先看看control目錄下的smtproutes文件, 它的內容使用那台機器發信, 如果沒添, 添一個機器, 如果還是不行, telnet 那台機器的25端口, 如果仍然不行, 檢查那台機器的inetd.conf看看25端口有沒有打開.

  Q: 我在裡面添了好多郵件服務器的域名了
  163.net 263.net citiz.net
  還添了我自己的郵件服務器。按你的意思是只要一台就行了嗎?是添我自己的還是別人的郵件服務器呢?能不能說詳細一點?(我很笨!對不起)

  A: 是添你要往外發郵件的機器, 是你自己的機器, 你肯定要有台機器發郵件啊. 那台機器要運行smtp守護進程. 只要添一台就可以了, 那些什麼263.net統統去掉, 應該在那台機器上做配置.

  Q: 我的機器已經有smtp進程了!域名也添進去了是想用我自己的機器發郵件!(作為郵件服務器)可是我發郵件時報錯!發不出去啊!

  A:1.你要先檢查你的機器是不是在一個防火牆後面,也許 你的防火牆把你的25port關了.
  2.現在你看看是不是用
  qmail-start ./Mailbox sqlogger qmail 啟動了
  Qmail.在/etc/syslog.conf裡面把mail.*定向到
  /var/adm/maillog. 檢查log裡面有什麼東西
  3.你說發不出去,你直接telnet localhost 25 檢查有沒有什麼問題. 能直接用這個發嗎?
  4.用ptrace(如果沒記錯的話)來跟蹤這個pid,看錯誤信息

  Q:1。我的機器不在放火牆後
  2。進程有
  qmail-send
  splogger qmail
  qmail-lspawn|preoot
  qmail-rspawn
  qmail-clean
  3.已經定向到mailog中
  maillog中的錯誤信息是:
  第一行:Jun 16 08:26:54 HY qmail:
  961115214.632296 starting delivery 337: msg 144928 to remote kil@126.com
  第二行:Jun 16 08:26:54 HY qmail: 961115214.632418
  status:local 0/10 remote 1/20
  第三行:Jun 16 08:26:54 HY qmail: 961115214.636463 delivery 337:
  deferral:Sorry,_I_wasn't_able_to_establish_an_SMTP_connection._(#4.4.1)/
  第四行:Jun 16 08:26:54 HY qmail: 9611154.636559 status:local 0/10 remote 0/20
  4.我的telnet xxx.xxx.xxx.xxx 25 的過程:
  telnet xxx.xxx.xxx.xxx 25
  220 domain ESMTP
  helo dude
  250 ok
  mail <pghygxy@163.net>
  250 ok
  rcpt <pghygxy@163.net>
  250 ok
  354 go ahead
  502 unimplemented(#5.5.1)
  下面輸入什麼命令都是502 unimplemented(#5.5.1)如果是MAIL給本地用戶而不是INTERNET用戶就可以發!也收的到(自己服務器的用戶)

  A:1.你的進程看起來有點奇怪,
  qmail-lspawn|preoot 應該有點問題.我不知道你的啟動腳本是怎麼寫的, 用下面這個應該沒問題:

  echo "Starting qmail..."
  PATH=/var/qmail/bin:$PATH
  export PATH
  qmail-start ./Mailbox splogger qmail &
  2.你應該給另外一個Email服務器發信件test,你現在發過去的Email服務器可能有問題,多實驗幾個地址.
  ================
  7.qmail的smtpd認證缺點.

  我也曾試過smtp採用驗證的方式.(以下是我的經驗不知對否)
  不過有個缺點就是只有你漫遊的用戶成功收取到信件後才能在驗證的文件(open-smtp)中加入一條記錄如202.109.73.241:...表明可以允許該IP的客戶發信了即使不在rcphosts中,所以如果你沒有成功收信是不可以發信的.而/home/vpopmail/bin/cleansmtp定期如分鐘清理open-smtp中記錄.又重複上面的過程了.
  這種smtpd驗證的方式對於發信的人來講真是太不方便了.

webasp.net