AdvertCN - 广告中国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

Binom
 谷歌+Bing+TT+MSN官方代理 
⚡️按条S5代理⚡️静态⚡️独享⚡️5G⚡️最干净<Wifi住宅+5G移动>IP代理指纹浏览器,就用AdsPower
Mediabuy⚡️玩家开户首选【鲁班跨境通-自助充值转账】FB/GG/TT❤️官方免费开户Affiliate 全媒体流量资源⚡️
Taboola/Outbrain /Bing⚡️一级代理开户投流-7*24h❤️人工在线【官方】❤️搜索套利广告开户独立站⚡️开户投放
DuoPlus专注打造跨境电商云手机E.PN 虚拟卡BINOM TRACKER 60% OFF!比Adplexity还好用的Spy工具
MediaGo+Taboola+Ob开户百度国际MediaGo⚡️让产品狂奔全球百度国际,高点击转化,快速放量百度国际MediaGo,独家原生流量
ADPLEXITY + ADVERTCN7200W全球动态不重复住宅IP代理虚拟信用卡+独立站收款全球虚拟卡, 支持U充值
Facebook 批量上广告尤里改 - FB 稳定投放免费黑五教程(持续更新、欢迎交流)FB 三不限源头 - 自助下户充值转款
各种主页、账单户、BM户(优势)⚡️个人户,bm户不限额,账单户一手BM分享户不限额9Proxy ⚡️ $0.04/IP, 无限带宽
FB二三解0.1元一个虚拟卡|PTM星际卡FB专用虚拟卡Google、Bing官方总代  联盟流量开户
FB账号资源/稳定靠谱/运行5年啦FB开户代投/三不限/白名单fb耐用号0.01一个fb账号官方合作商
广告位出租   
查看: 6178|回复: 3

Qmail下载、安装、配置、全程详解二

[复制链接]

26

主题

148

广告币

188

积分

初级会员

Rank: 2

积分
188
发表于 2013-7-24 05:32:14 | 显示全部楼层 |阅读模式
接上回.
用你的编辑器将上面的脚本保存为 /var/qmail/rc, 然后执行下面这些命令:
chmod 755 /var/qmail/rc mkdir /var/log/qmail

现在你需要决定一下, 除了由.qmail 文件指示传送的邮件外, 其他邮件将采用何种默认传输方式, (.qmail 文件是指示文件传送路径的重要文件, 后面还会讨论.)下面的列表大致阐述了几种一般性的选择:
邮箱格式     名称     保存位置     缺省的传输方式     注释
mbox     Mailbox     $HOME     ./Mailbox     最常见的格式, 大多数MUA都可以正确识别
maildir     Maildir     $HOME     ./Maildir/     更可靠, 少数MUA支持的格式
mbox      username     /var/spool/mail     参见 INSTALL.vsm文件     传统的UNIX邮箱

更多信息请参考 INSTALL.mbox, INSTALL.maildir 和 INSTALL.vsm 文件.

选择缺省的邮箱格式, 只要选择上表里面的"缺省传输方式"的值, 填写到/var/qmail/control/defaultdelivery里面就可以了. 例如, 如果选择标准的qmail /Mailbox 传送格式, 这样作就行了:

    echo ./Mailbox >/var/qmail/control/defaultdelivery

注意: defaultdelivery并不是标准的qmail控制文件. 而是上文/var/qmail/rc 文件的要素.
对于qmail-start来说, defaultdelivery 变量只是在没有实际的 .qmail 文件指定传送指令的情况下作为 .qmail
文件的内容出现的. 把这个指令加入到单独的控制文件内, 就不必再在指令内重复引用shell元字符, 避免了出现多行杂乱的命令参数.

系统启动文件
qmailctl 脚本

如果你手动执行/varqmail/rc 脚本, qmail只会部分被运行起来. 可是我们希望希望每次系统启动后, qmail都能自动被启动; 每次系统停止时候qmail自动被关闭.

创建一个如下的 /var/qmail/bin/qmailctl 文件可以完成这个愿望:

