qmail常見問題及解決辦法(更新中[12-23]....)

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

qmail常見問題及解決辦法(更新中[12-23]....)

Qmail常見問題解決辦法:
1.不能給sina發信
進入qmail/control創建helohost
echo serverip >; helohost

2. |/usr/local/bin/autorespond 10000 5
|表示調用一個程序來處理該郵件這裡是調用autorespond來處理;10000表示允許處理信
件的總時間;5表示在這段時間內的最大郵件
3.限制你的郵件列表被濫用
你需要在郵件列表文件頭加入一個過濾程序。一種選擇是使用qmail的補丁程序 qlist ,你可以在官方站點qmail.org找到它。它會使用 pgp 來標記你的郵件信息,一個包含pgp標識的過濾的郵件列表大致如下:
|if grep "^-----BEGIN PGP MESSAGE-----$"; then exit 0; else exit 100; fi
|if grep "^-----END PGP MESSAGE-----$"; then exit 0; else exit 100; fi
|if pgp -f; then exit 0; else exit 100; fi
+list
&address
&address
...
  只有郵件列表允許的用戶(假定是別名)才擁有pgp的密鑰。或者為需要的用戶指定一個密鑰文件。  另外一種過濾器通過檢查郵件,判斷是否來自本地用戶或者來自最近的qmail-smtpd進程。如果是本地用戶就允許通過,遠程站點的就退回該信件。它的形式如下:  |if grep Received: | tail +1l | grep network; then echo
    "This is a moderated list"; exit 100; fi
  +list
  &address
  &address
  ...

如果不是本地系統的用戶,你可以分配一個別名(記得chmod 700 ~alias),使它能投遞到郵件列表。運行:
  
  |grep -v '^Delivered-To:' | forward LISTNAME

必須刪除 Delivered-To: 這行,否則將它放棄這個別名
4. 如果你不想讓一份無法投遞的郵件在隊列里呆太久
你可以在 queue/info 目錄里運行
  touch -d '1 week ago'
