[后端]邮件服务器搭建之postfix

动机

st0rm23我想自己搭建一个邮件服务器,干啥勒,可以有自己的一坨邮箱,就可以用来注册一些奇怪的账号了2333。开玩笑啦,不过有个自己的邮箱还是挺不错的。

原理

邮件投递过程基本上是由三个角色组成的,分别是MUA(mail user agent)邮件用户代理, MTA(mail transfer agent)邮件传输代理, MDA(mail delivery agent)邮件投递代理。其实蛮简单的,我们通过一个例子来看这个三者如何协同工作的。

这个例子的背景是小明要用outlook邮箱给小红的foxmail邮箱发一封邮件,信件内容是这样的。

from xiaoming@outlook.com
to xiaohong@foxmail.com
哈喽小红,我可以去你家帮忙修电脑吗?亲亲

首先,小明在自己电脑上用outlook软件写好了一封邮件,这里outlook软件就是MUA,也就是用户接触到的那个客户端。其实平常你看到的QQ邮箱或者新浪邮箱那个界面也是MUA,区别只是outlook是电脑上的软件,QQ邮箱只是web应用而已。

然后勒,小明点了发送,这样邮件就从小明的电脑就会根据小明的邮箱地址xiaoming@outlook.com把这个邮件上传到outlook.com所解析到的服务器A上,这个服务器A勒就是MTA,这个服务器只是负责传输的,然后这个服务器又会继续进行传输,再根据xiaohong@foxmail.com丢到foxmail.com所对应的服务器B。当然有可能A和B之间继续经过了很多的MTA。这并不影响,总之就是最终会被传输到目的地。

最终的目的地就是MDA,这个MDA服务器负责存储下这封邮件的内容。然后小红的客户端当连接MDA的时候,一旦发现了自己有一封新邮件,就会去MDA上获取这个邮件。那么就展现到小红的面前了,晚上就可以愉快地和小明修电脑了。

大体的流程就是MUA -> MTA -> ... MTA -> MTA -> MDA <- MUA.
这里的传输过程因为情况的不同又分为不同的协议
MUA->MTA使用的是SMTP
MTA->MTA使用的是SMTP
MDU<-MUA使用的是POP3或者IMAP

介绍

MUA暂时先用linux命令行下的mail指令吧
MTA我们用POSTFIX(linux默认好像带有sendMail)
MDA就用linux自己的就好了,用户组会把邮件自己存下来的,mail指令可以取的到

准备工作

首先我们要先做好地址的解析工作,就以上述的例子而言,foxmail.com怎么找到对方的邮件服务器勒。大家可能会说foxmail.com这个域名对应的地址不就是么。这里大家可能搞混乱,通常说域名对应的地址是web服务器的地址,不一定就是邮件服务器的地址。DNS解析里面有A记录和MX记录之分,A(Address)记录就是普通我们说的域名翻译的地址。邮件投递的地址有稍微的不同,会去让查找foxmail.com这个域名下有没有MX记录,有的话就去查找MX记录对应的主机。通常MX记录的目标主机填的是一个子域名,而不是真正的IP地址。我们以为@example.com这个邮箱后缀的解析为例。

A记录新建一条如下
域名:mail.example.com IP地址:123.123.123.123
MX记录新建一条入戏
域名:example.com 目标主机:mail.exmaple.com
这样,当我们@example.com的时候,就会自动对应到mail.example.com的域名下再翻译成123.123.123.123了。

过程

1、先停用Sendmail

$ /etc/init.d/sendmail stop #停止sendmail服务
$ chkconfig sendmail off #从启动组删除
$ apt-get install postfix #安装postfix

2、修改配置
配置文件在/etc/postfix/main.cf下
打开后修改即可

myhostname = mail.example.com #主机名指向真正域名
mydomain = example.com #mydomain参数指向根域
myorigin = $mydomain #myorigin指向mydomain
mydestination = $mydomain #mydestination指向mydomain
inet_interfaces = all #监听网卡的所有IP,这样才可以收到外部邮件
mynetworks_style = host #只信任本机
relay_domains = $mydomain #配置哪些地址的邮件能够被Postfix转发,当然是mydomain的才能转发,否则其他人都可以用这台邮件服务器转发垃圾邮件

测试使用

这样基本就大功告成了。我们可以简单尝试一下,用你其他邮箱向root@example.com发一封邮件。这里root可以改成你服务器上的某个特定用户。如果没有收到退信提示说明发送成功了。

到root用户下,输入mail指令,就可以列出root用户收件箱的内容。

mail

郝然看到第一封邮件就是你刚才发的,是不是很开森。

当然你也可以用mail指令对外发邮件.

echo "hello, boys" | mail -s "hello" root@example.com

日常维护

日志 : /var/log/maillog
mailq : 列出当前在postfix发送队列中的所有邮件
postsuper -d ALL : 删除当前等待发送队列的所有邮件,包括发送失败的退信

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概念解释 SPF:Sender Policy Framework,直译过来就是发件人保证框架.出现的主要原因是SM...
    YusenMeng阅读 79,609评论 8 58
  • 假设我们自己的电子邮件地址是me@163.com,对方的电子邮件地址是friend@sina.com(注意地址都是...
    牛崽儿酷阅读 379评论 0 1
  • 从古代的八百里加急,到现在的电子邮件,邮件的发展见证了上下五千年的发展史,这些当然是废话,只是要说说邮件的重要性。...
    大牧莫邪阅读 1,584评论 0 13
  • Email的历史比Web还要久远,直到现在,Email也是互联网上应用非常广泛的服务。几乎所有的编程语言都支持发送...
    _士心_阅读 532评论 0 1
  • 背景 在上一篇讲到了安装完postfix之后,我们再服务器上有有了收发邮件的能力。 然而因为我们只是做了一点微小的...
    st0rm23阅读 2,384评论 0 1