基本电子邮件发送
电子邮件发送:
服务器使用SMTP协议将电子邮件提交至TCP端口25,或由本地客户端通过/usr/bin/sendmail程序进行提交。如果该MTA是最终目标位置,邮件将传递至MDA。否则,将使用MX记录在DNS中查找下一个MTA,并使用SMTP进转发。
MDA:“邮件发送代理”。MDA将邮件发送至收件人的本地邮件存储位置(默认情况下是/var/spool/mail/user)。Postfix提供自己的MDA,以发送至基于文件的本地默认邮件存储位置/usr/libexec/postfix/local。
转发:电子邮件服务器(MTA)将提交的邮件转发至另一个服务器,以进行发送排队:失败的发送或转发尝试排队等待,并由MTA定义重试。(默认情况下,Postfix每小时执行此操作一次)。
拒绝:在首次提交期间,电子邮件被电子邮件服务器拒绝
退回:远程服务器接受电子邮件以进行发送以后,又将该电子邮件退回给始发电子邮件服务器和/或用户电子邮件以进行发送以后,又将该电子邮件退回给始发电子邮件服务器和/或用户。
Postfix由postfix RPM包提供,并通过postfix服务脚本控制。它是一个由多个协同操作程序构成的模块化程序它,的组件由master进程控制。
Postfix的主配置文件是/etc/postfix/main.cf,可以使用文本编辑器或postconf命令进行编辑。postconf命令还可用于确定Postfix的所有当前和默认配置设置或逐项确定这些设置。
默认情况下,Postfix仅侦听来自本地主机的传入电子邮件。若要重新配置postfix以接收从远程主机发
送的本地邮件,必须在/etc/postfix/main.cf中设置inet_interfaces = all.
对电子邮件进行故障排除时,将在/var/log/maillog中保留所有与邮件相关的操作日志,其中包括关于
被事件和成功事件的信息。mailq命令(或postqueue -p)显示已排队的所有传出邮件的列表。若要尝试
再次立即发送所有已排队的邮件,可以运行postfix flush命令(或postqueue -f);否则,postfix将大
约每小时尝试重新发送一次,直至邮件被接受或过期。
重要的Postfix配置指令:
可以在/etc/postfix/main.cf文件中找到以下所有指令。
myorigin
重写本地发布的电子邮件,使其显示为来自该域。这样有助于确保响应返回入站邮件服务器.
默认:myorigin = $myhostname
inet_interfaces
控制Postfix侦听传入电子邮件的网络接口。如果设置为loopback-only,仅侦听127.0.0.1和::1,
如果设置为all,则侦听所有网络接口。还可以指定特定地址。
默认:inet_interfaces = localhost
mydestination
收到地址为这些域的电子邮件将传递至MDA,以进行本地发送。
默认:mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks
IP地址和网络的逗号分隔列表(采用CIDR表示法)。这些地址和网络可以通过此MTA转发至
任何位置,无需进一步身份验证。
默认:mynetworks = 127.0.0.0/8
relayhost
relayhost转发所有通过的出站邮件。通常用方括号指定,以阻止MX记录查找。
默认:relayhost =local_transport
收件地址为$mydestination的邮件的发送方式。默认情况下,设置为local:$myhostname(使用Local MDA将传入电子邮件发送到/var/spool/mail中的本地邮件存储位置).
默认:local_transport = local:$myhostname
postconf -d ##显示默认值。
postconf -n ##显示不同于默认值的更改。
postfix(用来发送邮件)
1.postfix提供smtp协议用来投递邮件
默认端口25/var/log/maillog ##服务日志
mail root@westos.com
Subject:hello
hello world
. ##用"."来结束录入内容并发送
mailq ##查看邮件队列
postqueue -f ##重新处理邮件队列
默认情况下邮件端口只在127.0.0.1上开启
2.
配置
vim /etc/postfix/main.cf
76 myhostname = westos-mail.westos.com ##指定mta主机名称
83 mydomain = westos.com ##指定mta的域名
99 myorigin = westo.com ##指定邮件来源结尾(@后面的字符内容)
116 inet_interfaces = all ##25端口开启的网络接口
systemctl restart postfix.service ##重启postfix服务
systemctl stop firewalld ##关闭防火墙
3.
邮件别名
编辑配置文件:
vim /etc/aliases
别名: 真名 ##邮件别名别名: :include:filename ##邮件群发
vim filename
user1
user2
postalias /etc/aliases
mail 别名
4.
通过远程主机发送邮件
[Kiosk@foundation180 Desktop]$ telnet 172.25.254.180 25
Trying 172.25.254.180...
Connected to 172.25.254.180.
Escape character is '^]'.
220 westos-mail.westos.com ESMTP Postfix
ehlo hello
250-westos-mail.westos.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:root@westos.com
250 2.1.0 Ok
rcpt to:root@qq.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
adsf
asdf
asdf
.
5.
在mta上
postconf -e "smtp_client_restrictions = check_client_access hash:/etc/postfix/access" ##做hash加密
编辑配置文件,将要拒绝岁的用户的ip写入:
172.25.254.80 REJECT
postfix /etc/postfix/access
systemctl restart postfix ##重启服务
测试
[root@foundatio80 ~]#telnet 172.25.254.180 25
Trying 172.25.254.180 ...
Connected to 172.25.254.180
Escape character is '^]'.
220 westos-mail.westos.com ESMTP Postfix
mail from:root@westos.com
250 2.1.0 ok
rcpt to:root@qq.com
554 5.7.1 <unknow[172.25.254.22]>: Client host rejected:Access denied
6.
限制用户发送
postconf -e "smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender" ##做hash加密
编辑配置文件,将要拒绝的用户的域名写入:
vim /etc/postfix/sender
student@westos.com REJECT
postmap /etc/postfix/sender
systemctl restart postfix ##重启服务
测试
[kiosk@foundation80 Desktop]$ telnet 172.25.254.180 25
Trying 172.25.254.180...
Connected to 172.25.254.180.
Escape character is '^]'.
220 westos-mail.westos.com ESMTP Postfix
mail from:student@westos.com
250 2.1.0 Ok
rcpt to:root@westos.com
554 5.7.1 <student@westos.com>: Sender address rejected: Access denied
7.
限制用户接收
postconf -e "smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/recip" ##hash加密
编辑配置文件,将要拒绝的用户的域名写入:
vim /etc/postfix/recip
westos@westos.com REJECT
postmap /etc/postfix/recip
systemctl restart postfix ##重启服务
测试
[kiosk@foundation80 Desktop]$ telnet 172.25.254.180 25
Trying 172.25.254.180...
Connected to 172.25.254.180.
Escape character is '^]'.
220 westos-mail.westos.com ESMTP Postfix
mail from:westos@westos.com
250 2.1.0 Ok
rcpt to:root@westos.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
adsf
adsf
asdf
.
250 2.0.0 Ok: queued as DE17D2461EA
qiut
502 5.5.2 Error: command not recognized
mail from:root@westos.com
250 2.1.0 Ok
rcpt to:westos@westos.com
554 5.7.1 <westos@westos.com>: Recipient address rejected: Access denied
8.
出站地址伪装
postconf -e "smtp_generic_maps = hash:/etc/postfix/generic" ##做hash加密
编辑配置文件,将要伪装的域名写入,真域名写在前,伪装后的域名写在后:
vim /etc/postfix/generic
westos@westos.com hello@sb.com
postmap /etc/postfix/generic
systemctl restart postfix
测试
su - westos
mail root@qq.com
9.
入战地址转换
dns mx 记录解析先做好
postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual" ##做hash加密
编辑配置文件,按如下格式写入:
vim /etc/postfix/virtual
虚拟名字 真实用户
hello@sb.com westos@westos.com
postmap /etc/postfix/virtual
systectl restart postfix
测试
mail hello@sb.com
dovecot
1.
dovecot 用来提供收件协议
pop3 110
imap 143
imaps 993
pop3s 995
给定用户名称,用户密码,dovecot程序带我们去看这个用户的邮件文件
2.
yum install dovecot -y ##安装
3.
编辑以下两个配置文件,并做如下修改:
vim /etc/dovecot/dovecot.conf
24 protocols = imap pop3 lmtp
48 login_trusted_networks = 0.0.0.0/0
49 disable_plaintext_auth = no
vim /etc/dovecot/conf.d/10-mail.conf
30 mail_location = mbox:~/mail:INBOX=/var/mail/%u
systemctl restart dovecot ##重启服务
[westos@qq-mail ~] $ mkdir mail/.imap/ -p
[westos@qq-mail ~] $ touch mail/.imap/INBOX
测试:
[kiosk@foundation80 Desktop] $ mutt -f pop://westos@172.25.254.180
postfix和mysql
1.
编辑配置文件,并作如下修改:
vim /etc/postfix/mailuser.cf ##用户名称查询
host = localhost ##数据库所在主机
user = postuser ##登陆数据库的用户
password = postuser ##登陆数据库的密码
dbname = email ##postfix要查询的名称
table = emailuser ##postfix要查询的表的名称
select_field = username ##postfix要查询的字段
where_field = username ##用户给定postfix的查询条件
vim /etc/postfix/maildomain.cf ##用户域名查询
host = localhost ##数据库所在主机
user = postuser ##登陆数据库的用户
password = postuser ##登陆数据库的密码
dbname = email ##postfix要查询的名称
table = emailuser ##postfix要查询的表的名称
select_field = domain ##postfix要查询的域名
where_field = domain ##用户给定postfix的查询条件
vim /etc/postfix/maildomain.cf ##用户邮箱位置查询
host = localhost ##数据库所在主机
user = postuser ##登陆数据库的用户
password = postuser ##登陆数据库的密码
dbname = email ##postfix要查询的名称
table = emailuser ##postfix要查询的表的名称
select_field = maildir ##postfix要查询的邮箱
where_field = username ##用户给定postfix的查询条件
postmap -q "abc@abc.com" mysql:/etc/postfix/mailuser.cf
abc@abc.com
postmap -q "abc@abc.com" mysql:/etc/postfix/maildomain.cf
abc.com
postmap -q "abc@abc.com" mysql:/etc/postfix/mailbox.cf
/mnt/abc.com/abc
配置postfix
groupadd -g 888 vmail
useradd -s /sbin/nologin -u 888 vmail -g 888
postconf -e ""virtual_mailbox_base = /home/vmail" ##设定虚拟用户的邮件目录
postconf -e ""virtual_uid_maps = static:888" ##虚拟机用户建立文件的uid
postconf -e ""virtual_alias_maps = mysql:/etc/postfix/mailuser.cf"
postconf -e ""virtual_mailbox_domain = mysql:/etc/postfix/maildomain.cf"
postconf -e ""virtual_mailbox_maps = mysql:/etc/postfix/mailbox.cf"