來結束它的隊列生命周期。這樣,如果再次投敵不成功,這份郵件就會被退回
5.用telnet my.domain 25時返回:   
    Trying xx.xx.xx.14.....
    Connected to www.xxx.com
    Escape character is '^]'.   
    220 www.xxx.com ESMTP  
    502 unimplemented (#5.5.1)
此現象是密碼驗 證的包checkpasswd沒有裝好。
6.裝完qmail后,用本地的信箱或外面的信箱發信過來都顯示錯誤:
delivery 12: failure: Sorry,_no_mailbox_here_by_that_name._(#5.1.1)/沒有創建用戶的Maildir目錄.請記住,創建maildir目錄的組和用戶許可權必須正確
7. maillog裡面出現:
     "Unable_to_open_./Maildir:_is_a_directory._(#4.2.1)/"在修改rc里的./Mailbox 改成 ./Maildir/時出錯
8. maillog裡面出現:
oh:_.qmail_has_file_delivery_but_has_x_bit_set._(#4.7.0)/
.qmail文件多了個x標誌位,  運行chmod a-x .qmail  

9.maillog裡面出現:
"Unable_to_open_./Maildir:_is_a_directory._(#4.2.1)/"用戶的.qmail所在地方不對,此文件必須存在於用戶的HOME裡面
10.tcpserver執行qmail-smtpd 時默認的為40個進程,
要想修改更多的話,例:200個 tcpserver -c 200
tcpserver -v -u uid -g gid 0 smtp /var/qmail/bin/qmail-smtpd \
2>;&1 | /var/qmail/bin/splogger smtpd 3 &
&不要省略,
11.如何清除90天前的郵件find /home/vpopmail/domains/ -ctime +90 -type f -path '*Maildir/cur*' | xargs -i --verbose rm '{}' 2>;&1
12. Qmail拒收某個IP或網段的郵件
編輯你的tcp.smtp文件,加入:
對方的IP:deny
或者:
某個網段.:deny
例:2.82.34.:deny
來禁止2.82.34的整個網段的訪問。
然後使用tcprules重新生成tcp.smtp.cdb文件。
13.qmail自動刪除發給系統上不存在的郵件帳號的信,而且不產生系統退信echo'|/var/vpopmail/bin/vdelivermail' 'delete'>; /var/vpopmail/domains/yourdomain.com/.qmail-default
這會把發給不存在的用戶的信直接刪除掉.
14. 清除qmail的郵件隊列
安裝qmail-remove
qmail-remove -r
這步會把所有隊列內容移動到/var/qmail/queue/yanked目錄下。
接下來可以決定如何處理該目錄的內容了,垃圾郵件
15. Q: 有沒有簡單的方法可以阻止某些用戶發郵件到外部地址 (或內部伺服器)?
A: 可以.注意NO_RELAY標誌,它可以對任何用戶起作用:
vmoduser -r email@domain
Q: 有沒有方法可以拒絕整個域的POP連接,而不單是某個郵件地址?A: 當然.vmodeuser可以幫你解決問題:

vmoduser -p domain.com
16.把一郵件域的名字比如a.com更改為b.com,如何實現
以下幾個步驟:
1、cd /home/vpopmail/domains
mv a.com b.com
2、把vpopmail資料庫的vpopmail表導出把所有a.com改為b.com,然後刪除vpopmail表,再導入.
3、把把vpopmail資料庫的dir_control表的a.com改為b.com
4、在/home/qmail/control 目錄下把 virtualdomains和rcpthosts下的的a.com改為b.com.
5、在/home/qmail/users目錄下把assign文件的a.com改為b.com
6、需要運行qmail-newu重新生成cdb。assign只是配置文件,cdb才是實際的數據文件。
加快 qmail 投遞郵件速度
17. spamd調用maildrop方法
在youreal.com下修改.qmail-default
為:
| /usr/local/bin/maildrop ./.mailfilter
創建.mailfilter
內容如下:
VHOME=`/var/qmail/vpopmail/bin/vuserinfo -d $EXT@youreal.com`

if ( $SIZE < 262144 )
{
        exception {
                xfilter "/usr/bin/spamc -f -u $EXT@youreal.com"
        }
}

if (/^X-Spam-Flag: *YES/)
{
      

   
to "$VHOME/Maildir/.Trash/" ##使符合垃圾郵件特徵的郵件放到垃圾箱里

}
else
{
      exception {
                to "$VHOME/Maildir/."
        }
修改.mailfilter的屬性
chown vpopmail:vchkpw .mailfilter
chmod 600  .mailfilter

qmail控制文件的作用
qmail-inject
qmail-inject接受本地郵件消息后檢測郵件頭是否符合RFC822標準,並傳送給qmail-queue排進隊列
defaultdomain 用來向那些沒有使用正確的username@hostname.domain格式的郵件中增加郵件地址的,默認情況下,如果主機地址中沒有結束符".",qmail-inject將給主機名后添加defaultdomain的內容,如果該文件不存在,將使用me文件中的值代替.例如:defaultdomain值為yourdomain.com本地產生了一封發送給xxxx@xxxx的郵件,那麼qmail-inject將用yourdomain.com來補全這個後綴,變成xxxx@xxxx.yourdomain.com
defaulthost 用來定義主機名,用來向地址中不含主機名的郵件補足郵件地址的。類似於defaultdomain。例如:defaulthost值為yourdomain.com那麼發送給 xxxx的消息,將被qmail-inject用defaulthost的值來補足為xxxx@yourdomain.com,以便於qmail-send快速分辨是否屬於本地地址。
idhost 用來指定郵件中Message-ID:頭欄位的主機名例如:idhost值為yourdomain.com那麼郵件頭中如下:
Message-ID:<1234567890.12345.qmail@yourdomain.com>;
如果idhost值為xxxx.yourdomain.com 那麼郵件頭中如下:
Message-ID:<1234567890.12345.qmail@xxxx.yourdomain.com>;
plusdomain
用來將其值添加在任何一個以一個+號結尾的地址
qmail-qmqpc qmail-qmqpc是快速郵件排隊協議(QMQP)使用的程序,QMQP是一個QMAIL專用協議,用在工作站級QMAIL伺服器向中心伺服器發送隊列。
qmqpservers 用來指定qmail-qmqpc使用的上級伺服器
通常該功能應用很少,我認為qmail-qmqpc用法就是代替qmail-queue來直接傳給上級伺服器。
qmail-remote
qmail-remote通過SMTP協議向遠程主機傳送郵件。
helohost 該文件用來指定qmail-remote程序與遠程郵件主機SMTP會話中的主機名。
smtproutes 用來指定到固定目的的靜態SMTP路線。
例子:smtproutes內容如下
xxxx.yourdomain.com:mail8.xxxx.jp
:fw.xxxx.yourdomain.com:8088
第一行的存在會將發給xxxx.yourdomain.com的郵件重定向到mail8.xxxx.jp主機
第二行的存在會將任何不符合之前行條件的郵件重定向到fw.xxxx.yourdomain.com的8088埠,讓郵件安全的穿越防火牆
qmmail-remote將按照smtproutes中的行序來進行處理
timeoutconnect 用來指定qmail-remote嘗試同一個遠程郵件主機建立一個SMTP會話的時間。默認值狀態下如果超出60秒沒有得到遠程郵件主機的回應,那麼將斷開連接。
timeoutremote 用來指定qmail-remote在一個SMTP連接已經建立后,遠程郵件主機的每一個回應的時間數。默認值為1200秒。

qmail-send
qmail-send用來檢測隊列中每一個郵件的狀態,並調用相應的程序進行處理。例如一個目的為本地的郵件將會被qmail-send調用qmail-lspawn處理。
bouncefrom | bouncehost 默認情況下,退回給原始發送方的郵件的發件人地址為MAILER-DAEMON@HOSTNAME,如果你想修改MAILER-DAEMON這段,那麼就修改bouncefrom文件吧。如果想修改MAILER-DAEMON@HOSTNAME中HOSTNAME這段,那麼就修改bouncehost文件。例如:bouncefrom內容為SERVER-MANAGER | bouncehost文件內容為mail8.xxxx.jp那麼一封因為郵件地址不存在而被退回的通知郵件的發件人將是 SERVER-MANAGER@mail8.xxxx.jp
concurrencylocal 用來決定qmail可以同時運行的本地投遞進程的數目,默認值是10,標準安裝的qmail最大可設值是120。安裝的時候可以通過修改conf-spawn來將其變為255以下任何數目。
concurrencyremote 用來決定qmail可以同時運行的遠程投遞進程的數目,默認值是20,就是說,qmail可以在同一時間內同時發送20封郵件,標準安裝的qmail最大可設值是120。安裝的時候可以通過修改conf-spawn來將其變為255以下任何數目。
doublebouncehost | doublebounceto 這兩個控制文件類似於bouncefrom和bouncehost的關係,也是doublebouncehost指定主機名,doublebounceto指定用戶名。
他們的功能是為一個被退回兩次的郵件制定一條出路。例如:doublebouncehost內容為xxxx.yourdomain.com | doublebounceto內容為xxxx那麼一個被退回2次的郵件將被發送給xxxx@xxxx.yourdomain.com
沒有這兩個文件的時候,那麼發送給postmaster@me文件中的域名
envnoathost
qmail-send用來給沒有主機名的郵件收件人制定一個主機名的,通常這個文件並沒有必要,qmail-send總是使用me文件中的域名。
locals
用來為qmail指明位於本地的郵件地址。qmail-send利用此文件來判斷收件人地址是否是一個本地地址。
例如:locals文件中寫有xxxx.yourdomain.com
那麼qmail-send檢測到隊列中有發送給@xxxx.yourdomain.com的郵件的時候,就會調用qmail-lspawn來進行本地投送。
me 如果沒有me文件,那麼你的qmail將拒絕執行。me文件用來指定本地郵件伺服器的主機名。以上列出的許多控制文件在沒有被創建的時候,qmail都會用me中的值來代替。
percenthack 在UUCP協議中帶有%並在該文件中列出的地址將會被轉換為一個標準的DNS格式主機名。
queuelifetime 用來指定一個郵件在隊列中的最大存活時間,默認是604800秒,當一個郵件達到這個時間線后,qmail將最後一次嘗試發送這封郵件,如果依然失敗,會將其從隊列中刪除。
virtualdomains
讓qmail接受本地郵件以外,還接受該文件中指定的域或者郵件地址,就是常說的虛擬域支持。
qmail-smtpd
qmail-smtpd接受遠程主機的郵件並轉交給隊列處理程序qmail-queue來處理。
badmailfrom 用來指定不喜歡的發件人的郵件地址或者是域名
例如:badmailfrom中寫有
advt@msn.com
@hotmail.com
如果advt@msn.com給該郵件主機送信時,將得到code 553,告知其是一個不受歡迎的發件人。而所有來自hotmail.com的發件人也將得到同樣的code 553。
databytes 用來指定該郵件伺服器可以接受郵件的最大位元組數。
例如:databytes指定為8000000
那麼如果有人給該主機發送的郵件位元組數超過了這個商業上默認的最大容忍限度,將得到code 552,告知其郵件大小超出了該郵件主機所能容忍的限度。恐怖的是,默認狀態下,這個文件並沒有,如果有人用你伺服器上的兩個不存在的地址作為FROM/TO發一個100M的郵件 :o
localiphost
用來為使用ip來標示目的主機的郵件消息指定本地主機名的例如:xxxx.yourdomain.com的ip地址為198.17.1.2 | localiphost內容為xxxx.yourdomain.com那麼一封發送給xxxx@的郵件的地址會被轉換為xxxx@xxxx.yourdomain.com
rcpthosts | morercpthosts
這兩個文件用來指定qmail可以接收的除本地主機名外的其他域名他們的作用是相同的,不過因為rcpthosts中的域名不能超過50行,所以才出現了morercpthosts文件
timeoutsmtpd 用來指定qmail-smtpd等待遠程SMTP主機發送數據的時間線。默認的情況下,如果連接建立后1200秒內沒有接受到遠程SMTP主機的任何信息,那麼將關閉這個連接。
smtpgreeting 用來指定SMTP連接的歡迎標誌
例如:smtpgreeting值為 welcome connect to out open relay mail server - ad.xxxx.yourdomain.com那麼建立一個smtp連接的時候將會看到如下信息:
Trying 198.17.x.x...
Connected to ad.xxxx.yourdomain.com.
Escape characteris ^].
220 welcome connect to out open relay mail server - ad.xxxx.yourdomain.com ESMTP
delivery 1: deferral: Uh-oh:_home_directory_is_writable._(#4.7.0)/
It's actually pretty clear: qmail refuses to deliver mail to that account
because its home directory is world-writable, because that's a security risk.

Remove the world-writable permissions on the user's home directory
《解決方案》

qmail常見問題及解決辦法(更新中[12-23]....)

支持,但是能不能專門開設一欄討論垃圾郵件的過濾問題呢?
《解決方案》

qmail常見問題及解決辦法(更新中[12-23]....)

qmail中的幾個error的產生的原因和解決方法
wd | 14 十二月, 2004 10:18

1  deferral: Unable_to_chdir_to_maildir._(#4.2.1)

  這個是qmail找不到用戶的收信目錄所致。如果你是用vpopmail的虛擬域名來管理的,那看看你的control/locals文件,裡面不能有虛擬域名,只能有實際域名(這個實際域名的意思應該是使用系統用戶作為用戶的域,而不是使用vpopmail的虛擬用戶的域)。因此呢,如果不是用vpopmail,那麼可能是系統用戶的目錄許可權設置不正確。

  如果發生這個錯誤,首先保證你沒有對user/assign做過手動修改,添加域名都是使用vpopmail的vadddomin命令來添加的,沒有修改過~vopmail/domins目錄以及其下面目錄的許可權和屬主,然後修改了locals文件之後重啟應該就沒有問題了。

2  deferral: Uh-oh:_.qmail_has_prog_delivery_but_has_x_bit_set._(#4.7.0)

   這個是因為你的.qmail文件設置了x屬性,把.qmail文件的x去掉就ok了。這個.qmail文件就在你的domins/xxx.com下面,包括比如.qmail-default之類的文件,修改一下許可權,去掉x就ok了。

3  454 oops, unable to write pipe and I can't auth (#4.3.0)

  這個錯誤是在你打了smtp auth的補丁之後,卻發現不能正常auth,輸入了正確的用戶名密碼還是提示不正確。可以通過下面的命令來測試。

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 xxx.com ESMTP
ehlo
250-xxx.com
250-PIPELINING
250-8BITMIME
250-SIZE 104857600
250 AUTH LOGIN PLAIN CRAM-MD5 //顯示這個通常表示你已經打好了補丁,不過這個是可以通過修改qmail-smtp.c文件來定製的。
auth login
334 VXNlcm5hbWU6
awefaq23rasdf
334 UGFzc3dvcmQ6
awefwaef
454 oops, unable to write pipe and I can't auth (#4.3.0)
quit
221 xxx.com
Connection closed by foreign host.

出現了這種問題是因為smtp運行腳本沒有設置正確的用戶所致。將你的smtp的tcpserver命令的運行用戶和組指定一下。

QMAILDUID=`id -u vpopmail`
QMAILDGID=`id -g vpopmail`

/usr/local/bin/tcpserver -v -H -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD"
        -u "$QMAILDUID" -g "$QMAILDGID" 0 smtp /usr/local/bin/rblsmtpd -r relays.ordb.org
        /var/qmail/bin/qmail-smtpd
        /home/vpopmail/bin/vchkpw /bin/true /bin/cmd5checkpw /bin/true 2>;&1

不需要修改~vpopmail/bin/vchkpw的屬性。

4 451 qq write error or disk full (#4.3.0)

通常產生這個可能有2個原因:(1)你的qmail queue所在的磁碟空間不足。(2)qmail-queue的許可權設置不正確或者文件有問題。
《解決方案》

qmail常見問題及解決辦法(更新中[12-23]....)

真的不錯·
《解決方案》

qmail常見問題及解決辦法(更新中[12-23]....)

此帖已轉移!
《解決方案》

qmail常見問題及解決辦法(更新中[12-23]....)

增加兩個:
1。錯誤信息:the smtp server reply:qq crashed (#5.1.1)
  修改stmp啟動腳本,改大smtp的softlimit
  
2.Sorry. Although I'm listed as a best-preference MX or A for that host,it isn't in my control/locals file, so I don't treat it as local. (#5.4.6)
  修改源碼:ipme.c
              ip_scan("0.0.0.0",&ix.ip);--92行左右加進
  if (!ipalloc_append(&ipme,&ix)) { close(moreipme_fd); return 0; }

Good Luck To You!
《解決方案》

qmail常見問題及解決辦法(更新中[12-23]....)

建議將
不能給sina發信
進入qmail/control創建helohost
echo serverip >; helohost
修改為給新浪打電話
《解決方案》

qmail常見問題及解決辦法(更新中[12-23]....)

原帖由 "1261" 發表:
建議將
不能給sina發信
進入qmail/control創建helohost
echo serverip >; helohost
修改為給新浪打電話

why?but I think sina.com is shit!!!!!
《解決方案》

qmail常見問題及解決辦法(更新中[12-23]....)

原帖由 "myblessu"]支持,但是能不能專門開設一欄討論垃圾郵件的過濾問題呢?


提的好!垃圾郵件讓我很頭疼... :x
《解決方案》

qmail常見問題及解決辦法(更新中[12-23]....)

關於樓主文中有段:
6.裝完qmail后,用本地的信箱或外面的信箱發信過來都顯示錯誤:
delivery 12: failure: Sorry,_no_mailbox_here_by_that_name._(#5.1.1)/沒有創建用戶的Maildir目錄.請記住,創建maildir目錄的組和用戶許可權必須正確

關於此問題,我正遇到,可是無論我改許可權,還是把域刪除重新添加后,都出現同樣的錯誤,我伺服器上有二個域,如:a.com和b.com,
其中a.com都能正常運行,但b.com卻無法接收郵件,但能發送!
我試了很多辦法都無效,像rcpthosts、locals等均正確!
所以特此提問!




[火星人 ] qmail常見問題及解決辦法(更新中[12-23]....)已經有491次圍觀

http://coctec.com/docs/service/show-post-25759.html