Ubuntu 16.04上安装并配置Postfix作为只发送SMTP服务器
如果大家已经在使用第三方邮件服务方案发送并收取邮件,则无需运行自己的邮件服务器。然而,如果大家管理一套云服务器,且其中安装的应用需要发送邮件通知,那么运行一套本地只发送SMTP服务器则更为理想。
如何安装并配置Postfix以作为只发送SMTP服务器。
先决条件
要完成教程,大家需要:
- 一套Ubuntu 16.04 Droplet,具体参阅Ubuntu 16.04初始设置指南,其中包括创建一个拥有sudo权限的非root用户。
 - 一个指向服务器的有效域名,例如example.com,具体请参阅主机名称指南
 
请注意,我们的服务器主机名称应当与域名或者子域名相匹配。大家可以在命令提示中输入hostname验证服务器的主机名称。输出结果应当与Droplet创建时我们为其提供的名称相匹配。
第一步——安装Postfix
在此步骤中,我们将了解如何安装Postfix。在这里,我们选择最为高效的安装方式,即安装mailutils软件包。
首先更新该软件包数据库:
sudo apt-get update
安装mailtuils将安装Postfix以及其它一些Postfix所必需的程序。
sudo apt install mailutils
在安装过程末尾,大家会看到如下图所示的屏幕,其中默认选项为Internet Site。本教程亦推荐该默认选项,因此按下TAB再按回车。
在此之后,大家会看到另一个容器,如下所示。System邮件名称应该与我们在创建服务器时为其分配的名称保持一致。如果其显示subdomain.example.com这样的子域名,则将其变更为example.com。完成后,按下TAB再按回车。
第二步——配置Postfix
在这里,我们需要配置Postfix,要求其仅处理运行所在服务器上的邮件,即localhost。
Postfix需要在配置中监听loopbackinterface,即该服务器用于内部通信的虚拟网络接口。要实现变更,打开主Postfix配置文件:
sudo nano /etc/postfix/main.cf
打开之后,找到以下部分:
/etc/postfix/main.cf . . . 
  mailbox_size_limit = 0 
  recipient_delimiter = + 
  inet_interfaces = all
将inet_interfaces = all行变更为inet_interfaces = loopback-only。
  inet_interfaces = loopback-only
另外我们还需要修改mydestination指令,其用于指定通过local_transport邮件交付传输进行交付的域名列表。在默认情况下,其值如下所示:
  mydestination = $myhostname, example.com, localhost.com, , localhost
此场景下的推荐默认值如下所示,请大家根据实际情况进行修改:
  mydestination = $myhostname, localhost.$mydomain, $mydomain
保存并退出。
如果大家在单一服务器上托管多个域名,则其它域名同样可以利用mydestination指令被发送至Postfix。
最后,重启Postfix。
sudo systemctl restart postfix
第三步——测试SMTP服务器
在这里,我们将测试Postfix是否能够利用mail命令向外部邮件账户发送邮件。
发送测试邮件:
echo “This is the body of the email” | mail -s “This is the subject line” your_email_address
在执行测试时,大家可能需要使用对其中的对应部分进行调整,从而满足自己的实际情况。
现在检查发送测试消息的目标邮箱地址。大家应该能够在收件箱中看到对应消息——如果没有,请检查垃圾邮件箱。
注意,在此配置中,From字段内的地址应为sammy@example.com,其中sammy为Linux用户名,而域名部分则为该服务器的主机名称。如果大家变更用户名,则其中的From地址也应当对应变更。
第四步——转发系统邮件
最后设置转发机制,这样我们就能够将指向系统root的邮件转发至自己的个人外部邮箱了。
要实现这一功能,我们需要编辑/etc/aliases文件。
- sudo nano /etc/aliases
 
此文件的默认内容如下:
  /etc/aliases 
  # See man 5 aliases for format
   postmaster: root
在此设定下,系统生成的邮件会被发送至root用户。这里我们需要将其重新路由至自己的邮箱,变更后为:
  /etc/aliases 
  # See man 5 aliases for format 
  postmaster: root 
  root: your_email_address
运行以下命令使变更生效:
- sudo newaliases
 
再次发送邮件以进行测试:
- echo “This is the body of the email” | mail -s “This is the subject line” root
 
大家应该能够正常收取到邮件。
总结
这就是Postfix只发送邮件服务器的全部设置流程。大家可能还需要采取一些额外步骤来保护自己的域名免受垃圾邮件打扰。
如果大家在单一地址接收来自服务器的通知,那么大家可能需要将其纳入白名单以避免其被列为垃圾邮件。不过,如果大家希望向潜在站点用户发送邮件,则应当设置SPF记录及以确保服务器邮件合法性。
一台服务器检查程序需要将检查结果自动发送给指定邮箱,想当然的使用mail命令,结果在测试时发现有错误:
mail: cannot send message: process exited with a non-zero status
其没有提到明确的问题,但从其中提出的/var/log/有两个log都记录了对应的信息,即syslog和mail.err。mail.err中的信息更明确:
postfix/sendmail[27115]: fatal: open /etc/postfix/main.cf: No such file or directory
然后意识到这台服务器安装完成后并没有配置postfix服务,于是重新配置:
sudo dpkg-reconfigure postfix
 