#!/bin/sh

# description: the qmail MTA

PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH

QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`

case "$1" in
  start)
    echo "Starting qmail"
    if svok /service/qmail-send ; then
      svc -u /service/qmail-send /service/qmail-send/log
    else
      echo "qmail-send supervise not running"
    fi
    if svok /service/qmail-smtpd ; then
      svc -u /service/qmail-smtpd /service/qmail-smtpd/log
    else
      echo "qmail-smtpd supervise not running"
    fi
    if [ -d /var/lock/subsys ]; then
      touch /var/lock/subsys/qmail
    fi
    ;;
  stop)
    echo "Stopping qmail..."
    echo "  qmail-smtpd"
    svc -d /service/qmail-smtpd /service/qmail-smtpd/log
    echo "  qmail-send"
    svc -d /service/qmail-send /service/qmail-send/log
    if [ -f /var/lock/subsys/qmail ]; then
      rm /var/lock/subsys/qmail
    fi
    ;;
  stat)
    svstat /service/qmail-send
    svstat /service/qmail-send/log
    svstat /service/qmail-smtpd
    svstat /service/qmail-smtpd/log
    qmail-qstat
    ;;
  doqueue|alrm|flush)
    echo "Flushing timeout table and sending ALRM signal to qmail-send."
    /var/qmail/bin/qmail-tcpok
    svc -a /service/qmail-send
    ;;
  queue)
    qmail-qstat
    qmail-qread
    ;;
  reload|hup)
    echo "Sending HUP signal to qmail-send."
    svc -h /service/qmail-send
    ;;
  pause)
    echo "ausing qmail-send"
    svc -p /service/qmail-send
    echo "ausing qmail-smtpd"
    svc -p /service/qmail-smtpd
    ;;
  cont)
    echo "Continuing qmail-send"
    svc -c /service/qmail-send
    echo "Continuing qmail-smtpd"
    svc -c /service/qmail-smtpd
    ;;
  restart)
    echo "Restarting qmail:"
    echo "* Stopping qmail-smtpd."
    svc -d /service/qmail-smtpd /service/qmail-smtpd/log
    echo "* Sending qmail-send SIGTERM and restarting."
    svc -t /service/qmail-send /service/qmail-send/log
    echo "* Restarting qmail-smtpd."
    svc -u /service/qmail-smtpd /service/qmail-smtpd/log
    ;;
  cdb)
    tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
    chmod 644 /etc/tcp.smtp.cdb
    echo "Reloaded /etc/tcp.smtp."
    ;;
  help)
    cat <<HELP
   stop -- stops mail service (smtp connections refused, nothing goes out)
  start -- starts mail service (smtp connection accepted, mail can go out)
  pause -- temporarily stops mail service (connections accepted, nothing leaves)
   cont -- continues paused mail service
   stat -- displays status of mail service
    cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- schedules queued messages for immediate delivery
reload -- sends qmail-send HUP, rereading locals and virtualdomains
  queue -- shows status of queue
   alrm -- same as doqueue
  flush -- same as doqueue
    hup -- same as reload
HELP
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
    exit 1
    ;;
esac

exit 0

这个脚本可以在线下载, 地址是http://www.lifewithqmail.org/qmailctl-script-dt70.  

(建议所有直接使用, 或者拷贝-粘贴web页面指令和文件格式脚本指令的读者, 都要注意脚本编码转换的问题. 本文讲到的qmail 是在Unix/Linux 类型服务器上运行的, 而UNIX 的回行和DOS/Windows的回车在脚本内表示的ACSII码是完全不同的, 如果遇到这个问题, 在之后的脚本执行中, 可能出现非常奇怪的错误信息. 有兴趣的读者可以在搜索引擎上查找深入介绍内容. 细心的读者还会注意到, 英文原文和翻译版本, 在代码前后都加上了<RE></PRE>格式符, 其目的就是为了保证指令代码不会被web页面的格式代码"污染". 译者注)

你可以自己输入这个脚本, 不过我推荐你用浏览器下载上面链接的文件.

将上面这个qmailctl 脚本设置为可执行脚本, 然后链接到你的用户执行程序目录:

chmod 755 /var/qmail/bin/qmailctl
    ln -s /var/qmail/bin/qmailctl /usr/bin







supervise 脚本


为 qmail 的服务创建 supervise 目录
mkdir -p /var/qmail/supervise/qmail-send/log mkdir -p /var/qmail/supervise/qmail-smtpd/log

建立 /var/qmail/supervise/qmail-send/run 文件
#!/bin/sh exec /var/qmail/rc

建立 /var/qmail/supervise/qmail-send/log/run 文件:
#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail

建立 /var/qmail/supervise/qmail-smtpd/run 文件:
#!/bin/sh QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` MAXSMTPD=`cat /var/qmail/control/concurrencyincoming` LOCAL=`head -1 /var/qmail/control/me` if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in echo /var/qmail/supervise/qmail-smtpd/run exit 1 fi if [ ! -f /var/qmail/control/rcpthosts ]; then echo "No /var/qmail/control/rcpthosts!" echo "Refusing to start SMTP listener because it'll create an open relay" exit 1 fi exec /usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \ -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
注意: concurrencyincoming并不是标准的qmail控制文件. 它是上面脚本的一个要素. 并且, 第一个LOCAL 行上面的是"破折号 + 数字1", 下面的tcpserver行上的参数是"破折号 + 小写字母l" .

