歡迎您光臨本站 註冊首頁

qmail相關FAQ

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

qmail相關FAQ

本帖收集論壇內的Qmail相關的FAQ。
抄襲無雙的話,「在論壇的回答中有許多好的回答,但是如果每一個都要寫到精華的話
那麼精華又未免太多了」;同時也為了避免各位重複討論相同的小問題,我就整理了這篇文檔。

另外,涉及的方面太多,我不可能一一嘗試,如有謬誤,請不吝賜教。

建議大家把自己認為好的回答寫到這個帖子的回復中,並寫上討論的帖子連接

準備分幾個部分。


第一部分:MTA

第二部分:igenus

第三部分: sqwebmail

第四部分: vpopmail + qmailadmin

各位還可以補充。

我們會定期將各位提供的FAQ和論壇上的好東西整理進去,並為各位作者署名。


第一部分:MTA

1: 怎麼加快 qmail 投遞郵件速度?

A: /var/qmail/control下面是qmail的控制文件,這兩個文件:
  Concurrentcylocal default: 10 最大本地同時傳送數
  Concurrencyremote default: 20 最大遠程同時傳送數

2: Qmail的主要配置文件有哪些?
A: http://chinaunix.net/forum/viewtopic.php?t=1126

3: qmail+LDAP安裝配置方法? (netloafer)
A: http://chinaunix.net/forum/viewtopic.php?t=1119

4:Qmail如何限制附件的大小呢??
A:
在/var/qmail/control/databytes 文件中設置附件的大小,可以實現對qmail附件大小的限制,一般安裝完成後,這個文件是沒有的,你可以自己創建。
smtp方式是以qmail的databytes作限制的

5: 用qmail怎麼封mailfrom? (peng)
A:使用qmail控制文件封整個域或郵件地址
vi/var/qmail/control/badmailfrom
這個控制文件實現拒收郵件功能的,每一個地址要單獨一行。而且,不用重起qmail就能生效。
例如:
peng@96633.net-----限制一個特定的用戶
@sina.com----限制整個域中的郵件

B:使用tcprules規則文件封IP地址(gadfly)。

#網段
10.10.10.:deny
#ip
10.10.10.1:deny

重新生成cdb文件就好了


6. 如何讓隊列中的郵件馬上傳遞? (peng)

A:
# kill -HUP qmail-send

要刪除隊列中的郵件

1) 停止QMAIL
2) mv /var/qmail/queue/lock /var/qmail/;find /var/qmail/queue/ -type f -exec rm {} \; ;mv /var/qmail/lock /var/qmail/queue/
3) 重啟QMAIL.
隊列中的郵件包含在以下目錄中 /var/qmail/queue/{info,mess,remote,local}/hash/#number

7、在郵件隊列中快速刪除從一個地方發過來但又不存在的郵件? (peng)
A:
設bad.jite.com是這個域。可以鍵入以下命令

# echo # >; ~alias/.qmail-baddomain-default
# echo bad.jite.com:alias-baddomain>;>; /var/qmail/control/virtualdomains
# echo bad.jite.com:127.0.0.1 >;>; /var/qmail/control/smtproutes
然後運行/var/qmail/bin/qmail-tcpok,給qmail-send 一個HUP信號

8、如何刪除隊列中的大量廣告信息? (peng)
A:
先停止QMAIL.
1) 停止qmail, qmail-smtpd
2) 在以下默認目錄下 /var/qmail/queue/mess
find . -type f -exec grep "^Subject:" {} \; -print -exec rm {} \;
3) 運行queue-fix清除相關文件,
4) 重啟qmail.

9、rh9下編譯qmail出錯:
./load auto-str substdio.a error.a str.a
substdio.a(substdo.o)(.text+0x43): In function `allwrite':
: undefined reference to `errno'
collect2: ld returned 1 exit status
make: *** Error 1
什麼問題?(microcao &linuxsky)

A: errno 這個錯誤是因為 RH9 系統使用了新的 GLIBC 庫 2.3.1 造成的
需要修改 QMAIL 的代碼才能編譯另外 DJB 的幾乎所有程序都存在這個問題

QMAIL 官方已經提供了推薦的補丁

http://www.qmail.org/top.html#patches

