热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Ubuntu16.04上安装并配置Postfix作为只发送SMTP服务器

如果大家已经在使用第三方邮件服务方案发送并收取邮件,则无需运行自己的邮件服务器。然而,如果大家管理一套云服务器,且其中安装的应用需要发送邮件通知,那么运行一套本地只发送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命令发送邮件就正常了

 

推荐阅读
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • PreparedStatement防止SQL注入
    添加数据:packagecom.hyc.study03;importcom.hyc.study02.utils.JDBCUtils;importjava.sql ... [详细]
  • destoon会员注册提示“数据校验失败(2)”解决方法【PHP】
    后端开发|php教程destoon,会员注册,数据校验失败,后端开发-php教程很多人在使用destoon建立一个B2B系统的时候,会在企业站注册企业用户的时候出现:“数据校验失败 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • Ubuntu 用户安装 Linux Kernel 3.15 RC1
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • linux服务器时间同步失败解决方法
    linux服务器时间同步失败解决方法1、为什么会时间不同步:①计算机的时间是根据电脑晶振以固定频率震荡而产生的,由于晶振的不同或者老化,会 ... [详细]
author-avatar
joyjz
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有