注意: 根据你的操作系统和硬件平台的不同, 可能需要调整softlimit命令的的内存限制参数. 如果你的系统出现连接25端口失败和无法接收远程系统发送的邮件, 或者看到了类似下面这样的错误消息:

  /usr/local/bin/tcpserver: error while loading shared libraries:
  libc.so.6: failed to map segment from shared object: Cannot
  allocate memory

试一下把这个参数调整到3000000到4000000.

建立concurrencyincoming 控制文件.

    echo 20 > /var/qmail/control/concurrencyincoming
    chmod 644 /var/qmail/control/concurrencyincoming

建立 /var/qmail/supervise/qmail-smtpd/log/run 文件

#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd

将各个run文件设置为可执行文件:

    chmod 755 /var/qmail/supervise/qmail-send/run
    chmod 755 /var/qmail/supervise/qmail-send/log/run
    chmod 755 /var/qmail/supervise/qmail-smtpd/run
    chmod 755 /var/qmail/supervise/qmail-smtpd/log/run

然后建立log文件目录:

    mkdir -p /var/log/qmail/smtpd
    chown qmaill /var/log/qmail /var/log/qmail/smtpd

最后, 建立 supervise 目录到 /service 目录的链接:

    ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service

/service 目录是 daemontools 安装时建立的目录.
注意: 建立这个链接之后 qmail 系统会很快自动被启动起来, 如果你还不想立刻运行qmail, 运行下面这个,命令来停止qmail:

    qmailctl stop

SMTP 访问控制

允许本地主机通过SMTP方式发送邮件:
echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp qmailctl cdb
停止并且禁用(其他)已经安装的MTA

虽然有可能同时运行qmail 和现存的MTA, 比如Sendmail, 不过我建议你除非你知道自己到底在干什么, 否则可不要这么干. 说实话, 如果你正在读我这段话, 你可能也不知道自己在干嘛. :-)

如果现存的MTA是Sendmail, 你应该能利用运行Sendmail的init.d脚本的"stop"参数来停止它的运行. 例如下面命令中的一个可能是有效的:

    /etc/init.d/sendmail stop
    /sbin/init.d/sendmail stop
    /etc/rc.d/init.d/sendmail stop

如果你找不到任何一个init.d/sendmail 下的脚本, 你可以用 "ps -ef|grep sendmail" 或者 "ps waux|grep sendmail" 命令找出 sendmail 的PID, 然后用下面的命令来停止Sendmail: (kill 命令加上Sendmail的PID作参数, 译者注)

    kill PID-of-sendmail

