美文网首页树莓派聚合springmvc学习
[后端]邮件服务器搭建之postfix

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

作者: st0rm23 | 来源:发表于2016-11-25 23:28 被阅读193次

    动机

    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 : 删除当前等待发送队列的所有邮件,包括发送失败的退信

    相关文章

      网友评论

        本文标题:[后端]邮件服务器搭建之postfix

        本文链接:https://www.haomeiwen.com/subject/feywpttx.html