在没有SMTP服务器的情况下在Linux中发送邮件的方法

295 阅读4分钟

通常情况下,要发送电子邮件,你需要一个smtp服务器或连接到一个服务器。让我们使用Postfix来绕过这一需要。基本上,Postfix是一个免费的、开源的邮件传输代理(MTA),用于路由和发送电子信件。让我们开始吧。

apt-get update
# install postfix
apt-get install postfix

当你继续安装时,会出现Postfix的提示。这里有一些需要注意的信息。

  • 邮件配置的一般类型? :选择Internet Site - 这符合我们的基础设施需求。
  • 系统邮件名称:输入你的FQDN,即:example.com - 这是用于构建有效的电子邮件地址的基础域,当只给出账户部分的地址。如果我们服务器的主机名是mail.example.com,我们希望系统邮件名是example.com ,这样,给定一个user ,postfix将使用这个地址user@example.com
  • Root and postmaster mail recipient: 这是一个Linux账户,它将被转发到root@postmaster@ 的邮件。使用你的主账户来做这个。
  • 其他接受邮件的目的地。这定义了这个Postfix实例将接受的邮件目的地。如果你需要添加任何其他该服务器将负责接收的域,请在这里添加,否则,默认情况下应该可以正常工作。
  • 强制对邮件队列进行同步更新?: 没有
  • 本地网络。应该是127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 这是你的邮件服务器被配置为转发邮件的网络列表。默认值应该适用于大多数情况。如果你选择修改它,请确保对网络范围的限制非常严格。
  • 信箱大小限制:这可以用来限制邮件的大小。把它设置为 "0",可以禁用任何大小限制。
  • 使用的互联网协议。选择是否要限制Postfix支持的IP版本。为了我们的目的,我们将选择 "所有"。

检查它是否已经安装:telnet localhost 25 。如果没有,用sudo postfix start 启动 postfix 。

现在,让我们来配置postfix。根据你的条目,你可能不需要修改这些。检查一下这些设置。

myhostname: example.com - 这是你的机器的主机名,但不要放完整的主机名。如果你的机器主机名是mail.mydomain.com,你将只使用mydomain。把你的FQDN放在这里,比如 "example.com"

**virtual_alias_map。**如果你想配置邮件转发到其他域,或者希望投递到与系统账户没有1对1映射的地址,我们可以删除alias_maps参数,用virtual_alias_maps来代替它。然后我们需要将哈希值的位置改为/etc/postfix/virtual。virtual_alias_maps = hash:/etc/postfix/virtual

mydestination:-mydestination = $myhostname, localhost.$mydomain, $mydomain 这个参数指定了这台机器将在本地交付哪些目的地。你可以使用默认值。这应该是根据你输入的FQDN来配置的。对于将邮件转发到你的服务器以外的其他地址,这不是必需的,只需要virtual_alias_domainsvirtual_alias_maps 。如果你想在这个服务器中接收邮件,如果这一行导致错误,你可能需要注释这一行。

mynetworks。-mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 这个条目将定义邮件可以被转发的授权目的地。这定义了能够使用这个邮件服务器的计算机。它应该只设置为本地(127.0.0.0/8和其他代表)。修改这一点,允许其他主机使用,是一个巨大的漏洞,可能导致极端的垃圾邮件案例。这应该是自动设置的,但它应该是这样的。mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

**mydomain:**如果你的邮件服务器向你的整个域名提供邮件,你将需要添加另一个条目,类似于mydomain = mydomain.com

一旦你安顿好了,用以下方法重启Postfixsystemctl restart postfix

安装mail 和其他实用程序。apt-get install mailutils

然后你就完成了!现在,试试发送邮件吧echo "This is the body of the email" | mail -s "This is the subject line" -r from@example.org to@recipient.com

请注意,你可能需要改变你的计算机主机名,以匹配你输入的主机名。请查看这个链接,了解如何做到这一点。

现在,让我们试试将电子邮件账户映射到linux系统账户。在postfix配置中追加virtual_alias_maps 的设置。

postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'

编辑/etc/postfix/virtual ,像这样将电子邮件映射到系统用户名。

contact@example.com joe
admin@example.com jane

应用映射的方法postmap /etc/postfix/virtual

重新启动postfix。systemctl restart postfix

注意:你可以在发送邮件时通过添加-a 参数来改变邮件标题。比如说。

echo "body of email" | mail -s "Subject Line" -a "From: Admin Name <noreply@example.org>" mail@recipient.com