如果你的MTA不是Sendmail, 检查相关文档找出正确的停止MTA的方法.

你应该考虑一下把旧的MTA彻底的从你的系统里面删除. 至少禁用它的 init.d 脚本, 防止下一次系统重启动的时候旧的MTA也被试图重启.

对于使用rpm方式安装Sendmail的 Red Hat Linux, 执行下面的命令来删除Sendmail:

    rpm -e --nodeps sendmail

注意: 如果你使用基于RPM方式的Linux, 比如 Red Hat, 删除MTA可能带来进一步的问题.
系统的某些应用程序将会试图重新安装Sendmail, 一些MUA程序将无法安装.

检查一下没有其他程序在监听SMTP服务端口(25). 旧的MTA, inetd, 或者 xinetd 等程序都有可能造成问题. (按照以上步骤执行后, 再) 运行下面的命令应该是没有输出结果的(除非这个时候 qmail-smtpd 服务也在运行).

    netstat -a | grep smtp

如果有什么程序在运行, 首先确定不是qmail, 那么先运行下面的命令:

    qmailctl stop

然后重复 netstat 检查:

    netstat -a | grep smtp

如果你还是能看到这个命令有一些输出, 你就必须在qmail 的SMTP服务运行起来之前把肇事程序找出来.

最后, 将现存的 /usr/lib/sendmail 替代为 qmail 版本.

    mv /usr/lib/sendmail /usr/lib/sendmail.old                  # 忽略错误提示  ignore errors
    mv /usr/sbin/sendmail /usr/sbin/sendmail.old                # 忽略错误提示  ignore errors
    chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old        # 忽略错误提示 ignore errors
    ln -s /var/qmail/bin/sendmail /usr/lib
    ln -s /var/qmail/bin/sendmail /usr/sbin

创建 sendmail 的链接是很重要的, 即使不管以前的MTA, sendmail 命令也是一个会被很多程序调用来发送邮件的重要命令.
最后步骤是建立两个系统别名.

在所有 qmail 安装上面都要建立四个系统别名:
别名     目的
postmaster     RFC 2821 标准要求, 指向邮件系统管理员(也就是你)
mailer-daemon     反弹邮件事实上的标准接收者
root     转发特权用户, 根(root)用户的邮件给系统管理者
abuse     事实上的邮件滥用(垃圾邮件)举报地址

建立这些系统别名, 取决于你想让这些邮件发送到哪里(一个本地用户或者一个远程地址)并且适当的创建一个.qmail 文件集合. 举个例子, 加入你想让本地用户 dave 接收发给系统管理员和邮件管理员的邮件, 就这么作:

    echo dave > /var/qmail/alias/.qmail-root
    echo dave > /var/qmail/alias/.qmail-postmaster
    ln -s .qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon
    ln -s .qmail-postmaster /var/qmail/alias/.qmail-abuse  
    chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster

在 INSTALL.alias 文件里面有更详细的细节.
运行 qmail

如果依照上文, 你创建 /service 之后就停止了qmail, 你现在应该重新启动 qmail:
qmailctl start

测试安装

qmail 现在应该是正在运行的状态. 首先运行 qmailctl stat 来检验那些服务启动并运行中下面命令后部分为演示结果, 并不是必然如此的系统输出. 译者注)

    # qmailctl stat
    /service/qmail-send: up (pid 30303) 187 seconds
    /service/qmail-send/log: up (pid 30304) 187 seconds
    /service/qmail-smtpd: up (pid 30305) 187 seconds
    /service/qmail-smtpd/log: up (pid 30308) 187 seconds
    messages in queue: 0
    messages in queue but not yet preprocessed: 0

所有的四个服务都应该是"up"(启动了)1秒钟以上. 如果不是这样, 你可能就是在写脚本的时候写错了一些东西或者你漏过了创建一个甚至多个必要的文件, 目录或者链接. 返回上面的安装指导, 一步一步的再检查一下你的工作. 你也可以下载并运行 inst_check 脚本, 在这里下载 http://lifewithqmail.org/inst_check.
配置

