Php

如何設置 postfix 以將電子郵件儲存在文件中而不是中繼它?

  • September 6, 2016

我想在本地環境中執行生產伺服器的臨時副本。系統執行一個 PHP 應用程序,該應用程序在各種場景中向客戶發送電子郵件,我想確保不會從暫存環境發送電子郵件。

我可以調整程式碼,使其使用虛擬電子郵件發件人,但我想執行與生產環境完全相同的程式碼。我可以使用不同的 MTA(Postfix 正是我們在生產中使用的),但我想要在 Debian/Ubuntu 下易於設置的東西 :)

因此,我想設置本地 Postfix 安裝以將所有電子郵件儲存在(一個或多個)文件中,而不是中繼它。實際上,只要可以檢查發送的電子郵件,我並不關心它是如何儲存的。即使是告訴 postfix 將電子郵件保留在郵件隊列中的設置選項也可以工作(當我使用生產中的副本重新載入登台伺服器時,我可以清除隊列)。

我知道這是可能的,我只是沒有在網上找到任何好的解決方案來解決似乎相當普遍的需求。

謝謝!

我使用管道命令創建了一個新傳輸,該命令將電子郵件寫入文件。

基本上:

  1. 創建一個擁有電子郵件(或使用現有電子郵件)的使用者。我打電話給我的email
  2. mkdir /home/email/bin
  3. 將以下腳本放入/home/email/bin/mail_eater(這使用 PHP,但您可以使用您喜歡的任何語言編寫自己的版本,它只是將 stdin 附加到文件中):
#!/usr/bin/php
<?php
$fd = fopen("php://stdin", "r");
$email = "";
while (!feof($fd)) {
   $email .= fread($fd, 1024);
}
fclose($fd);
$fh = fopen('/home/email/email.txt','a');
fwrite($fh, $email."\n-------------------------------------------------------\n\n");
fclose($fh);
  1. chmod a+x /home/email/bin/mail_eater
  2. touch /home/email/email.txt
  3. chmod a+r /home/email/email.txt
  4. 通過在以下行中附加以下行來使用此文件創建新傳輸master.cf
file_route unix -    n    n    -    -    pipe user=email  argv=/home/email/bin/mail_eater
  1. 使用它作為預設傳輸main.cf
default_transport = file_route

那裡 :)

引用自:https://serverfault.com/questions/451240