ubuntu下搭建邮件收发服务器

搭建邮件收发服务器

搭建发邮件服务器

安装postfix

1
apt-get install postfix

修改postfix配置文件

vim /etc/postfix/main.cf

1
2
3
4
5
6
7
8
# 修改服务器域名
mydomain = example.com

# 对所有IP地址提供服务
inet_interfaces = all

# 提供服务类型,这里只讨论邮件发送
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,mail.$mydomain

重启postfix

1
2
systemctl enable postfix
systemctl restart postfix

本地测试修改域名解析

修改DNS服务器,因为我们发送邮件需要域名服务,如何配置DNS服务器请查看本人博客,DNS服务器中记录example.com一定要指向本机,否则邮件服务器不能发送邮件到指定域

我们测试使用修改hosts文件,打开/etc/hosts文件添加下面两行

1
2
127.0.0.1 mail.example.com
127.0.0.1 example.com

安装mail命令

1
apt-get install mailutils

添加测试账户

1
2
3
4
useradd -m -s /bin/bash mailuser1
passwd mailuser1
useradd -m -s /bin/bash mailuser2
passwd mailuser2

发送邮件

1
echo 'Here is the message body.' | mail -s "Test email from ubuntu server!" -r mailuser1@example.com  mailuser2@example.com

切换用户查看邮件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
su - mailuser2
mailuser2@ubuntu:~$ mail
"/var/mail/mailuser2": 1 message 1 new
>N 1 root Tue Dec 22 17:30 13/465 Test email from ubuntu server!
?
Return-Path: <mailuser1@example.com>
X-Original-To: mailuser2@example.com
Delivered-To: mailuser2@example.com
Received: by ubuntu (Postfix, from userid 0)
id 52C4B7FDE2; Tue, 22 Dec 2020 17:30:55 +0800 (HKT)
Subject: Test email from ubuntu server!
To: <mailuser2@example.com>
X-Mailer: mail (GNU Mailutils 3.4)
Message-Id: <20201222093055.52C4B7FDE2@ubuntu>
Date: Tue, 22 Dec 2020 17:30:55 +0800 (HKT)
From: root <mailuser1@example.com>

Here is the message body.

postfix不支持远程读取邮件功能,所以邮件只能在服务器端打开,dovecot可以远程接收服务器中的邮件, 下面介绍如何安装和使用dovecot

搭建收邮件服务器

安装 dovecot

1
2
3
4
# Dovecot 是一个开源的 IMAP 和 POP3 邮件服务器
# POP / IMAP 是 MUA 从邮件服务器中读取邮件时使用的协议。
# 其中,与 POP3 是从邮件服务器中下载邮件存起来,IMAP4 则是将邮件留在服务器端直接对邮件进行管理、操作。
apt-get install dovecot-common dovecot-imapd dovecot-pop3d

配置dovecot

测试不使用SSL,我们把配置文件中的关于安全的都关掉

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# /etc/dovecot/dovecot.conf
# 允许任何网络登录
login_trusted_networks = 0.0.0.0/0


# /etc/dovecot/conf.d/10-auth.conf
# 确保下面这行是注释状态
# disable_plaintext_auth = yes

# /etc/dovecot/conf.d/10-ssl.conf
# 确保不启用ssl
ssl = no

# /etc/dovecot/conf.d/10-mail.conf
# 确保本地邮件接收路径
mail_location = mbox:~/mail:INBOX=/var/mail/%u
# 默认下面这行没有注释
mbox_write_locks = fcntl

# 切换到各个用户下创建用户邮件目录
su - $user
mkdir -p mail/.imap/INBOX

重启dovecot服务

1
2
systemctl enable dovecot
systemctl restart dovecot

测试

发送邮件

1
echo 'Here is the message body.' | mail -s "Test email from ubuntu server!" -r mailuser1@example.com  mailuser2@example.com

登录到其他机器,使用telnet收邮件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 登录到其他服务器
ssh root@172.16.3.225
# 使用telnet收邮件
telnet 172.16.3.226 110
Trying 172.16.3.226...
Connected to 172.16.3.226.
Escape character is '^]'.
+OK [XCLIENT] Dovecot (Ubuntu) ready.
user mailuser2
+OK
pass 123456
+OK Logged in.
list
+OK 1 messages:
1 478
.
retr 1
+OK 478 octets
Return-Path: <mailuser1@example.com>
X-Original-To: mailuser2@example.com
Delivered-To: mailuser2@example.com
Received: by ubuntu (Postfix, from userid 0)
id 52C4B7FDE2; Tue, 22 Dec 2020 17:30:55 +0800 (HKT)
Subject: Test email from ubuntu server!
To: <mailuser2@example.com>
X-Mailer: mail (GNU Mailutils 3.4)
Message-Id: <20201222093055.52C4B7FDE2@ubuntu>
Date: Tue, 22 Dec 2020 17:30:55 +0800 (HKT)
From: root <mailuser1@example.com>

Here is the message body.
.
quit
+OK Logging out.
Connection closed by foreign host.
# 收取邮件成功

telnet发送邮件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
通过 SMTP 协议发送邮件的整体过程如下:
客户端使用 telnet 命令连接到SMTP服务器,建立会话。
客户端发送一个 HELO 或 EHLO 命令。
客户端发送一个 AUTH 认证命令进行用户登录(使用 smtpd 方式)。
客户端发送一个 MAIL 命令指定发件人。
客户端发送一个 RCPT 命令指定收件人。
客户端发送一个 DATA 命令准备输入邮件正文。
客户端发送一个 . 命令(点命令)表示 DATA 命令结束。
客户端发送一个 QUIT 命令结束会话。

telnet mail.example.com 25
helo example.com
mail from:mailuser1@example.com
rcpt to:mailuser2@example.com
data
subobject: <Test email from ubuntu server!>
Here is the message body.
.<回车结束>

quit

img

telnet接收邮件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

邮件的接收这里是基于pop3协议的,pop3协议共定义了12条与接收相关的邮件,如下面简单解释:

首先是与登陆验证相关的几条命令:

1,user 收件人帐户名称(有时候需要加后面的域名有时候却不要,好象不同的服务器要求不同,自己试吧)

2,pass 密码,这里是明码

3,apop 以MD5数字形式提交帐户和密码,以“,”分开,是第二种登陆方式

再就是登陆后操作邮件的一些命令:

4,stat 查询邮箱中的所有邮件的统计信息,一般只有邮件总数和所有邮件占用的字节大小

5,uidl 根据邮件的序号查询该邮件的唯一标志符

6,list 查询邮箱中的所有邮件信息,以列表形式列出,自动生成邮件序号。如果指定某一序号则只显示指定邮件信息

7,retr 指定邮件序号查看某邮件内容

8,dele 指定邮件序号将某封邮件设置删除标记,当执行退出命令 quit时将实际删除所有具有删除标记的邮件

9,rset 清除所有设置了删除标记的邮件的删除标记

10,top 获取某邮件的邮件头和邮件体中的前n行内容,指定邮件序号和n,以空格符隔开

连接状态命令与退出命令:

11,noop 查询与pop3服务器的连接状态

12,quit 断开连接并退出
关于pop3服务器的响应,响应为 +OK 则为正确,响应为 -ERR 则为错误

ubuntu下搭建邮件收发服务器
http://example.com/2021/10/21/搭建邮件收发服务器/
作者
John Doe
发布于
2021年10月21日
许可协议