你已经从源代码tarball方式, 或者自编译包方式, 或者var-qmail包方式安装了 qmail. 这一节的内容就是按照你的需要配置qmail.

配置文件

所有的qmail系统配置文件, 除了在~alias下的 .qmail 文件, 都位于 /var/qmail/control 目录下. qmail-control 的man手册页包括了一个像下面这样的表:
控制文件     默认值     被用于     使用目的
badmailfrom     none     qmail-smtpd     From 地址黑名单
bouncefrom     MAILER-DAEMON     qmail-send     反弹邮件的发送者
bouncehost     me     qmail-send     反弹邮件的发送者主机名
concurrencyincoming     none     /service/qmail-smtpd/run     最大并行 SMTP 连接数
concurrencylocal     10     qmail-send     最大并行本地传送数
concurrencyremote     20     qmail-send     最大并行远程传送数
defaultdelivery     none     /var/qmail/rc     默认的 .qmail 文件
defaultdomain     me     qmail-inject     默认的域名
defaulthost     me     qmail-inject     默认的主机名
databytes     0     qmail-smtpd     邮件最大字节数 (0 等于无限)
doublebouncehost     me     qmail-send     双重反弹的发送者的主机名
doublebounceto     postmaster     qmail-send     接收双重反弹邮件的用户
envnoathost     me     qmail-send     对缺少"@"符号的地址配置的缺省域名
helohost     me     qmail-remote     在SMTP HELLO命令里面使用的主机名
idhost     me     qmail-inject     在Message-ID 里面使用的主机名
localiphost     me     qmail-smtpd     替代本地 IP 地址的名字
locals     me     qmail-send     进行本地传送的域
me     系统的正式域名 FQDN     various     许多控制文件的默认要求
morercpthosts     none     qmail-smtpd     二级rcphosts(接收主机)数据库
percenthack     none     qmail-send     可以使用"%"模式转信的域
plusdomain     me     qmail-inject     "+"加号拖尾地址替代的域
qmqpservers     none     qmail-qmqpc     QMQP 服务器IP地址
queuelifetime     604800     qmail-send     邮件在队列内可保留秒数
rcpthosts     none     qmail-smtpd     我们的主机接收邮件的域
smtpgreeting     me     qmail-smtpd     SMTP 问候信息
smtproutes     none     qmail-remote     人为指定的SMTP路由
timeoutconnect     60     qmail-remote     SMTP连接超时秒数
timeoutremote     1200     qmail-remote     远程服务器连接超时秒数
timeoutsmtpd     1200     qmail-smtpd     SMTP客户端超时秒数
virtualdomains     none     qmail-send     虚拟域和用户

查找这些特殊控制文件的更多信息, 请参考上面表格 "被用于" 列下的各个模块的 man 手册页.



相关帖子
回复

使用道具 举报

2

主题

2

广告币

72

积分

初级会员

Rank: 2

积分
72
发表于 2013-7-24 12:06:09 | 显示全部楼层
Qmail下载、安装、配置、全程详解 一怎么打不开了?
回复 支持 反对

使用道具 举报

16

主题

52

广告币

185

积分

初级会员

Rank: 2

积分
185

社区QQ达人

发表于 2013-7-27 14:16:48 | 显示全部楼层
不明觉厉
i and my guys are shocked.
回复 支持 反对

使用道具 举报

31

主题

238

广告币

435

积分

中级会员

Rank: 3Rank: 3

积分
435

社区QQ达人

发表于 2013-7-27 22:11:58 | 显示全部楼层
这个得好好的学习下,,,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们|联系我们|DMCA|广告服务|小黑屋|手机版|Archiver|Github|网站地图|AdvertCN

GMT+8, 2024-11-21 22:13 , Processed in 0.043511 second(s), 13 queries , Gzip On, MemCache On.

Copyright © 2001-2023, AdvertCN

Proudly Operating in Hong Kong.

快速回复 返回顶部 返回列表