CentOS 搭建Postfix+Dovecot简单邮件系统

https://my.oschina.net/ososchina/blog/861957

https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-on-ubuntu-16-04

mac foxmail

windows foxmail

服务器信息

系统:CentOS 6.5 minimal版本

主机:虚拟机

虚拟机IP:192.168.128.128/24

宿主IP:10.1.79.24/24

安装postfix

注意:CentOS 7实际上已经用postfix+Sasl2代替sendmail了,因此无需安装。

1.移除sendmail

安装完成还需要替换系统自带的sendmail:

# rpm -e sendmail #或者 # yum remove sendmail

修改MTA(默认邮件传输代理)

手写查看有哪些可以选择的邮件系统

alternatives --display mta 
mta - status is manual.
link currently points to /usr/sbin/sendmail.sendmail /usr/sbin/sendmail.sendmail - priority 90 slave mta-pam: /etc/pam.d/smtp.sendmail
slave mta-mailq: /usr/bin/mailq.sendmail
slave mta-newaliases: /usr/bin/newaliases.sendmail
slave mta-rmail: /usr/bin/rmail.sendmail
slave mta-sendmail: /usr/lib/sendmail.sendmail
slave mta-mailqman: /usr/share/man/man1/mailq.sendmail.1.gz
slave mta-newaliasesman: /usr/share/man/man1/newaliases.sendmail.1.gz
slave mta-aliasesman: /usr/share/man/man5/aliases.sendmail.5.gz
slave mta-sendmailman: /usr/share/man/man8/sendmail.sendmail.8.gz /usr/sbin/sendmail.postfix - priority 30 slave mta-pam: /etc/pam.d/smtp.postfix
slave mta-mailq: /usr/bin/mailq.postfix
slave mta-newaliases: /usr/bin/newaliases.postfix
slave mta-rmail: /usr/bin/rmail.postfix
slave mta-sendmail: /usr/lib/sendmail.postfix
slave mta-mailqman: /usr/share/man/man1/mailq.postfix.1.gz
slave mta-newaliasesman: /usr/share/man/man1/newaliases.postfix.1.gz
slave mta-aliasesman: /usr/share/man/man5/aliases.postfix.5.gz
slave mta-sendmailman: /usr/share/man/man1/sendmail.postfix.1.gz
Current `best' version is /usr/sbin/sendmail.sendmail.

然后我们修改为/usr/lib/sendmail.postfix

alternatives --set mta /usr/sbin/sendmail.postfix 

检查一下是不是已经设置成功了。

alternatives --display mta | grep "/usr/sbin/sendmail.postfix"

第一行可以看到mta的状态。 例如:

链接当前指向 /usr/sbin/sendmail.postfix /usr/sbin/sendmail.postfix - priority 30 当前“最佳”版本是 /usr/sbin/sendmail.postfix。

配置Postfix

编辑/etc/postfix/main.cf,可以下载下来修改,也可以使用vi进行编辑:

vi /etc/postfix/main.cf

编辑内容如下

# 75行: 取消注释,设置hostname
myhostname = mail.bujidao.me
# 83行: 取消注释,设置域名
mydomain = bujidao.me
# 99行: 取消注释
myorigin = $mydomain
# 116行: 修改
inet_interfaces = all
# 119行: 推荐ipv4,如果支持ipv6,则可以为all
inet_protocols = all
#209行,把前面的注释拿掉,不然无法发送到公网 【http://www.cnblogs.com/apexchu/p/4271264.html】
local_recipient_maps =  
# 164行: 添加
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# 264行: 取消注释,指定内网和本地的IP地址范围
mynetworks = 127.0.0.0/8, 10.1.79.0/24,192.168.128.128
# 419行: 取消注释,邮件保存目录
home_mailbox = Maildir/
# 571行: 添加
smtpd_banner = $myhostname ESMTP $mail_name

# 添加到最后
# 规定邮件最大尺寸为10M
message_size_limit = 10485760
# 规定收件箱最大容量为1G
mailbox_size_limit = 1073741824
# SMTP认证
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject
修改好了之后使用service开启postfix,使用chkconfig postfix on将postfix开机启动。

#service postfix restart #checkconfig postfix  on #开机启动,可选

安装Dovecot

yum -y install dovecot

配置Dovecot

1.修改dovecot.cong

vi /etc/dovecot/dovecot.conf

修改如下:

listen = *,:: protocols = imap pop3 lmtp

2.修改auth.conf

vi /etc/dovecot/conf.d/10-auth.conf
# 9行: 取消注释并修改,表示允许使用明文验证 disable_plaintext_auth = no # 97行: 添加,表示允许使用明文登录 auth_mechanisms = plain login

3.修改mail.conf

vi /etc/dovecot/conf.d/10-mail.conf
# 30行: 取消注释并添加,使用qmail风格 mail_location = maildir:~/Maildir

4.修改master.conf

vi /etc/dovecot/conf.d/10-master.conf
# 88-90行: 取消注释并添加
# Postfix smtp验证
unix_listener /var/spool/postfix/private/auth {
    mode = 0666 user = postfix group = postfix }

5.修改pop3.conf

vi /etc/dovecot/conf.d/20-pop3.conf
pop3_uidl_format = %08Xu%08Xv pop3_client_workarounds = outlook-no-nuls oe-ns-eoh

6.配置ssl验证

 vi /etc/dovecot/conf.d/10-ssl.conf
ssl = no    #不开启SSL #暂时不开启ssl,因为我们没有合法的证书,自签名证书可能存在问题 #ssl_cert = </etc/pki/dovecot/certs/dovecot.pem #ssl_key = </etc/pki/dovecot/private/dovecot.pem   

  7.启动dovecot并设置开机启动

service dovecot start
chkconfig dovecot on 

8.检查相关端口

ps aux | grep "dovecot"
root 3894 0.0 0.1 107936 604 pts/1 S+ 14:27 0:00 tail -f dovecot-err.log
root 4040 0.0 0.1 107936 604 pts/2    S+   14:53   0:00 tail -f /var/log/dovecot-info.log
root 4442 0.0 0.3 15640 1520 ?        Ss   16:01 0:00 /usr/sbin/dovecot -F
dovecot 4445 0.0 0.2 9308 1024 ?        S    16:01 0:00 dovecot/anvil
root 4446 0.0 0.2 9436 1184 ?        S    16:01 0:00 dovecot/log
root 4517 0.0 0.2 112664 972 pts/0 R+ 16:12 0:00 grep --color=auto dovecot

或者

netstat -lntp -4
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp 0 0 0.0.0.0:110 0.0.0.0:*               LISTEN 4533/dovecot        
tcp 0 0 0.0.0.0:143 0.0.0.0:*               LISTEN 4533/dovecot        
tcp 0 0 0.0.0.0:22 0.0.0.0:*               LISTEN 969/sshd            
tcp 1 0 0.0.0.0:25 0.0.0.0:*               LISTEN 4361/master

使用lsof查询

lsof -i :143
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dovecot 4533 root   36u  IPv4  95185      0t0  TCP *:imap (LISTEN)
dovecot 4533 root   37u  IPv6  95186      0t0  TCP *:imap (LISTEN)
lsof -i :110
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dovecot 4533 root   24u  IPv4  95149      0t0  TCP *:pop3 (LISTEN)
dovecot 4533 root   25u  IPv6  95150      0t0  TCP *:pop3 (LISTEN)
lsof -i :25
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
master  4361 root   13u  IPv4  93270      0t0  TCP *:smtp (LISTEN)
master  4361 root   14u  IPv6  93271      0t0  TCP *:smtp (LISTEN)

可以看到master是stmpd,占用了25,dovecot占了110(pop3),143(imap)端口

邮箱验证与使用

创建用户

一切都弄好以后,就可以使用Foxmail等第三方软件来收发邮件了。在这里需要说一下,系统用户就是邮件的用户,例如root,就是一个邮箱用户,邮箱是root@domain.com,密码就是root的密码,所以需要创建用户,只要使用adduser创建用户,再使用passwd设置密码。

好了,假如我们创建一个admin的用户:

#创建用户组与用户,并且不允许用户登录系统,但是账户存在,只用于邮箱 groupadd mailusers
adduser -g mailusers -s /sbin/nologin martin
adduser -g mailusers -s /sbin/nologin jack #分别给martin和jack添加密码 passwd martin
passwd jack

 

使用伪域名验证

原则上,我们要使用邮箱,必须具有域名才行,我们要么搭建自己的DNS服务器,要么购买域名,这里为了方便,我们通过修改hosts的方式来实现

修改虚拟机上的hosts

127.0.0.1 bujidao.me 192.168.128.128 bujidao.me 127.0.0.1 mail.bujidao.me 192.168.128.128 mail.bujidao.me

然后修改宿主机上的hosts,如果你没使用宿主机,那么宿主机hosts就不需要修改了,但是大多数时候,我们需要修改。

添加如下内容

192.168.128.128 bujidao.me 192.168.128.128 mail.bujidao.me

关闭虚拟防火墙

service iptables stop

使用foxmail代理客户端收发邮件

然后创建,到下个页面修改 邮件账号

注意:红色框部分不能带 @domain,否则登录不了,因为我们给系统创建的账户并没有添加邮箱

点击创建,就可以添加jack账户了,用同样的方式,我们可以将martin添加到foxmail

 

然后,我们可以使用jack,martin相互发送邮件了

同样也可以给其他邮箱发,我给某网站邮箱发邮件也是成功的,当然,我们反对垃圾邮件,做一名好公民使我们的本分

参考:

Linux系统下邮件服务器的搭建(Postfix+Dovecot)

CentOS 6.5 安装与配置邮件服务器(postfix + dovecot)  

Postfix+Dovecot+MySQL搭建邮件服务器

CentOS 6.4 邮件服务器之Postfix + dovecot + sasl 笔记  

postfix 安装配置详解

http://www.cnblogs.com/xiaoshi1991/archive/2012/09/20/2695061.html

linux mail命令用法

在Linux系统下mail命令的测试

1. 最简单的一个例子:

 mail -s test admin@aispider.com

这条命令的结果是发一封标题为test的空信给后面的邮箱,如果你有mta并且后面的邮箱不会挡这种可能莫名奇妙的信的时候,就能收到这封信了。如果你不想被这种乱七八糟的事情干扰,后面的邮箱请使用本地帐户。 

2. 第二个例子:

 三种常用格式发信

mail -s test admin@aispider.com #第一种方法,你可以把当前shell当成编辑器来用,编辑完内容后Ctrl-D结束

echo “mail content”|mail -s test admin@aispider.com #第二种方法,我用的最多,可能是喜欢管道的缘故吧

mail -s test admin@aispider.com< file #第三种方法,以file的内容为邮件内.容发信

mail -s test  admin@aispider.com < file #第三种方法,以file的内容为邮件内容发信

mail -s test -c admin@aispider.com  root@aispider.com< file #第四种方法,给多个用户发送邮件

 

 3. 第三个例子,带附件的邮件

 如果你的系统里没有uuencode命令的话,请先安装sharutils(yum install  -y sharutils)

 uuencode 需要两个参数,第一个是你要发送的文件(们),当然这个也可以用管道来做,第二个是显示的文件名

 uuencode /home/yfang/a.gif a.gif|mail -s pictest admin@aispider.com

tar czf - /home/yfang/ | uuencode home.tgz |mail -s pictest admin@aispider.com

ps: 顺便补一句,slackware下的mail好像有一个-a参数,可以直接添加附件,我没有用过。

4、阅读邮件

Linux下Mail命令收集系统收到邮件都会保存在“/var/spool/mail/[linux用户名]”文件中。
在linux中输入mail,就进行了收件箱,并显示二十封邮件列表。

& help //如果不会使用或者忘记了什么命令,就输入 help 或者 ? 来获取帮助
        Mail   Commands
    t <message list>                打印出信息 【注意】多个信息用空格分开,如 t 1 7
    n                                    打印出下一条信息
    e <message list>                编辑信息
    f <message list>                输出信息的头行
    d <message list>                删除信息
    s <message list> file           追加信息到文件file
    u <message list>                不删除某信息
    R <message list>                回复发件人
    r <message list>                回复发件人和本信息所有的收件人
    pre <message list>              保留信息在 /usr/spool/mail  1*
    m <user list>                   发邮件,多个收件人用空格分开【需要sendmail支持】
    q                               quit, saving unresolved messages in mbox 2*
    x                               quit, do not remove system mailbox
    h                               print out active message headers
    !                               让shell执行某命令,如 !ls 输出ls命令结果
    cd [directory]                  改变目录,这里不用 !cd,但打印当前目录需要 !pwd
    A <message list> consists of integers, ranges of same, or user names separated
    by spaces.  If omitted, Mail uses the last message typed.
    A <user list> consists of user names or aliases separated by spaces.
    Aliases are defined in .mailrc in your home directory.


    1* 如果阅读过某信息,执行q退出时候,mail会把阅读过的信息“取回”放在 ~/mbox,执行pre后就不取回。如果退出时执行x命令则不会取回信息。
    2* 这三句不难理解,但不好翻译(本人水平问题),也就保留原文了

    所支持的全部命令列表:
    & l
    Commands are:
    next, alias, print, type, Type, Print, visual, top, touch, preserve,
    delete, dp, dt, undelete, unset, mail, mbox, more, page, More, Page,
    unread, U, !, copy, chdir, cd, save, source, set, shell, version,
    group, write, from, file, folder, folders, ?, z, headers, help, =,
    Reply, Respond, reply, respond, edit, echo, quit, list, xit, exit,
    size, hold, if, else, endif, alternates, ignore, discard, retain,
    saveignore, savediscard, saveretain, core, #, clobber

    & t 7        //阅读第7封信息,阅读时,按空格键就是翻页,按回车键就是下移一行
    & d 10     //删除第10封信息
    & d 10-100 //删除第10-100封信息
    & top      //显示当前指针所在的邮件的邮件头
    & file       //显示系统邮件所在的文件,以及邮件总数等信息
    & x          //退出mail命令平台,并不保存之前的操作,比如删除邮件
    & q         //退出mail命令平台,保存之前的操作,比如删除已用d删除的邮件,
                   //已阅读邮件会转存到当前用户家目录下的mbox文件中
                   //如果在mbox中删除文件才会彻底删除。
--------------------------------------
Linux邮件命令用法

1. 将文件当做电子邮件的内容送出
语法:mail -s “主题”用户名@地址< 文件
例如:
mail -s “program” user < file.c 将file.c

当做mail的内容,送至user,主题为program。

2. 传送电子邮件给本系统用户
语法:mail 用户名

3. 传送电子邮件至外地用户
语法: mail 用户名@接受地址
.../usr/lib/sendmail -bp
......“Mail queue is empty” ......mail ....

例如:
mailtest@hotmail.com
Subject : mail test
:
键入信文内容
: :
按下Ctrl+D 键或. 键结束正文。
连按两次Ctrl+C键则中断工作,不送此信件。
Cc( Carbon copy) : 复制一份正文,给其他的收信人。

4. 检查所传送的电子邮件是否送出,或滞留在邮件服务器中
语法:/usr/lib/sendmail -bp
若屏幕显示为“Mail queue is empty” 的信息,表示mail 已送出。
若为其他错误信息,表示电子邮件因故尚未送出。

=================================

mail、Mail 或 mailx 命令

用途

发送和接收邮件。
语法
读取新来的邮件

mail -e

mail -f [ -dHNn ] [ -F ] [ FileName ]

mail [ -dHNn ] [ -F ] [ -u UserID ]
发送邮件

mail [ -s Subject ] [ -c Address(es) ] [ -dinNv ] Address
描述

mail 命令调用邮件实用程序,使您能够:

    * 读取新来的邮件。
    * 发送邮件。

另外,可以使用可用的选项和子命令来定制您发送和接收邮件的方法。

mail 命令可用于系统邮箱和个人邮箱两类邮箱。

新来的邮件存储在系统邮箱内。缺省情况下,用户的系统邮箱是位于 /var/spool/mail 目录中的一个文件。邮箱文件以用户标识命名。例如,如果用户标识是 jeanne,那么系统邮箱是 /var/spool/mail/jeanne。

缺省情况下,当用户读取、删除或保存在其系统邮箱内的所有邮件时,邮箱被删除。要不删除邮箱,请使用 set 子命令来设置 keep 选项。
标志
-c Address(es)         指定要向其发送消息副本的用户列表。可以指定一个或多个地址。当指定多于一个地址时,地址列表必须在引号("")内。
-e         测试系统邮箱内是否有邮件。如果存在要读取的邮件,mail 实用程序不会写入任何东西并带一个成功返回码而退出。
-f FileName         从指定的文件读取消息。如果没有指定文件操作数,那么从 mbox 读取消息。从读取消息退出时,未删除的消息会写到这个文件中。
-F         将消息记录在以收件人命名的文件中。该名称是在邮件标题中 To: 行的地址的最前部分。如果设置则覆盖 record 变量。
-H         仅写标题摘要。
-i         忽略 tty 中断信号。
-n         禁止读取 /usr/share/lib/Mail.rc 文件。
-N         禁止标题的初始打印。
-s Subject         指定将创建的消息的主题。
-u UserID         指定与执行 mail -f /var/spool/mail/UserID 等同的缩写。为指定的用户的邮箱启动 Mail 程序。必须有指定邮箱的访问许可权。
-v         将 Mail 程序置为详细方式。显示传送到用户终端的详细信息。

示例

   1. 要启动 Mail 程序并列出邮箱中的消息,请在命令行提示符下输入以下信息:

      mail

      mail 命令列出在系统邮箱中的每条消息。邮件系统然后显示邮箱提示符(?)来表示等待输入。当您看到此提示符时,请输入邮箱子命令。要查看子命令列表,请输入:
      ?

      本条目列出 Mail 子命令。
   2. 要将消息 letter 发送到收件人 user1@host1 并抄送给 user2@host2 和 user3@host3,请输入:

      mail -c "user2@host2 user3@host3" user1@host1<letter

   3. 要查看个人邮箱的内容,请输入:

      mail -f

      此命令显示在个人邮箱 $HOME/mbox 中的消息列表。
   4. 要查看指定邮件文件夹的内容,请输入:

      mail -f +dept

      此命令显示在 dept 文件夹中的消息列表。
   5. 要将消息发送到本地系统的用户,请输入:

      mail ron

      完成将消息输入到用户 ron 时,按 Enter 键以及 .(句号)或 Ctrl+D 来退出编辑器并发送消息。要确定某用户是否在本地系统,请在 /etc/passwd 文件中查看该用户名。

      如果消息成功发送,将不会收到通知。如果消息无法发送,将发送给您一个错误信息。
   6. 要将一个文件通过邮件发送到本地系统的另一位用户,请输入:

      mail karen < letter1

      此命令将文件 letter1 的内容发送到本地系统的用户 karen。命令发送文件后,Mail 程序显示命令行提示符。
   7. 要将消息发送到一个远程系统用户,请输入:

      mail dale@zeus

      现在可以创建一个到 dale 的消息。在本示例中,发送消息到远程系统 zeus 上的 dale 用户。要将消息发送到通过网络连接到您的系统的另一个系统上的用户,您必须知道那个人的登录标识和另一个系统的名称。

分类: linux

    A+
发布日期:2017年07月06日  所属分类:未分类

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: