仅限本地的 sendmail,将所有邮件发送到目录

仅限本地的 sendmail,将所有邮件发送到目录

我有一个开发 Ubuntu Server (12.04.1) VM,用于开发 php 网站和电子商务网站(如 Magento 等)。

因为这是为了开发目的,而且我需要使用自己的电子邮件地址以外的其他电子邮件地址进行测试,所以我需要一种方法让 sendmail 命令接受邮件但实际上并不传递它,而是将其存档在某个我可以查看的地方。

安装邮件服务器的最简单方法是什么,以便 sendmail 命令将所有邮件路由到本地目录?即我不希望任何邮件传递到互联网。

我尝试了这个问题中讨论的步骤(SMTP 服务器将所有邮件发送到 user@localhost),但它似乎不起作用——我在我的(本地)邮箱中收到一条错误消息,告诉我它无法发送我的测试邮件(例如[电子邮件保护]

答案1

回答我自己的问题,使用后缀是可能的。你必须做两件事:

  1. 添加在中讨论的配置选项SMTP 服务器将所有邮件发送到 user@localhost,将以下内容添加到您的 /etc/postfix/main.cf 文件中:

    luser_relay = MYLOCALUSER@localhost
    local_recipient_maps =
    
  2. 使用 serverfault 上的以下答案(https://serverfault.com/questions/133190/host-wildcard-subdomains-using-postfix),我添加了以下内容(请注意,您需要安装 postfix-pcre 包):

    在 /etc/postfix/main.cf 中:

     mydestination = pcre:/etc/postfix/mydestinations
    

    在 /etc/postfix/mydestinations 中

    /.*/         ACCEPT
    

这会将 Postfix 处理的所有邮件发送给 #1 中定义的配置的本地用户,因此除了开发之外,不要将其用于任何其他用途。

答案2

“因为这是为了开发目的,而且我需要用我自己的电子邮件地址以外的电子邮件地址进行测试,所以我需要一种方法让 sendmail 命令接受邮件但实际上并不传递它,而是将其存档在某个我可以查看的地方。”

您仍然需要交付它。您只需要覆盖交付的“位置”。

“安装邮件服务器的最简单方法是什么,以便 sendmail 命令将所有邮件路由到本地目录?即,我不希望任何邮件传递到互联网。”

实际上,仅使用默认的 postfix 安装包(不需要 postfix-pcre)就可以完成此操作。

1.) 按照教程进行这里,编辑/etc/postfix/master.cf文件中的2行,以防止任何邮件被外部传递(它会卡在本地邮件队列中):

smtp      unix  -       -       -       -       -       local
relay     unix  -       -       -       -       -       local

2.) 创建一个/etc/postfix名为的文件virtual。将以下行放入该文件中,并将其替换<USERNAME>为您希望所有邮件都发送到的本地用户帐户名:

/.*/    <USERNAME>

3.) 运行以下命令为 postfix 创建正确的数据库文件,以便查找这个新的“虚拟别名映射”。新的自动生成的数据库文件将被称为“virtual.db”

sudo postmap /etc/postfix/virtual

4.) 将以下行添加到/etc/postfix/main.cf

virtual_alias_maps = regexp:/etc/postfix/virtual

5.)重新启动 postfix:

sudo service postfix restart

现在,所有邮件,无论发件人、收件人或指向此 SMTP 服务器的程序如何,都将在本地发送给指定用户。现在有多种选项可以读取/检索这些消息。如果您安装了 IMAP 或 POP3 信使(例如鸽舍),您可以使用邮件用户代理(Thunderbird、Outlook 等)连接到您的本地邮箱并阅读邮件。

答案3

在此处查看另一种很酷的方法如何在本地服务器上捕获使用 PHP 发送的电子邮件

$ sudo mkdir /var/log/mail
$ sudo nano /usr/local/bin/sendmail

将以下 PHP 脚本添加到这个新的“sendmail”文件中:

#!/usr/bin/php
<?php
$input = file_get_contents('php://stdin');
preg_match('|^To: (.*)|', $input, $matches);
$filename = tempnam('/var/log/mail', $matches[1] . '.');
file_put_contents($filename, $input);

添加。sendmail_path = /usr/local/bin/sendmail/etc/php5/apache2/php.ini

$ sudo chmod 755 /usr/local/bin/sendmail
$ sudo chmod 777 /var/log/mail
$ sudo /etc/init.d/apache2 restart

现在您的所有邮件都在/var/log/mail文件夹中。

PS 你可能还想shell_exec("chmod 777 /var/log/mail/ -R");补充/usr/local/bin/sendmail

答案4

我有一个完全相似的环境。但大多数关于设置 Postfix 的在线文档都建议您选择互联网网站在安装过程中。我认为这对于我机器上的本地开发服务器来说有点过头了。因此,我执行以下操作

  1. 假设/etc/hostname包含MyDevMachine;我确保/etc/hosts包含一个条目127.0.1.1 MyDevMachine

  2. 当我安装 Postfix 时,我会选择仅限本地,然后对于域设置,我确保MyDevMachine已设置。

  3. 因为我希望所有电子邮件都发送给我的开发用户,并假设此 Ubuntu 开发用户的名称是devuser;因此我创建了一个名为的文件/etc/postfix/vmaps。此文件的内容是/.*/ devuser。这将允许所有电子邮件发送到devuser

  4. 然后我运行sudo postmap /etc/postfix/vmaps最终创建的内容vmaps.db(类似于激活虚拟映射)。

  5. 找到该文件/etc/postfix/main.cf并将以下代码行附加到其中(这将指示 Postfix 使用之前创建的虚拟映射):virtual_alias_maps = regexp:/etc/postfix/vmaps

  6. 重启 Postfixsudo service postfix restart

相关内容