`
smallsmile
  • 浏览: 133912 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ubuntu搭建邮件服务器sendmail+dovecot+squirrelmail

 
阅读更多

 

作为ubuntu上的各类应用,最终你仍然需要搭建一台mail服务器作为各类通知信息的流通渠道,我这篇搭建mail服务器的文章也是基于这点应用,作为各类服务之间的消息通信报警邮件,而不是对外提供mail服务。

ubuntu 12.04 LTS server环境,选择sendmail是因为和其他各类软件兼容性完全不用考虑,肯定默认是支持的,配置sendmail常常被一些教程类文章所诟病,其实也没这么困难。

选择登陆服务器的user作为邮件的地址,我这里是myuser@mysite为例。

1
$ sudo apt-get install sendmail bsd-mailx

(bsd-mailx 用于echo管道下发送邮件)这下就有了发送邮件的服务器了

首先  设置收信的域名 在/etc/mail/local-host-names中添加收信的域名

 

xxx.com

mail.xxx.com

12.12.12.12(ip地址)【没有域名的话也可以写上ip地址,发信时直接名字@12.12.12.12】

其次 ,修改/etc/mail/sendmail.mc,将其中的smtp项修改ip范围即可对外服务器发送邮件

DAEMON_OPTIONS(‘Family=inet, NAME=MTA-v4, Port=smtp, Addr=127.0.0.1 ‘)……


改为

DAEMON_OPTIONS(‘Family=inet, NAME=MTA-v4, Port=smtp, Addr=0.0.0.0 ‘)……

 

同样还有:

DAEMON_OPTIONS(`Family=inet, Name=MSP-v4, Port=submission, M=Ea, Addr=0.0.0.0′)dnl

 

然后用m4命令生成新的配置文件[如果提示没权限则输入su切换到root执行]

1
$ sudo m4 /etc/mail/sendmail.mc > /etc/mail.sendmail.cf

或:

使配置生效:

 

#m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

 

#/etc/init.d/sendmail restart【重启】

重启sendmail服务后测试一下:

1
$ echo "test mail ok" | mail -s "test mail ok" xxxxxxxxx@gmail.com

打开web登录邮箱即可看到邮件,当然本地防火墙对于smtp的25号端口不能封锁,否则也就发送不成功。这个命令的xxxx@gmail.com换为本地用户名,即对本地用户发送邮件,一样能测试安装是否成功。

光有发送不行,还需要接受邮件,那么就是pop3+imap接受邮件服务器,选择广为流传的dovecot,配置也很简单。

1
$ sudo apt-get install dovecot-imapd dovecot-pop3d

如果不是选择的sendmail的默认设置,那么先要检测一下邮箱存储位置在哪里,再开始配置dovecot,使用下面的命令寻找先用前面的echo对本地用户发送一个邮件,然后

1
2
3
$ for mbox in /var/mail/$USER /var/spool/mail/$USER ~/mbox ~/mail/* ~/*; do
grep -q "Dovecot test" $mbox && echo "mbox: $mbox"
done

显示的邮箱地址一般是/var/mail/$USER本地用户名
可以cd /var/mail/ 进去查看邮件
那么dovecot的配置就是修改mail存储位置,默认就使用~/mail/来存储,默认设置也是imap来接管邮件接收

1
$ sudo vi /etc/dovecot/conf.d/10-mail.conf

取消 “ mail_location = mbox:~/mail:INBOX=/var/mail/%u ”前的“ # ”保存即可,重启dovecot

1
$ sudo /etc/init.d/dovecot restart

至此完成了收发邮件的配置。
接下来配置一个webmail来浏览邮件,我选择了squirrelmail,一样在ubuntu源中

1
$ sudo apt-get install squirrelmail

使用

1
$ sudo squirrelmail-configure

1
$ sudo ./etc/squirrelmail/conf.pl

均可,通过选项【选2】,先修改smtp为sendmail,再修改设定imap用dovecot,检查一下是否是localhost:143即imap端口可用,可以选择

1
2
$ telnet localhost 143
a login "local_username" "password"

来看 dovecot是否ready,登陆是否成功,配置一下apache就能通过web访问了,
将配置好的squirrelmail下的apache.conf链接过去即可

1
$ ln -s /usr/share/squirrelmail/ /var/www/mail

web访问 http://ip/mail/ 用本地用户名和密码登陆
这里遇到一个bug,默认的~/mail/.imap/INBOX缺失,登陆后报错,自己在这个地方新建一个文件夹INBOX即可

配置结束!
使用中遇到的问题,发送邮件后响应速度很慢,不只是web的问题,就连bash下邮件发送确认也很慢,超过 5s ,这样的性能是不能忍受的。

【解决:】

此问题是由于:

系统sendmail的时候在查询你设置的主机名的A记录或反向域名记录,由于全球9台DNS根系统都在美国,这个时候会去查询本机主机名对应的dns A记录,特别时你安装系统时设置的一些“奇怪”的主机名的时候,比如rac1等等之类的,这个时候sendmail会去做这个操作过程

 

 

Apr 28 13:41:36 rac1 sendmail[3494]: gethostby*.getanswer: asked for “rac1 IN AAAA”, got type “A”
Apr 28 13:42:36 rac1sendmail[3499]: gethostby*.getanswer: asked for “rac1 IN AAAA”, got type “A”

Apr 28 13:43:37 rac1 sendmail: sendmail startup succeeded

Apr 28 13:43:37 rac1 sm-msp-queue[3509]: gethostby*.getanswer: asked for “rac1 IN AAAA”, got type “A”
Apr 28 13:41:36 rac1 sendmail[3494]: gethostby*.getanswer: asked for “rac1 IN AAAA”, got type “A”

Apr 28 13:42:36 rac1sendmail[3499]: gethostby*.getanswer: asked for “rac1 IN AAAA”, got type “A”

Apr 28 13:43:37 rac1 sendmail: sendmail startup succeeded

Apr 28 13:43:37 rac1 sm-msp-queue[3509]: gethostby*.getanswer: asked for “rac1 IN AAAA”, got type “A”

 该过程少则一到两分钟,多则四到五分钟,而且要命的是不报任何错误信息,这个时间大大超过了我们能忍受的“8s”时间了,心里承受力差的兄弟就要受煎熬了。

 

知道了问题的症结,就可以对症下药了,比如我们可以修改系统配置文件/etc/hosts

让sendmial绕过查询远程主机,这里给出一种最简单的方法,给主机设置一个别名

修改/etc/hosts ,未修改之前
127.0.0.1 localhost.localdomain localhost
修改成
127.0.0.1 localhost.localdomain localhost 主机名称


查看本机的主机名称的命令是: hostname
再次重新启动sendmail看看

 【中文设置】

输入:sudo squirrelmail-configure

Languages”,将“ Default Language”改成“zh_CN”,“Default Charset”改成“GB2312”。保存退出。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics