下面这篇文章是我在kingsoft里最有贡献的一件事了!当时老大叫我构建内部邮件列表服务来作为试用期的考核。我记得这个任务花了几个星期的时间来搞好!浪费时间的地方就是我太死板和知识缺乏啊!!
先说一下自己对邮件列表的理解:
邮件列表就类似于论坛,不过它与论坛最大的不同就是,它是通过邮件来发表主题和回复的。它和google group差不多吧今天在CU的BLOG里看到了这篇文章,感触良多!所以把它搬过来,让思念的地方再多一处!!
下面就是内容:
在安装配置过程中,按顺序来是一种很好的习惯!我认为邮件列表的 工作流程是(mailman可以说是一个MDA(邮件传递代理(Mail Delivery Agent)):
大体上是:
mailmanelements.png #这里本来是用mind画的一幅图,用于让我表达我对邮件列表的工作流程的理解,我把这图保存到了gmail,不过现在这个目录打不开了,so
对以上的这幅图我的理解是:第一次用户通过Email地址来通过订阅邮件列表,而postfix作为邮件服务来接收发到这个地址的邮件然后交到mailman,mailman就通过postfix来给这些Email地址发送确认信。Email地址点击确认后mailman就把这些Email地址存到Manage User Email add里面去。第二次,第三次。。。当用户要把信息分享给其它的Email的时候,它只须要将信发给Mailman这个地址,mailman就从Manage User Email addr里取出其它Email地址然后通过postfix服务来进行转发。同时,它也将这个信息放到Archive里面去以便以后查看。
以下就是安装和配置mailman的过程:
平台
FreeBSD-7.0-release
软件
邮件服务器:
postfix-2.5.5,1
邮件列表服务器:
mailman-2.1.11
web服务器:
apache-2.2.6_2
安装过程
我是通过ports来安装mailman(不过在安装mailman的同时也要安装postfix邮件服务)
cd /usr/ports/mail/mailman
make install clean #在弹出的对话框中选择CHINESE and POSTFIX,我的做法
#是让postfix和mailman结合
postfix:
cd /usr/ports/mail/postfix
make config
make install
在postfix中, 最重要的文件就是main.cf and master.cf
在freebsd下,有一个在系统安装后就会自带的一个邮件服务了,叫做sendmail.为什么它会出现在freebsd安装完成之后就有了?
这里有一个说法:
sendmail是FreeBSD上的标准邮件传输代理(Mail Transport Agent, MTA -- 不过又有人说MTA是 messages Transport Agent)!
那为什么要用postfix来替代sendmail呢??因为sendmail的单体式结构已成为许多安全隐患的主因,而且难以配置和维护。而 postfix的目标是可靠性,安全性效率,灵活性,容易使用,可兼容sendmail,这样就成就了postfix替换sendmail的一个很好的理由。
配置postfix:
我们现在要把sendmail替换成postfix,所做的工作是:
#vim /etc/rc.conf
加入:
sendmail_enable="YES"
sendmail_flags="-bg"
sendmail_pidfile="/var/spool/postfix/pid/master.pid"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
安装完成后必须要修改的地方:
#vim /usr/local/etc/postfix/main.cf
修改以下两句话:
myhostname = YOUR_DOMAIN
mydomail = YOUR_DOMAIN
还在一个是:
/usr/loca/sbin/postalias /etc/aliases # 产生aliases.db文件,如果没有的话postfix会启动,控制台下会出现错误信息
启动postfix服务:
#/usr/local/etc/rc.d/postfix start
上面就是简单的安装postfix的过程。其实,邮件服务器的安装配置并不是这么简单!!这里只是用来作为一个平台和还没细化它才会这样的!
配置mailman,使mailman和postfix结合:
(在这里我套用的mailman源码目录下的doc/mailman-install.txt文件,在任何情况下,源码目录下的安装或配置文件都是最好的,最全的)
安装完mailman后,最好进行以下的一个命令:
# $PREFIX/bin/check_perms -f # 它能检测到mailman的完整性并加以修复!
改变归档目录下的各个目录的权限
# cd /archives
# chown private
# chmod o-x private
接下来就是配置WEB服务器让它支持WEB上的mailman(用Apache WEB服务器):
在文件/usr/local/etc/apache22/httpd.conf中添加如下内容。
ScriptAlias /mailman "/usr/local/mailman/cgi-bin/"
Alias /pipermail /usr/local/mailman/archives/public/
Options FollowSymLinks ExecCGI
AllowOverride None
Order allow,deny
Allow from all
整合Postfix和mailman
在main.cf里加入
recipient_delimiter = + # Using "+" as the delimiter works well with the default values for
# VERP_FORMAT and VERP_REGEXP in Defaults.py.
unknown_local_recipient_reject_code = 550
在mailman的配置文件mm_cfg.py里加入
MTA = 'Postfix' # The MTA variable names a module in the Mailman/MTA directory which
# contains the mail server-specific functions to be executed when a
# list is created or removed.
执行命令:
% cd /usr/local/mailman
% bin/genaliases #initialize your aliases file.
创建aliases和virtual-mailman文件,当mailman创建邮件列表名的时候,所有的邮件地址都会写到里面去!
touch /usr/local/mailman/data/aliases
touch /usr/local/mailman/data/virtual-mailman
产生DB文件
/usr/local/sbin/postalias /usr/local/mailman/data/aliases
/usr/local/sbin/postmap /usr/local/mailman/data/virtual-mailman
修改这些文件的权限
% su
% chown mailman:mailman data/aliases*
% chmod g+w data/aliases*
配置postfix的配置文件main.cf,加入:
alias_maps=hash:/etc/aliases, hash:/usr/local/mailman/data/aliases
virtual_alias_maps = hash:/usr/local/mailman/data/virtual-mailman
配置mailman的配置文件mm_cfg.py,加入:
POSTFIX_STYLE_VIRTUAL_DOMAINS = ['DOMAIN']
MTA = 'Postfix'
POSTFIX_STYLE_VIRTUAL_DOMAINS = ['YOUR_DOMAIL']
add_virtualhost('ALIAS1_YOUR_DOMAIL','ALIAS2_YOUR_DOMAIL') # 当不想使用虚拟域名的话,您可把VIRTUAL_HOST_OVERVIEW = off写到 mm_cfg.py中
DEFAULT_EMAIL_HOST = 'YOUR_DOMAIL'
DEFAULT_URL_HOST = 'YOUR_DOMAIL'
DEFAULT_SERVER_LANGUAGE = 'zh_CN' # 这里是把服务语言改为zh_CN,如果不写这句,它会默认变成英文
创建一个邮件列表,默认要得先创建一个名为mailman的邮件列表,如果您不想用mailman作为一个邮件列表的话,那可在mailman的配置文件里加入:MAILMAN_SITE_LIST = '您的邮件列表名'
% bin/newlist mailman
% bin/config_list -i data/sitelist.cfg mailman
创建密码:这密码创建和管理所有的邮件列表的
% $prefix/bin/mmsitepass
这是管理您创建的邮件列表的密码
% $prefix/bin/mmsitepass -c
* 以上就是我在FreeBSD下配置mailman和postfix结合的过程,也是在mailman/doc/mailman-install.txt下拿过来用的,如果你想安装一个mailman邮件列表而又不想出很多错误的话,我建议您去看下这个完整的配置文件吧。 其实,配置过程真的就只有这么多了,启动mailman后应该可能通过Web界面来对它进行订阅了。如果您在外部域名,您应该可以正常地使用mailman 的一般功能了。
* mailman的默认配置在Defaules.py文件里,如果你想改变mailman的话,那就请参考这个文件,然后将您要修改的参数放到mm_cfg.py里吧。
在发送过程中出现过的问题:
* 邮件无法发送出去,提示错误信息:"Domain of sender ADD address don't exist"
o 原因是:当你在mailman/Mailman/mm_cfg.py中的add_virtual()一行中如果填入未注册的域名的时候,mailman无法解析域名。
o 还有当创建列表后在列表管理中的“列表发送邮件时使用的主机名”一行中,它会自动填入mailman/Mailman/mm_cfg.py中的最后一个域名,这就造成了邮件只能从本地发送和接收了
o 解决方法 1:
1. 在mailman/Mailman/mm_cfg.py中的add_virtual一行写入已注册的域名
2. 在列表管理中的“列表发送邮件时使用的主机名”改为邮件服务器上已注册的域名!
o 解决方法2:
+ 在mmcfg.py里加入:
VIRTUAL_HOST_OVERVIEW = off
+ 也可以解决这个问题
* 启动mailman的时候出现 "missing the site : mailman"
原因是:mailman一启动就读取邮件列表,而它默认的首个邮件列表是mailman。当您不想使用mailman作为邮件列表的话,那就在mm_cfg.py文件里加入:
MAILMAN_SITE_LIST = '您的邮件列表名'
* 改变各种提示信息:
当您不想使用mailman自带的各种提示信息(在mailman/templates目录下),那是可能自己定制的。创建mailman/lists /<您的邮件列表>/zh_CN(您的语言),复制mailman/templates目录下的zh_CN的所有文件到这个目录里,然后再进行编辑。默认的,mailman会先读取邮件列表里的任何内容,再去往外读取。而mailman/templates目录里的内容是作为全局的邮件列表的提示信息,它会最后才被读取。
* 复制旧的归档文件到新的列表的方法:
o 当您想在新的邮件列表中显示之前的旧的归档文件的方法如下:
复制mailman/archives/private/OLDLIST.mbox/OLDLIST.mbox 到mailman/archives/private/NEWLIST.mbox/NEWLIST.mbox
改善中文
mailman的页面显示中文的文件是mailman/messages/zh_CN/LC_MESSAGES/mailman.po。在已编译安装好的mailman的 mailman/messages/zh_CN/LC_MESSAGES/目录下会有mailman.po和mailman.mo两个文件。不过有 mailman源码中只有mailman.po文件。这文件就是英文与中文的对照翻译,也是当页面显示中文时的显示结果。当您想在安装好的mailman 中修改mailman.po文件是无法生效的,即使重启mailman。因为在编译时mailman将该文件的设置编译成了mailman.mo文件了,页面只读取mailman.mo里面的内容,而mailman.ml又是一个不知道格式编码的乱码文件,又无法重装mailman的时候.
有两个可以解决的办法:
* 第一个解决办法是(也是最笨的办法):
* 打包备份好已编译的mailman/messages目录
* 下载同一版本的mailman源码
* 在源码目录下通过./configure以令messages产生Makefile文件
* 复制源码中的build目录(用于make messages目录时会用到里面的一些脚本)和messages目录到已编译安装好的mailman目录下。
* 进入编译好的mailman/messages目录下,修改zh_CN/LC_MESSAGES/mailman.po文件,让它适合您的要求。
* 回到mailman/messages目录下运行make命令
* 进入zh_CN/LC_MESSAGES/目录,您会发现会多了一个mailman.mo文件,这时重启mailman,再回到WEB界面下您会发现中文效果的改变
* 第二个解决的办法: 来到mailman/bin/目录下执行:
sudo ./msgfmt.py mailman/messages/zh_CN/LC_MESSAGE/mailman.po 这样就会产生一个mailman.mo文件了。 然后就重启mailman,您就会看到效果了
注意:
1. 当您的mailman无法收信或是发信的时候,第一个要看的地方就是/var/log/messages文件,里面会有关于系统和各个服务的各种信息,包括了错误信息。第二就是看/var/log/maillog文件,里面记述了邮件无法发送的原因和其它很有用的信息
2. 当您使用telnet来发信的时候,请记住发信格式!