打個這個補丁就行了
http://qmail.mirrors.space.net/moni.csi.hu/pub/glibc-2.3.1/qmail-1.03.errno.patch
至於tcpserver可能也有相同的問題,patch都可以在以下目錄找到
http://qmail.mirrors.space.net/moni.csi.hu/pub/glibc-2.3.1/

10:Apr 7 17:52:15 www qmail: 1049709135.048259 delivery 38: deferral: Uh-oh:_home_directory_is_writable._(#4.7.0)如何解決?
A:需要將用戶的郵件目錄修改為700
由於vpopmail利用的是wildcard方式匹配的,所以homedir必須從domain的目錄開始。假設gadfly@test.com目錄是/home/vpopmail/domains/test.com/gadfly/
這樣修改屬性:
cd /home/vpopmail/domains/;chmod 700 test.com test.com/gadfly test.com/gadfly/Maildir/

11:.qmail file is writable錯誤如何解決?(xmy)
A:用戶目錄下的.qmail文件組和其它用戶屬性不能可寫。
至於vpopmail方式, 域目錄下的.qmail-*必須去掉寫屬性
chmod go-w .qmail-*
或者
chmod 600 .qmail-*
此外還需注意的文件屬性有libmysqlclient.so.10.0.0
chmod 755 /usr/lib/libmysqlclient.so.10.0.0


12: 每發完一封
郵件后都會自動回復一封內容大概就是說發不出去的意思。自動回復的信件內容是這樣的
.....
<log@yourdomain>;:
Sorry, no mailbox here by that name. vpopmail (#5.1.1)

A:你的qmail是用新的iceblood版本安裝的吧。

這個版本的qmail,預設情況下,每封出入的信件都會發到log用戶。

如果想禁止這個動作,需要替換qmail-queue.
將extra.h中的
#define QUEUE_EXTRA "Tlog\0"
#define QUEUE_EXTRALEN 5
改成
#define QUEUE_EXTRA ""
#define QUEUE_EXTRALEN 0

重編譯替換qmail-queue就好了。
具體見life with qmail 的E.3

如果想把進出的郵件都複製一份給一個特定的用戶,反過來修改就行了.


將extra.h中的
#define QUEUE_EXTRA ""
#define QUEUE_EXTRALEN 0

改成
#define QUEUE_EXTRA "Tlog\0"
#define QUEUE_EXTRALEN sizeof(QUEUE_EXTRA)


把log改成你需要copy到的用戶,重新編譯qmail-queue就ok了。


13.客戶端發信,報錯如下:
553sorry,that domain isn't in my list of allowed rcpthosts (5.7.1)
怎麼解決?
A:
smtp server需要auth么?
判斷方法如下:
telnet localhost 25
ehlo gadfly

如果顯示有Auth....,就是需要Auth的。

如果需要,客戶端是否配置auth了。如果沒有,發往外域,就是這個錯。

如果不需要,客戶端的mailfrom是否是/var/qmail/control/rcpthosts中配置的域,如果不是,就是這個錯.


14.發信有問題?如何檢查SMTP服務是否有問題?是否啟動了?
A:最好的辦法就是直接連接smtp服務,如下:
telnet your_server_ip 25
用smtp命令去測試,具體的命令使用,參見
http://www.chinaunix.net/forum/viewtopic.php?t=77544

15.每次客戶端發信時,qmail總要試圖連接客戶端113埠,從而導致發現過程緩慢 在網上查到說,關掉Auther Idnet可以解決,但應該怎樣做呢?
A: tcpserver的命令行加上 -H -R就好了

16.配一台qmail伺服器,不管to的地址是什麼,都轉發到另一台SMTP伺服器這個時候Qmail該如何設置呢??
A:可以利用smtproutes
rainbow.linuxfane.com:mail8.rainbow.jp
:fw.rainbow.linuxfane.com:8088
第一行的存在會將發給rainbow.linuxfane.com的郵件重定向到mail8.rainbow.jp主機
第二行的存在會將任何不符合之前行條件的郵件重定向到fw.rainbow.linuxfane.com的8088埠,讓
郵件安全的穿越防火牆
另外,注意,如果不想收任何域的信件,virtualdomains也必須置空。

17.smtp 使用auth patch后,出現以下一些問題:
    a.加認證報out of memory, 不加就過了。
    b. 如果帶域名,正常;不帶,報auth failure
      c.隨便輸入什麼用戶名密碼都能過。
怎麼解決?
A:參看http://www.chinaunix.net/forum/viewtopic.php?t=68469
如果還是不行,建議換另外一個試試

18. qmail中如何清空隊列(queue)中的所有消息?
A:find /var/qmail/queue/ -type f -a -name * -exec rm {} \;

19. solaris下編譯ezmlm的時候,錯誤提示是/usr/include/time.h
出現getdate錯誤,請問因該如何解決?(agang)
A: 這是ezmlm的一個bug,只在solaris下編譯才出現:

把第885和第1869行的修改:

885 void getdate(struct msginfo *infop,int flagfail)
1869 getdate(infop,0);
為:
885 void ezmlmgetdate(struct msginfo *infop,int flagfail)
1869 ezmlmgetdate(infop,0);

就可以編譯通過了。

20.在REDHAT9.0下安裝qmail,POP3或smtp非常慢,為什麼?
A: pop或smtp的腳本中,tcpserver命令行中加上-H -R -l 0參數,防止客戶端域名反查,用戶indent反查和本地域反查。

21.這段日誌是什麼意思?第一列比如 「@400000003f53417b37a114cc 」代表什麼意思啊?
我能直接轉換成具體的時間嗎?比如某年某月某日某分某秒嗎??
或者是像 messages 那樣表示時間?

@400000003f304780381352e4 tcpserver: status: 0/40
@400000003f3631091d390694 tcpserver: status: 0/40

A:
這是tai64格式的時間。 具體的描述見http://cr.yp.to/daemontools/tai64n.html

你可以用

tai64nlocal <log

來顯示可讀的時間

22.sina的mail問題,給新浪發信出現一下錯誤,如何解決?(artxing)

553 Domain information in your 'HELO' dialog is not in the stadand format reque
sted by RFC 821 and RFC 1035, please send your correct domain information accord
ingly. 您的IP為國內IP,且與您的MTA伺服器IP信息不符!Please contact our mail serv
ice engineers on antispam@staff.sina.com.cn. if you have other problems, or anyt
hing disallowed by our system.. --------------------------------------------您會
話中的helo沒有按照RFC 821 RFC 1035的標準,發送您正確的domain信息。Your IP addres
s belonging to domestic domain, and your IP informaiton dismatch with the inform
ation provided by the MTA server 如果存在其他問題或者不符合我們屏蔽要求,請發信
到antispam@staff.sina.com.cn
A:
echo "我的郵件伺服器的真實域名(A記錄)" >; /var/qmail/control/helohost

23.qmail下smtp不能發信,telnet也不成?
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
(wjger)
A:
檢查vchkpw, tcp.smtp.cdb文件的屬性是否正確。
主要是在編譯過程中,不知為何tcp.smtp.cdb 丟失。另外還有一個體會是 mysql 中的grantq許可權設置中的域名(vpopmail@localhost)應該和vmysql.h中的mysql伺服器名是一致的。否則會造成vadddomain 拒絕連接失敗的現象!!

第三部分: sqwebmail
1. 升級sqwebmail的注意事項? (redfox)

A: 升級好后最好把qmail停止,把authdaemond重啟動
/usr/local/qmail/webmail/libexec/authlib/authdaemond stop
/usr/local/qmail/webmail/libexec/authlib/authdaemond start  
然後再啟動qmail,不然會出現一些莫名其妙的問題

2.sqwebmail如何限制附件大小啊?(lovecelery)
A: 我想把附件大小設成4M,但是默認是2M,方法如下:
在configure的時候指定
--with-maxformargsize=4194304 --with-maxmsgsize=4194304
就可以了
--with-maxformargsize是允許上傳的附件大小,不包含郵件正文的, --with-maxmsgsize是全部郵件的大小,正文+附件的

3.如果我們有默認域,可以憑用戶名和密碼直接登陸,但是登錄后往往出現
user@localhost.loacldomain,而不是你所想要的user@yourdomain.com,
怎麼解決?(oranger2001)
A: 在/usr/local/share/sqwebmail下面建立一個hostname文件,默認情況下好像無此文件,文件裡面加入 yourdomain

這樣以用戶名進入就可以正常顯示你的後綴啦!!

4.請問我如何設定sqwebmail上頁面的空閑停留時間?
因為我登陸sqwebmail后,如果超過一定時間就會要求我重新登陸,我想把這個時間值改大一些。
A:兩個辦法,
1、sqwebmail編譯的時候,指定
--enable-hardtimeout=7200 Hard session timeout (2hrs default)"
--enable-softtimeout=1200 Inactivity timeout (20 min default)"

後者是沒有活動下的session timeout,
前者是有活動,也強制timeout。

2、也可以給cgi指定環境變數SIGWEBMAIL_TIMEOUTSOFT,SIGWEBMAIL_TIMEOUTHARD來取代configure時預設指定的時間。

但是注意,這種方式一定要和cleancache.pl中的時間一致。



第四部分: vpopmail + qmailadmin

1: 如何通過vpopmail實現qmail郵件賬戶的資料庫管理?(netloafer)
http://chinaunix.net/forum/viewtopic.php?t=1147

2:能不能修改默認的域名?(peng)
A:
要更改haohao.com為默認域。
方法:
更改~qmail/control/
defaultdomain
me
plusdomains
逐一更改啟動pop3和 smtp的啟動腳本:
修改:email.3sk.com為haohaoo.com
在最上邊添加:export VPOPMAIL_DOMAIN=haohaoo.com

只要你的dns server給虛擬域做好了設置。
你的outlook and foxmail里的用戶輸入用戶的全名,就沒問題阿!
不要用:master ,系統默認認為是master@email.3sk.com了
要用master@haohaoo.com ,這樣才可以的。

2.如何做Qmail用戶的備份?也就是如何將一個系統的Qmail用戶完整地轉移到另一個系統?(peng & netloafer)
A:
a.cdb配置的?那麼請把/home/vpopmail/domains這個文件夾備份好就可以了。用戶和密碼文件,還有用戶信件都在這個目錄下。
還應該備份/var/qmail/control下的相關配置文件。

b.如果是以MYSQL資料庫方式來存儲用戶認證信息的
只需要備份
~vpopmail/domain下的所有郵件
/var/qmail/control的配置文件
MYSQL資料庫目錄下的vpopmail庫目錄。一般是/var/lib/mysql(RPM)、/usr/local/mysql/data、/usr/local/mysql/var下面。


3.以下錯誤怎麼解決?
warning: file name is symbolic link header.html warning: file name is symbolic link show_login.html warning: file name is symbolic link footer.htm. (xmy)
A:
出錯原因應該是htmlibdir目錄不能正確讀取,重新編譯qmailadmin:
./configure 的時候帶option--with-htmllibdir=....
注意目錄的屬主uid和gid:vpopmail vchkpw

4.安裝VPOPMAIL以後發現MYSQL里還是沒有VPOPMAIL的DB啊?
A:
vadddomain第一個域,才有vpopmail db     

5. 我用vadddomain時時提示:
#/home/vpopmail/bin/vadddomain xxx.com
Please enter password for postmaster:
enter password again:
Error: Domain already exists
但是mysql里的確沒有vpopmail這個庫,怎麼回事?
A:

原因是如果你先前用vadddomains加過域,後來又手工刪除資料庫,後來vadddomain加相同的域,就加不了,報
"Error: Domain already exists "

這是因為在/var/qmail/control/virtualdomains和/var/qmail/users/assign及cdb包含相應的域,vaddaddomains時會檢查這些文件,有就報這個錯。

所以解決方法如下:
1.刪除/var/qmail/control/virtualdomains和/var/qmail/users/assign相應的域信息

2.運行/var/qmail/bin/qmail-newu重新生成cdb

3.vaddadomains your.domain
就好了

所以為了避免這種麻煩,以後盡量用vdeldomain刪除域,而不是手工的刪除資料庫中的數據,容易造成不一致。     

4.編譯qmailadmin和vpopmail的時候報找不到mysql的頭文件或庫文件。(nicosoft)
A:
1.如果是rpm方式安裝的mysql,方法如下
rpm -qa|grep -i mysql
看看有沒有開發包,如果有,一般再devel中
rpm -ql mysql-devel
2。如果是源碼安裝
--prefix=/usr/local/mysql
的話那麼你的
indir=/usr/local/mysql/include/mysql
libdir=/usr/local/mysql/lib/mysql
如此類推     

5.能不能更改域的默認管理賬號?在qmail+vpopmail中,能不能更改域的默認管理賬號,怎麼更改。默認是postmaster,能不能改成如,webmaster?
A: vmoduser有個-a參數,可以賦予用戶管理許可權。

如果想全面禁用postmaster的特殊許可權話,就只能改源代碼了。   

6.如何成批添加/導入用戶

第一種方法(garfy):

a.在home目錄下建立文件adduser.sh
touch adduser.sh

b.編輯adduser.sh
ee adduser.sh 加入一下內容:

while read line
do
echo $line
/home/vpopmail/bin/vadduser $line $line
done < user

c.建立文件user,並輸入用戶
   touch user
   ee user
   
   11
   22
   33
d.執行adduser.sh
   ./adduser.sh

這樣user文件中輸入的用戶就添加到默認域中了,用戶名和密碼都是一樣的。

第二種方法(gadfly):


#!/bin/sh

#batchadduser.sh: batch add mail user.
#install step.
#chmod u+x batchadduser
#./batchadduser.sh domain datafile

if [ $# -lt 2 ]
then
    echo "usage: $0 domain datafile"
    exit 1
fi

domain=$1
datafile=$2
addcmd=/home/vpopmail/bin/vadduser

while read username passwd
do

$addcmd $username@$domain $passwd

done < $datafile


文件內容的格式
username1 passwd
username2 passwd2
............   
把內容保存到datafile文件中
執行
./batchadduser.sh localhost.com datafile

7、vpopmail make Error ,
# make
make all-recursive
make: Entering directory `/root/download/qmail/vpopmail-5.2.1'
Making all in cdb
make: Entering directory `/root/download/qmail/vpopmail-5.2.1/cdb'
make: Nothing to be done for `all'.
make: Leaving directory `/root/download/qmail/vpopmail-5.2.1/cdb'
make: Entering directory `/root/download/qmail/vpopmail-5.2.1'
gcc -I. -I/usr/local/mysql/include -g -O2 -Wall -c vpopmail.c
vpopmail.c:26:20: string.h: 沒有那個文件或目錄
...
make: *** Error 1
make: Leaving directory `/root/download/qmail/vpopmail-5.2.1'
make: *** Error 1
make: Leaving directory `/root/download/qmail/vpopmail-5.2.1'
make: *** Error 2

A: 把glibc-devel安裝上先。

告訴你們一個好辦法,以後缺什麼文件,這樣找原因。

例如我的機器沒問題,我就可以這樣找到原因,
1.
string.h這類的頭文件,一般都在/usr/include下
find /usr/include -name string.h
/usr/include/string.h

2.
rpm -qf /usr/lib/bcc/include/string.h

pm -qf /usr/include/string.h
這樣你就知道缺什麼了。

找的方法只是針對linux系統的情況,其它os都有相應的找軟體包的辦法。
但是錯誤的原因的是一樣的,就是缺軟體包。

有的時候make報ld .... -lz之類的錯誤,也是這個原因。

可以用類似的辦法找錯誤

8.把一郵件域的名字比如a.com更改為b.com,如何實現?(beck2000)
A:以下幾個步驟:
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相關FAQ

支持,學習
《解決方案》

qmail相關FAQ

:lol: 如我所需
《解決方案》

qmail相關FAQ

支持!
《解決方案》

qmail相關FAQ

RE
《解決方案》

qmail相關FAQ

很好啊!!!
老大辛苦了!!!
《解決方案》

qmail相關FAQ

多謝.
《解決方案》

qmail相關FAQ

謝謝,太需要了,這需要毅力的,佩服
《解決方案》

qmail相關FAQ

7、在郵件隊列中快速刪除從一個地方發過來但又不存在的郵件? (peng)


能解釋一下這個嗎???
《解決方案》

qmail相關FAQ

我理解一下,不對的話,各位補充和糾正
就以這個例子來說明,
意思是說大量的mail from都是bad.jite.com,它發往本機服務域,但是很多用戶並不存在,會導致大量的退信,增加系統負擔,這種情況下,就可以用這種方式消除大量的退信。

[火星人 ] qmail相關FAQ已經有673次圍觀

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