Scientific Linux是重新编译的Red Hat Enterprise Linux,由费米国家加速器实验室、欧洲核研究组织以及世界各地的大学和实验室共同开发。它旨在与Red Hat Enterprise Linux完全兼容,也强调自主方便的定制,用户可以根据自己的需求做相应修改,可以使用脚本或者Anaconda给自己定制最小化的安装模式。
全部博文(89)
分类: BSD
2011-06-19 11:15:23
Mailman是一个比较好的邮件列表程序,功能非常强大,提供完美的Web端,权限可以分散管理,多个开源组织都在使用。
创建mailman用户组,执行如下命令:
pw group add mailman
1. 安装mailman
cd /usr/ports/mail/mailman && make MAIL_GID=mailman CGI_GID=vgroup install clean
安装时选择:POSTFIX CHINESE
在此使用mailman做为MAIL_GID是为了避免在后期的维护中使用check_perms -f修复权限的时候,mailman会自动默认修改为mailman这个用户来转发邮件。而使用 CGI_GID=vgroup作为mailman的CGI执行权限是为了跟extmail/extman执行cgi时的权限一致。
配置/etc/rc.conf
增加一行mailman_enable="YES"
echo mailman_enable=\"YES\">> /etc/rc.conf
2. 配置postfix支持
touch /usr/local/mailman/data/aliases
touch /usr/local/mailman/data/virtual-mailman
/usr/local/sbin/postconf -e 'recipient_delimiter=+'
/usr/local/sbin/postconf -e 'alias_maps=hash:/etc/aliases, hash:/usr/local/mailman/data/aliases'
postalias /usr/local/mailman/data/aliases
/usr/local/sbin/postconf -e 'virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf, hash:/usr/local/mailman/data/virtual-mailman'
postalias /usr/local/mailman/data/aliases
postmap /usr/local/mailman/data/virtual-mailman
/usr/local/sbin/postconf -e 'default_privs = mailman'
/usr/local/etc/rc.d/postfix restart
完成mailman配置后的完整main.cf文件如下:
queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
data_directory = /var/db/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 550
mynetworks_style = host
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop
html_directory = /usr/local/share/doc/postfix
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = /usr/local/share/doc/postfix
mydomain = xxx.com.cn
myhostname = mail.xxx.com.cn
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain
virtual_mailbox_base = /home/data/domains
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf,hash:/usr/local/mailman/data/virtual-mailman
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain = $myhostname
smtpd_helo_required = yes
smtpd_delay_reject = yes
disable_vrfy_command = yes
smtpd_client_restrictions = check_client_access hash:/usr/local/etc/postfix/client_access
smtpd_helo_restrictions = reject_invalid_hostname,check_helo_access hash:/usr/local/etc/postfix/helo_access
smtpd_sender_restrictions = reject_non_fqdn_sender,reject_unknown_sender_domain, check_sender_access hash:/usr/local/etc/postfix/sender_access
smtpd_data_restrictions = reject_unauth_pipelining
header_checks = regexp:/usr/local/etc/postfix/head_checks
body_checks = regexp:/usr/local/etc/postfix/body_checks
smtpd_use_tls = yes
smtpd_tls_auth_only = no
smtp_tls_CAfile = /usr/local/etc/postfix/certs/cacert.pem
smtp_tls_cert_file = /usr/local/etc/postfix/certs/mycert.pem
smtpd_tls_CAfile = /usr/local/etc/postfix/certs/cacert.pem
smtpd_tls_cert_file = /usr/local/etc/postfix/certs/mycert.pem
smtpd_tls_key_file = /usr/local/etc/postfix/certs/mykey.pem
smtpd_tls_received_header = yes
smtpd_tls_loglevel = 3
smtpd_starttls_timeout = 60s
virtual_transport = maildrop:
maildrop_destination_concurrency_limit = 1
maildrop_destination_recipient_limit = 1
content_filter = smtp-amavis:[localhost]:10024
receive_override_options = no_address_mappings
recipient_delimiter = +
alias_maps = hash:/etc/aliases, hash:/usr/local/mailman/data/aliases
default_privs = mailman
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname,
check_policy_service inet:127.0.0.1:10030
3. 配置mailmancd /usr/local/mailman
/usr/local/mailman/bin/genaliases
chown -R mailman:mailman /usr/local/mailman/data/aliases*
chown -R mailman:mailman /usr/local/mailman/data/virtual-mailman*
chmod 664 /usr/local/mailman/data/aliases*
chmod 664 /usr/local/mailman/data/virtual-mailman*
cp -Rfp icons/ cgi-bin/icons
cp /usr/local/www/icons/powerlogo.gif cgi-bin/icons/
修改管理员密码:bin/mmsitepass我将密码设为xxxxxxxx
vi /usr/local/mailman/Mailman/mm_cfg.py,增加如下内容
MTA = 'Postfix'
#POSTFIX_STYLE_VIRTUAL_DOMAINS = ['vistualdomain2,vistuldomain3']
#特别注意关掉这条,因为我在这个邮件服务器上只有一个虚拟域名,等于是vistul domain1,而POSTFIX_STYLE_VIRTUAL_DOMAINS是专门为vistualdomain2 vistuldomain3 准备的,只有一个域名的时候,都写到这里就有发生提示“user unknown. Command output: Invalid user specified.”的错误。
add_virtualhost('mail.xxx.com.cn')
myhostname = 'mail.xxx.com.cn'
mydomain = 'xxx.com.cn'
DEFAULT_EMAIL_HOST = 'mail.xxx.com.cn'
DEFAULT_URL_HOST = 'lists.xxx.com.cn'
DEFAULT_SERVER_LANGUAGE = 'zh_CN'
4. 创建一个邮件列表mailmanmailman列表为必须创建的,管理员邮箱使用,密码使用soft.43>
bin/newlist mailman
显示:root@mail38/usr/local/mailman# bin/newlist mailman
Enter the email of the person running the list:
Initial mailman password:xxxxxxxx
Hit enter to notify mailman owner...回车退出。
5. 配置apache支持mailman
vi /usr/local/etc/apache22/Includes/extmail.conf中添加如下内容。
ServerName lists.xxx.com.cn
DocumentRoot /usr/local/mailman/cgi-bin/
ScriptAlias /mailman "/usr/local/mailman/cgi-bin/"
Alias /pipermail /usr/local/mailman/archives/public/
AddDefaultCharset Off
Options FollowSymLinks ExecCGI
AllowOverride None
Order allow,deny
Allow from all
改造后的extmail.conf是这样的:
NameVirtualHost *:80
ServerName mail.xxx.com.cn
DocumentRoot /usr/local/www/extmail/html/
ScriptAlias /extmail/cgi /usr/local/www/extmail/cgi/
Alias /extmail /usr/local/www/extmail/html/
ScriptAlias /extman/cgi "/usr/local/www/extman/cgi/"
Alias /extman "/usr/local/www/extman/html/"
SetHandler cgi-script
Options +ExecCGI
AddDefaultCharset UTF-8
AllowOverride None
Options None
Order allow,deny
Allow from all
# SuexecUserGroup vmail vmail
ServerName lists.xxx.com.cn
DocumentRoot /usr/local/mailman/cgi-bin/
ScriptAlias /mailman/ "/usr/local/mailman/cgi-bin/"
Alias /pipermail/ "/usr/local/mailman/archives/public/"
AddDefaultCharset Off
Options FollowSymLinks ExecCGI
AllowOverride None
Order allow,deny
Allow from all
重启APACHE
/usr/local/sbin/apachectl restart
6. 测试通过web使用mailman
检测配置文件完整性并加以修复:/usr/local/mailman/bin/check_perms –f
修正归档文件的权限:chmod o-x /usr/local/mailman/archives/private
改变归档目录下的各个目录的权限
# cd /usr/local/mailman/archives
# chown vuser private
# chmod o-x private
使用方法:添加一个邮件列表:
mail# /usr/local/mailman/bin/newlist nou_all
然后显示:
Enter the email of the person running the list:
Initial zxtestlist password: XXXXX
Hit enter to notify zxlist owner...
然后任何人可以网上发邮件,通过设置好的管理员对邮件进行审核,审核选项有丢弃、拒绝、批准等等,通过批准后邮件就可以发给全部的列表成员了。
把用户添加到邮件列表里测试,建一个文本文件,比如maillists.txt,一行一个邮件地址,然后执行如下命令:
mail# /usr/local/mailman/bin/add_members -n maillists.txt zxtestlist
不过这可以通过网页来增加用户(),
邮件列表的配置
Default.py和mm_cfg.py的配置是针对全局的,对全局配置文件的修改不会影响到已经存在的邮件列表。mailman提供了config_list这个命令来对单个邮件列表进行配置,先导出该邮件列表的配置:
mail# /usr/local/mailman/bin/config_list -o /tmp/config mailman
然后修改/tmp/config文件,里面有很多选项,可以根据自己的要求修改,比如加上回复到邮件列表的邮件头、去掉mailman自动加的边脚等等,最后把这个配置文件导回给邮件列表就可以了:
mail# /usr/local/mailman/bin/config_list -i /tmp/config mailman
通过web访问:
-------------------------------------------------------------------------
经过一段时间的实际使用,发现mailman真的很好,特殊适合用来给企业内部群发邮件,我把不同年级的学生分成不同的邮件列表,然后发给需要群发邮件的相关部门,他们群发邮件后,都需要我审核后才会发到学生邮箱中,很可靠。