然后再使用mail命令发送邮件就正常了
 												
											Ubuntu 16.04上安装并配置Postfix作为只发送SMTP服务器的更多相关文章
- 如何在Ubuntu 16.04上安装配置Redis
		
如何在Ubuntu 16.04上安装配置Redis Redis是一个内存中的键值存储,以其灵活性,性能和广泛的语言支持而闻名.在本指南中,我们将演示如何在Ubuntu 16.04服务器上安装和配置Re ...
 - 在 Ubuntu 16.04上安装 vsFTPd
		
在 Ubuntu 16.04上安装 vsFTPd Ubuntu vsFTPd 关于 vsFTPd vsFTPd 代表 Very Secure File Transfer Protocol Daemon ...
 - 如何在Ubuntu 18.04上安装和配置Apache 2 Web服务器(转)
		
如何在Ubuntu 18.04上安装和配置Apache 2 Web服务器 什么是Apache Web Server? Apache或Apache HTTP服务器是一个免费的开源Web服务器,由Apac ...
 - Ubuntu 16.04上安装SkyEye及测试
		
说明一下,在Ubuntu 16.04上安装SkyEye方法不是原创,是来自互联网,仅供学习参考. 一.检查支持软件包 gcc,make,vim(optional),ssh,subversionbinu ...
 - Ternsorflow 学习:000-在 Ubuntu 16.04 上安装并使用 TensorFlow_v1.14 (改)
		
声明:本人已经对原文链接根据情况做出合理的改动. 本系列文章使用的是Tensorflow v1.14 引言 TensorFlow 是由谷歌构建的用于训练神经网络的开源机器学习软件.TensorFlow ...
 - 在 Ubuntu 16.04 上安装 Eclipse Oxygen
		
2017 年 6 月 28 日,Eclipse 社区(the Eclipse Community)发布了 Eclipse Oxygen.本文记录了我在 Ubuntu 16.04 上安装 Eclipse ...
 - 如何在Ubuntu 16.04上安装Apache Web服务器
		
转载自:https://www.howtoing.com/how-to-install-the-apache-web-server-on-ubuntu-16-04 介绍 Apache HTTP服务器是 ...
 - 如何在Ubuntu 16.04上安装Nginx
		
原文链接https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-16-04 介绍 Nginx是世 ...
 - ubuntu 16.04上安装php5.6
		
php --ini 按下面的步骤,在ubuntu 16.04上面安装成功了 php5.6 dpkg -l | grep php| awk '{print $2}' |tr "\n" ...
 
随机推荐
- 从刷票了解如何获得客户端IP
			
我的个人博客,源地址:http://www.woniubi.cn/get_client_ip/ 前两个星期帮一个朋友的亲戚的孩子刷票,谁让咱们是程序员呢.这当中也遇到过重装系统,除灰尘,淘宝购物,盗Q ...
 - Python开发环境Wing IDE如何使用GTK和PyGObject
			
Wing IDE是一个集成开发环境,可用于编辑.测试和调试使用PyGObject为GTK编写的Python代码.Wing IDE提供自动完成.调用提示.一个强大的调试器,以及许多其他功能,可帮助用户编 ...
 - 微信公众平台开发——helloworld
			
威信公众平台有两种模式:编辑模式 和 开发模式. 普通的功能可以通过编辑模式来搞定.开发模式具有更多的功能.让我们来使用开发模式开发helloword吧 步骤如下: 1.先注册一个公众号(https: ...
 - JavaScript如何转换数据库DateTime字段类型?
			
Javascript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在html(标 ...
 - PHP: 打印post数据,返回长度不为1但内容为空的问题
			
问题: 首先,html长这样: 我们可以看到textarea标签的name值为cten,那么我们进行查看Post是否能够正常获取到数据: 后台进行获取: 结果:我们可以正常获取到数据 接下来,我们进行 ...
 - Cydia  Tweak--Cydia Substrate
			
http://www.jianshu.com/p/8982e9670fc6 Cydia Substrate.MobileHooker MSHookMessageEx MSHookFunction Mo ...
 - 表面积最小(POJ3536)
			
题目链接:http://poj.org/problem?id=3536 在体积固定的情况下,表面积最小时的长,宽,高. 这里枚举长,宽,根据体积计算高. #include <iostream&g ...
 - android build.prop详解
			
# begin build properties开始设置系统性能 # autogenerated by buildinfo.sh{通过设置形成系统信息} ro.build.id=MIUI(版本ID) ...
 - AngularJS 控制器其他实例
			
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
 - background-position设置
			
设置背景图片的位置:background-position:x y; 其中x和y可以为百分比也可以为像素