Board logo

标题: [应用&技术] 分享Qmail常见问题解决办法 [GDLC原创] [打印本页]

作者: jfx    时间: 2015-11-9 22:56     标题: 分享Qmail常见问题解决办法 [GDLC原创]

1.不能给sina发信 0 O$ H- W7 P8 Q- E/ M
进入qmail/control创建helohost
3 Z. a+ R8 ~0 A$ F& necho serverip > helohost

建议将
' a, ?2 g$ K2 Z# h
不能给sina发信 . v( r' x8 }( r6 x6 D6 X7 S
进入qmail/control创建helohost
0 b% t  I# ^1 {/ `$ @1 e$ M2 \
echo serverip > helohost
& f( P* h) l* }% W9 e* ?) Y+ j
修改为给新浪打电话
. m3 p' a7 {7 G! K
6 F4 }( r# V1 c' x/ T* ~9 B2. |/usr/local/bin/autorespond 10000 5 ! i; |- k( h9 D1 y, Z" ]
|
表示调用一个程序来处理该邮件这里是调用autorespond来处理;10000表示允许处理信 & I5 G4 H, [# R4 r. O
件的总时间;5表示在这段时间内的最大邮件
, n" O4 Y: s; I* O$ v3.
限制你的邮件列表被滥用 7 k& B! w4 g3 l' p
你需要在邮件列表文件头加入一个过滤程序。一种选择是使用qmail的补丁程序 qlist ,你可以在官方站点qmail.org找到它。它会使用pgp 来标记你的邮件信息,一个包含pgp标识的过滤的邮件列表大致如下: 7 y1 r* b- P9 |5 z5 u5 n- d
|if grep "^-----BEGIN PGP MESSAGE-----$"; then exit 0; else exit 100; fi
! _! z( G0 g$ T|if grep "^-----END PGP MESSAGE-----$"; then exit 0; else exit 100; fi
  f& D; @/ M/ {. v3 S+ F9 z|if pgp -f; then exit 0; else exit 100; fi " ]: b: x! S3 n
+list
0 i0 q1 K3 B5 g/ z- T4 h&address ' n. f2 N1 O, `6 }
&address
2 p7 ^6 l! o2 W4 L9 J...
8 R) R2 J9 L1 R9 T: a
只有邮件列表允许的用户(假定是别名)才拥有pgp的密钥。或者为需要的用户指定一个密钥文件。另外一种过滤器通过检查邮件,判断是否来自本地用户或者来自最近的qmail-smtpd进程。如果是本地用户就允许通过,远程站点的就退回该信件。它的形式如下: |if grep Received: | tail +1l | grep network; then echo
% k' k2 x9 v2 e"This is a moderated list"; exit 100; fi / h8 H5 T  [/ A
+list
. P5 P* A2 x2 M1 b( ^/ A3 b' F&address 6 J3 I, y- C! K; d- Y$ i
&address
8 x) i" S2 \0 |* y- z: I... 8 s, q( E2 n- K

9 ]. P2 N- N8 E( p# a
如果不是本地系统的用户,你可以分配一个别名(记得chmod 700 ~alias),使它能投递到邮件列表。运行:
1 G5 Z! G6 p5 m4 j6 Q5 c6 @2 l7 u* v  o0 T
|grep -v '^Delivered-To:' | forward LISTNAME / @2 Q; y8 W: C- |" k% J

6 B5 G$ V) n2 G7 M
必须删除 Delivered-To: 这行,否则将它放弃这个别名
7 F- ?$ z" z( |4 v4 B+ q1 }4.
如果你不想让一份无法投递的邮件在队列里呆太久 6 i  x* V3 R) k7 {
你可以在 queue/info 目录里运行   _9 ]) J  j/ S8 W2 X/ B
touch -d '1 week ago' 6 I6 U/ |, Q3 x, H8 ~4 a8 o
来结束它的队列生命周期。这样,如果再次投敌不成功,这份邮件就会被退回
: y4 q  ^8 [* J2 m4 f1 s: G5.
telnet my.domain 25时返回: 6 @$ [) z; c! a2 f' |6 R
Trying xx.xx.xx.14.....
9 A( B5 F7 V  j( @/ u% _Connected to www.xxx.com % x- w0 |" x2 u' z, V: k
Escape character is '^]'.
6 ?3 {5 ]+ S' ~% f" q& U220 www.xxx.com ESMTP
& ]7 G- ?6 h7 e  C* @& ]( a502 unimplemented (#5.5.1) 2 e% L4 M  l; c6 e, q5 D
此现象是密码验证的包checkpasswd没有装好。 6 [' ]8 a2 X6 h8 z# e: r
6.
装完qmail后,用本地的信箱或外面的信箱发信过来都显示错误: $ |6 h6 W" c% `9 m- x- e' C
delivery 12: failure: Sorry,_no_mailbox_here_by_that_name._(#5.1.1)/
没有创建用户的Maildir目录.请记住,创建maildir目录的组和用户权限必须正确 8 R6 |. b, V/ V8 m/ z; [
7. maillog
里面出现:
3 z0 k+ b+ {. Y5 f"Unable_to_open_./Maildir:_is_a_directory._(#4.2.1)/"
在修改rc里的./Mailbox 改成 ./Maildir/时出错 7 e2 R/ m! [- Z* X1 V3 Q
8. maillog
里面出现: 2 k+ _8 o9 i' H$ d
oh:_.qmail_has_file_delivery_but_has_x_bit_set._(#4.7.0)/
4 x8 t. V# [; V$ ^
.qmail
文件多了个x标志位, 运行chmod a-x .qmail / ^% k$ _; V5 A! H; Y  b9 F
, m4 C$ x1 s# I" M3 B  d
9.maillog
里面出现: & q- Z' c+ }, _- \, _" P! \7 l
"Unable_to_open_./Maildir:_is_a_directory._(#4.2.1)/"
用户的.qmail所在地方不对,此文件必须存在于用户的HOME里面
" X$ B. w& I; y* q$ V10
tcpserver執行qmail-smtpd 时默认的为40个进程, 要想修改更多的话,例:200tcpserver -c 200
0 F* K) ~" y+ R; @- c4 ktcpserver -v -u uid -g gid 0 smtp /var/qmail/bin/qmail-smtpd \ - h* Z3 i# g" C: X( X' p
2>&1 | /var/qmail/bin/splogger smtpd 3 &
6 k& d4 z5 v3 a&
不要省略,
" x' ~! x, Y+ J- j$ v11
.如何清除90天前的邮件find /home/vpopmail/domains/ -ctime +90 -type f -path '*Maildir/cur*' | xargs -i --verbose rm '{}' 2>&1
' x7 h9 I! I2 {& x12. Qmail
拒收某个IP或网段的邮件
* B! B, c: D7 M7 Z) S
编辑你的tcp.smtp文件,加入: 7 t- x8 a1 C4 |1 Q1 G5 p2 X& @
对方的IP:deny
  F+ C1 G2 u; E7 B1 v& Z( }
或者: 7 }0 g6 M# |' ~3 p
某个网段.:deny
4 M/ g- q0 C' ^* i8 ?: }: G, z
例:2.82.34.:deny
& v# n7 @" |2 D9 H6 m+ G4 M, K
来禁止2.82.34的整个网段的访问。 - z. f$ z' S; Z. t4 `" k# S1 P# u
然后使用tcprules重新生成tcp.smtp.cdb文件。 ) h1 A3 v: P3 A, L( _$ |4 P
13.qmail
自动删除发给系统上不存在的邮件帐号的信,而且不产生系统退信echo'|/var/vpopmail/bin/vdelivermail' 'delete'> /var/vpopmail/domains/yourdomain.com/.qmail-default
2 E5 a- `1 r, N
这会把发给不存在的用户的信直接删除掉. 4 U, J. B8 g6 W& K. e5 i2 D& _
14.
清除qmail的邮件队列
1 d6 `9 @- o, ~1 X
安装qmail-remove 9 ]( e1 Q# A  B! @7 [3 h% x
qmail-remove -r
. I3 O1 @; `9 o5 d4 r3 B
这步会把所有队列内容移动到/var/qmail/queue/yanked目录下。 / O0 A+ c. ^% g& m& i5 V: m! F
接下来可以决定如何处理该目录的内容了,垃圾邮件
6 r, P- W: F) g4 A7 `( Q15. Q:
有没有简单的方法可以阻止某些用户发邮件到外部地址 (或内部服务器)? & c' X! \6 C" q2 Y
A:
可以.注意NO_RELAY标志,它可以对任何用户起作用: * X# @' |- g; @/ k) m3 h3 `
vmoduser -r email@domain ( U. h2 B9 y7 w# x) V
Q:
有没有方法可以拒绝整个域的POP连接,而不单是某个邮件地址?A: 当然.vmodeuser可以帮你解决问题:
5 a+ I& T# Y. ^/ H, P* z+ V* }& O' l0 Q1 c& M) l2 k( s
vmoduser -p domain.com ) F3 _( K6 G: b0 ^6 |% p
16.
把一邮件域的名字比如a.com更改为b.com,如何实现
6 L) b, r# s- Z' Y
以下几个步骤: - }6 z+ }% k& o- S) X
1
cd /home/vpopmail/domains * j7 {3 J( K3 k4 \
mv a.com b.com
! A' C. H& M1 f5 q- ^2
、把vpopmail数据库的vpopmail表导出把所有a.com改为b.com,然后删除vpopmail表,再导入. 8 O. q# v" C$ O6 Q* O+ V
3
、把把vpopmail数据库的dir_control表的a.com改为b.com
5 H0 |- ?. o3 B" r, j6 P4
、在/home/qmail/control 目录下把 virtualdomainsrcpthosts下的的a.com改为b.com.
. l8 @7 a- U* X0 T! S8 [5
、在/home/qmail/users目录下把assign文件的a.com改为b.com 4 C8 [, L$ W* d7 x7 {5 \8 j
6
、需要运行qmail-newu重新生成cdbassign只是配置文件,cdb才是实际的数据文件。
$ ~2 ]9 b* N% T2 [: Z: v
加快 qmail 投递邮件速度 0 w$ H! q) h# A" R" e& `
17. spamd
调用maildrop方法 & O2 d  G1 @9 a1 C" o+ i
youreal.com下修改.qmail-default
0 [' |& R/ P3 R  b  F. v2 F- ^  A! a" d
:
5 G3 P/ h, X$ g; v* K3 m  B% T7 j| /usr/local/bin/maildrop ./.mailfilter
2 T! m9 g% O- O2 f2 `7 m1 s
创建.mailfilter 8 V: y4 s8 [7 L
内容如下: , K2 l! `% \1 S6 t7 @
VHOME=`/var/qmail/vpopmail/bin/vuserinfo -d $EXT@youreal.com` 2 m1 Q1 w$ s2 G! [/ w4 z

" ^  r; j. ~# T, e; k- pif ( $SIZE < 262144 ) 6 B8 X+ ]6 a; D- R5 @
{ 8 n7 @/ g: l$ G- k4 E" e, E6 C8 Y, Z' O4 |
exception { 2 M( |, S; Y% a) v9 ~; c
xfilter "/usr/bin/spamc -f -u $EXT@youreal.com"
! u3 ?6 M2 V+ F0 f7 G& g* C0 g} : D+ Z+ y8 h; p8 ]3 z3 \4 W. {6 G
}
" ?" c6 o2 c% ^) g, M
$ _" T3 J& U0 i  T9 _& S; Vif (/^X-Spam-Flag: *YES/)
* }2 f# f: V3 I/ J1 U: z# n" |0 M. c( b: [{ * M* B) {; X  ~( v
0 q' s5 V' B1 v5 D5 p9 k) u

* b  q- p- j7 Z' g( ~6 k. H
0 i, j6 {6 j; ]+ Ito "$VHOME/Maildir/.Trash/" ##
使符合垃圾邮件特征的邮件放到垃圾箱里
7 f/ }9 s% C' z9 ?4 O1 W; ~8 V& S1 R6 k) W
} * |9 n' `/ O& Q
else 2 B: ?4 ]) c' n, G
{
& g) _) g/ V; T5 vexception {
; V- ~# B/ a/ v1 S2 V, jto "$VHOME/Maildir/."
7 x; u  W9 B/ I( o}
# s7 O1 q6 \7 Y& n4 y0 q$ i0 ]) j
修改.mailfilter的属性
; s& O: e7 @2 N. n+ H4 ^4 k" @chown vpopmail:vchkpw .mailfilter 3 t5 I) W9 f5 _) y  d
chmod 600 .mailfilter . U" W- @% A( a) V1 f+ u

+ G6 R* g5 i5 hqmail
控制文件的作用
3 `0 h0 o3 F" Q& ~+ gqmail-inject

; p8 G2 Y0 ~2 V* `; hqmail-inject
接受本地邮件消息后检测邮件头是否符合RFC822标准,并传送给qmail-queue排进队列 , E6 d- |1 j2 _2 A, v8 ?
defaultdomain
用来向那些没有使用正确的username@hostname.domain格式的邮件中增加邮件地址的,默认情况下,如果主机地址中没有结束符"."qmail-inject将给主机名后添加defaultdomain的内容,如果该文件不存在,将使用me文件中的值代替.例如: defaultdomain值为yourdomain.com本地产生了一封发送给xxxx@xxxx的邮件,那么qmail-inject将用 yourdomain.com来补全这个后缀,变成xxxx@xxxx.yourdomain.com 8 c4 x- s' K: k( O
defaulthost
用来定义主机名,用来向地址中不含主机名的邮件补足邮件地址的。类似于defaultdomain。例如:defaulthost值为yourdomain.com那么发送给 xxxx的消息,将被qmail-injectdefaulthost的值来补足为xxxx@yourdomain.com,以便于qmail- send快速分辨是否属于本地地址。
- @8 H& j3 E6 }: T; b& I( N" Widhost
用来指定邮件中Message-ID:头字段的主机名例如:idhost值为yourdomain.com那么邮件头中如下: 8 [; B: W1 I" p. b5 ~! i$ K
Message-ID:<1234567890.12345.qmail@yourdomain.com>
5 s2 i3 K- O% M8 u* p, {: a. \8 W
如果idhost值为xxxx.yourdomain.com 那么邮件头中如下: $ Z1 X! @8 l1 j( n' l1 Z
Message-ID:<1234567890.12345.qmail@xxxx.yourdomain.com>
, G! c$ O+ X6 s$ {# Hplusdomain   u% z- J2 ]* ]1 K4 ]2 c' C2 `: o
用来将其值添加在任何一个以一个+号结尾的地址 8 p- b7 u, R/ P
qmail-qmqpc qmail-qmqpc
是快速邮件排队协议(QMQP)使用的程序,QMQP是一个QMAIL专用协议,用在工作站级QMAIL服务器向中心服务器发送队列。
% _$ {$ j; x- u. `# R1 Z/ U+ |qmqpservers
用来指定qmail-qmqpc使用的上级服务器 * U0 O8 y3 w2 _. w) P6 A
通常该功能应用很少,我认为qmail-qmqpc用法就是代替qmail-queue来直接传给上级服务器。 3 B' o$ l. A% E1 G! k
qmail-remote ' B- @3 {, d# Z5 {+ K! J
qmail-remote
通过SMTP协议向远程主机传送邮件。
$ [3 J  s8 Y0 C- b* P/ ghelohost
该文件用来指定qmail-remote程序与远程邮件主机SMTP会话中的主机名。 : h- r1 v5 p' z
smtproutes
用来指定到固定目的的静态SMTP路线。 + y7 ?: W4 D# V9 [* ?
例子:smtproutes内容如下 5 @) b4 m* V: P( o. t
xxxx.yourdomain.com:mail8.xxxx.jp & V: U# o. W9 g9 z8 r  W3 r
:fw.xxxx.yourdomain.com:8088
7 d" G: e: |$ ~2 v& ^9 M
第一行的存在会将发给xxxx.yourdomain.com的邮件重定向到mail8.xxxx.jp主机
2 g8 s; K1 m2 v4 e. x" P1 Q
第二行的存在会将任何不符合之前行条件的邮件重定向到fw.xxxx.yourdomain.com8088端口,让邮件安全的穿越防火墙 ! N) a& E8 J! x" S1 A
qmmail-remote
将按照smtproutes中的行序来进行处理
7 @* s& y9 y: s9 Ptimeoutconnect
用来指定qmail-remote尝试同一个远程邮件主机建立一个SMTP会话的时间。默认值状态下如果超出60秒没有得到远程邮件主机的回应,那么将断开连接。 : \# C9 X0 u! @% I
timeoutremote
用来指定qmail-remote在一个SMTP连接已经建立后,远程邮件主机的每一个回应的时间数。默认值为1200秒。 % W0 A/ x6 ]; t: f* A4 L
$ [. C  J& O5 W( ~3 I
qmail-send
6 l% C2 K5 t9 q9 d( V- B) e
qmail-send
用来检测队列中每一个邮件的状态,并调用相应的程序进行处理。例如一个目的为本地的邮件将会被qmail-send调用qmail-lspawn处理。
4 o0 d! R2 G9 k) Y# r$ Hbouncefrom | bouncehost
默认情况下,退回给原始发送方的邮件的发件人地址为MAILER-DAEMON@HOSTNAME,如果你想修改MAILER-DAEMON这段,那么就修改bouncefrom文件吧。如果想修改MAILER-DAEMON@HOSTNAMEHOSTNAME这段,那么就修改bouncehost文件。例如:bouncefrom内容为SERVER-MANAGER | bouncehost文件内容为mail8.xxxx.jp那么一封因为邮件地址不存在而被退回的通知邮件的发件人将是 SERVER-MANAGER@mail8.xxxx.jp , Y% e. G1 _% |3 t1 S3 L
concurrencylocal
用来决定qmail可以同时运行的本地投递进程的数目,默认值是10,标准安装的qmail最大可设值是120。安装的时候可以通过修改conf-spawn来将其变为255以下任何数目。
  q% [7 |- {2 Y1 y, S, o9 f# F# l" lconcurrencyremote
用来决定qmail可以同时运行的远程投递进程的数目,默认值是20,就是说,qmail可以在同一时间内同时发送20封邮件,标准安装的qmail最大可设值是120。安装的时候可以通过修改conf-spawn来将其变为255以下任何数目。
' F9 B# Z) f3 ^doublebouncehost | doublebounceto
这两个控制文件类似于bouncefrombouncehost的关系,也是doublebouncehost指定主机名,doublebounceto指定用户名。
: [) I8 {) b7 h! {, M( ~. Y- g7 j
他们的功能是为一个被退回两次的邮件制定一条出路。例如:doublebouncehost内容为xxxx.yourdomain.com | doublebounceto内容为xxxx那么一个被退回2次的邮件将被发送给xxxx@xxxx.yourdomain.com ' d8 U/ o* a; z
没有这两个文件的时候,那么发送给postmaster@me文件中的域名 9 k$ x1 z0 Y9 \# V3 t
envnoathost
' S: N/ M) j! Iqmail-send
用来给没有主机名的邮件收件人制定一个主机名的,通常这个文件并没有必要,qmail-send总是使用me文件中的域名。
1 \5 ^3 d' k5 M7 o. elocals 6 Y$ ^# D$ v. ~: R+ |  |0 j
用来为qmail指明位于本地的邮件地址。qmail-send利用此文件来判断收件人地址是否是一个本地地址。
2 v; q$ l& [% O: x* r' i8 H
例如:locals文件中写有xxxx.yourdomain.com " z8 e1 ^# Y- d) i7 D- K
那么qmail-send检测到队列中有发送给@xxxx.yourdomain.com的邮件的时候,就会调用qmail-lspawn来进行本地投送。
# N: `' T% S, w# hme
如果没有me文件,那么你的qmail将拒绝执行。me文件用来指定本地邮件服务器的主机名。以上列出的许多控制文件在没有被创建的时候,qmail都会用me中的值来代替。
$ b# }* r$ O6 O9 lpercenthack
UUCP协议中带有%并在该文件中列出的地址将会被转换为一个标准的DNS格式主机名。 + f9 z  H: L/ T
queuelifetime
用来指定一个邮件在队列中的最大存活时间,默认是604800秒,当一个邮件达到这个时间线后,qmail将最后一次尝试发送这封邮件,如果依然失败,会将其从队列中删除。 + z# D  o8 _7 ^& C3 a, r
virtualdomains & [" E8 d' }% Z4 C, {6 E
qmail接受本地邮件以外,还接受该文件中指定的域或者邮件地址,就是常说的虚拟域支持。 , A0 }. W/ N$ c7 P% W
qmail-smtpd 5 a, {" i1 K" I% f+ ^* o9 ?" I) d
qmail-smtpd
接受远程主机的邮件并转交给队列处理程序qmail-queue来处理。 & Q: M. x7 R/ L. h
badmailfrom
用来指定不喜欢的发件人的邮件地址或者是域名 8 ]( V& a% l! q  _- Q! r& k2 Z, L
例如:badmailfrom中写有
! Y, T3 F( F! z' L! x9 `advt@msn.com
& l4 p; Y7 n- }6 x; w7 a@hotmail.com % J& h# t. b+ _; b; ?( ^# b
如果advt@msn.com给该邮件主机送信时,将得到code 553,告知其是一个不受欢迎的发件人。而所有来自hotmail.com的发件人也将得到同样的code 553. q4 r& F% z2 p- l
databytes
用来指定该邮件服务器可以接受邮件的最大字节数。 # U0 O$ C4 d0 \- E
例如:databytes指定为8000000 % R6 X. t0 u  j
那么如果有人给该主机发送的邮件字节数超过了这个商业上默认的最大容忍限度,将得到code 552,告知其邮件大小超出了该邮件主机所能容忍的限度。恐怖的是,默认状态下,这个文件并没有,如果有人用你服务器上的两个不存在的地址作为 FROM/TO发一个100M的邮件
. c) i- _) C4 e  Y: {5 V* G; Tlocaliphost
. q, B5 D3 O6 Q& r+ [
用来为使用ip来标示目的主机的邮件消息指定本地主机名的例如:xxxx.yourdomain.comip地址为198.17.1.2 | localiphost内容为xxxx.yourdomain.com那么一封发送给xxxx@[198.17.1.2]的邮件的地址会被转换为 xxxx@xxxx.yourdomain.com ! I+ S4 @; d3 }5 c3 W
rcpthosts | morercpthosts " b. h) O1 M+ I4 ^: M9 w
这两个文件用来指定qmail可以接收的除本地主机名外的其他域名他们的作用是相同的,不过因为rcpthosts中的域名不能超过50行,所以才出现了morercpthosts文件 % ]" e0 h* |8 [- Z( y. }9 q) S
timeoutsmtpd
用来指定qmail-smtpd等待远程SMTP主机发送数据的时间线。默认的情况下,如果连接建立后1200秒内没有接受到远程SMTP主机的任何信息,那么将关闭这个连接。 - Q1 ?7 g* {" _" `9 p0 `* c
smtpgreeting
用来指定SMTP连接的欢迎标志 " ^6 R* B0 }7 D+ ^
例如:smtpgreeting值为 welcome connect to out open relay mail server - ad.xxxx.yourdomain.com那么建立一个smtp连接的时候将会看到如下信息:
4 n% k) G# h. u" S8 m( qTrying 198.17.x.x...
# y7 a5 H5 t- J3 a7 e' {7 LConnected to ad.xxxx.yourdomain.com. ! K9 S# ]2 M8 P) o8 B3 s0 q
Escape characteris ^]. , n+ O/ b1 T) R. t$ ^: S
220 welcome connect to out open relay mail server - ad.xxxx.yourdomain.com ESMTP / {1 T! B0 V8 B0 q0 D# K
delivery 1: deferral: Uh-oh:_home_directory_is_writable._(#4.7.0)/ # B4 J# ^! K: g
It's actually pretty clear: qmail refuses to deliver mail to that account
( z5 J; P% I3 j5 r: z3 p0 kbecause its home directory is world-writable, because that's a security risk.
' ?; \* `% W6 }3 {3 G5 ]- \1 z0 w2 N# @5 b# ~  l9 O
Remove the world-writable permissions on the user's home directory

qmail中的几个error的产生的原因和解决方法 * m2 T3 ^" t. {. M% Z6 o+ N1 w6 K
wd | 14
十二月, 2004 10:18
" a6 p! M- N. Z. U$ t; E; b0 y
5 h+ U9 b* p! }/ F3 @1 deferral: Unable_to_chdir_to_maildir._(#4.2.1)
+ i/ Y$ ^2 p3 Y+ N% x% D+ j; Q# L& \3 {
这个是qmail找不到用户的收信目录所致。如果你是用vpopmail的虚拟域名来管理的,那看看你的control/locals文件,里面不能有虚拟域名,只能有实际域名(这个实际域名的意思应该是使用系统用户作为用户的域,而不是使用vpopmail的虚拟用户的域)。因此呢,如果不是用 vpopmail,那么可能是系统用户的目录权限设置不正确。 ; t& e0 j% E+ S. w* v# F
+ P7 J8 J4 p  l2 h9 e
如果发生这个错误,首先保证你没有对user/assign做过手动修改,添加域名都是使用vpopmailvadddomin命令来添加的,没有修改过~vopmail/domins目录以及其下面目录的权限和属主,然后修改了locals文件之后重启应该就没有问题了。
- l' c0 i7 d# m5 Q3 J+ x$ g4 J1 v; b0 K+ ^+ O/ C& l
2 deferral: Uh-oh:_.qmail_has_prog_delivery_but_has_x_bit_set._(#4.7.0) 9 b5 y  C  o$ d# s1 `3 T
& f* ?8 ^! e% f' A& r* O, Q
这个是因为你的.qmail文件设置了x属性,把.qmail文件的x去掉就ok了。这个.qmail文件就在你的domins/xxx.com下面,包括比如.qmail-default之类的文件,修改一下权限,去掉xok了。
- P$ R, _8 ^) f+ Z* b/ h6 I* H: U( @: G7 B/ P$ b- [3 G3 f
3 454 oops, unable to write pipe and I can't auth (#4.3.0) ( h) t7 O' U1 q: \

- R  o3 C1 c* b* Q
这个错误是在你打了smtp auth的补丁之后,却发现不能正常auth,输入了正确的用户名密码还是提示不正确。可以通过下面的命令来测试。
7 N- _0 D6 N8 R
* y* g, i; ~0 e[root@caph qmail-smtpd]# telnet localhost 25 ' @: }( [, l2 z- \1 P
Trying 127.0.0.1...
# \' \6 f1 d' K* [  ^/ |0 qConnected to localhost.
$ I( C% ~! j$ jEscape character is '^]'.
0 `, Y* \: l% A+ }  A' `220 xxx.com ESMTP 0 b/ ?  f% G! ]
ehlo * O) E' H9 ]5 M5 D: T" ^5 {
250-xxx.com ' [5 L6 V! u6 e# y
250-PIPELINING
0 V* G% n& C3 n9 c3 {250-8BITMIME
3 s& P0 s- |% N) y# `250-SIZE 104857600 : u  m0 x0 z6 {
250 AUTH LOGIN PLAIN CRAM-MD5 //
显示这个通常表示你已经打好了补丁,不过这个是可以通过修改qmail-smtp.c文件来定制的。
( ~" U* }- R- Zauth login * d, h, s$ ~: j6 K* P5 D0 J9 v
334 VXNlcm5hbWU6 % g6 Z9 h0 W6 y& J/ L3 k
awefaq23rasdf
; q" b6 i% y% P% V' b334 UGFzc3dvcmQ6 ) I  c" P/ b( q3 n+ @/ D' Q" ?
awefwaef
5 A6 N+ D% N' K: B5 `' s454 oops, unable to write pipe and I can't auth (#4.3.0)
* Y- L1 {/ o8 o( q- I4 Lquit
# K0 N$ N2 R! Y7 u221 xxx.com
2 b7 B' X( H4 P2 a2 n- B, |1 t2 fConnection closed by foreign host. . _/ E9 k! z+ ^- _  w6 l1 L
: `3 r& B" v/ K0 @4 j; u0 L2 e& {
出现了这种问题是因为smtp运行脚本没有设置正确的用户所致。将你的smtptcpserver命令的运行用户和组指定一下。 3 [1 ^$ _  R7 g" L

  ^* I# v) B+ I& N% _% V: r/ OQMAILDUID=`id -u vpopmail`
; }. s% I* {+ D/ H0 `% uQMAILDGID=`id -g vpopmail` 9 z9 R8 X, r: c* t( y: z
! y2 ~  o6 B  x  [! B5 L
/usr/local/bin/tcpserver -v -H -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" # ?2 Y4 f% g3 p4 O% r( Q5 h
-u "$QMAILDUID" -g "$QMAILDGID" 0 smtp /usr/local/bin/rblsmtpd -r relays.ordb.org / X% |8 a) j+ T
/var/qmail/bin/qmail-smtpd 4 M/ f+ i' f9 y& i* `% v: [) G+ c
/home/vpopmail/bin/vchkpw /bin/true /bin/cmd5checkpw /bin/true 2>&1 ) x9 {5 }% h2 D4 C  g3 C) d
, n7 d: Q- T1 l% i" \5 v
不需要修改~vpopmail/bin/vchkpw的属性。
: t' ]/ ]7 K3 `1 t/ D9 w: T) j6 i8 F* u. C! Z- K; O* z  k
4 451 qq write error or disk full (#4.3.0)   C" l/ C4 z2 j
7 J& J9 _: N* o& {. V! Y
通常产生这个可能有2个原因:(1)你的qmail queue所在的磁盘空间不足。(2qmail-queue的权限设置不正确或者文件有问题。

参考: http://blog.chinaunix.net/uid-7351136-id-2058434.html






欢迎光临 捷飞网络论坛 (http://bbs.fjbjdd.com/) Powered by Discuz! 7.2