Php

使用 qmail 將郵件動態轉發給多個收件人

  • December 12, 2018

我正在嘗試將收到的郵件轉發給多個收件人。收件人的地址儲存在 mysql 數據庫中,因此我需要在轉發郵件之前呼叫腳本來獲取地址。

我已經嘗試將郵件傳送到 PHP 腳本,然後解析電子郵件並通過 PHP Mail 轉發,但這有其缺點,因為您需要依賴電子郵件解析器並自己處理標題、編碼和附件。

有沒有更簡單的解決方案,例如使用 bash 腳本來獲取收件人並轉發郵件?

首先,確定此郵件列表的更改頻率。如果您打算每隔一段時間添加一個使用者,您最簡單的選擇可能是從命令行執行 MySQL 查詢並將其輸出到 .qmail 文件中。您可以在每分鐘/小時/天/月/等的 cron 作業中使用它,以實現使分發列表保持最新的目標:

mysql -sN -e ‘SELECT CONCAT(“&”,emailaddress) FROM table WHERE criteria’ > .qmailtmp
if [ $? -eq 0 ]; then
 mv .qmailtmp .qmail
fi

此設置的優點是您可以在臨時位置創建它,然後在驗證其成功後將其複製到 .qmail 文件中。因此,當您的 MySQL 伺服器出現故障時,您的郵件不會停止發送。這可能是您最快、最簡單和最好的實現方式。它還確保發送到該電子郵件地址的許多請求不會產生巨大的 MySQL 流量並減慢您的傳遞或使 MySQL 的伺服器連接數超載。

如果您需要更定期更改的內容,請考慮原始電子郵件的收件人將始終是轉發電子郵件的收件人,而不是您要轉發的收件人。您可能會發現由於垃圾郵件過濾器而降低了可傳遞性。為了解決這個問題,您可能會發現 ezmlm 之類的郵件列表管理器是一種可能的解決方案,它可以將其訂閱者列表儲存在 MySQL 數據庫中。

作為第三種選擇,使用郵件過濾器(例如 Courier 的 maildrop 並在其前面添加預行)可以工作。http://www.courier-mta.org/maildrop/也就是說,MySQL 更新檔似乎已被廢棄,我只能在舊的 Linux 分發源檔案中找到原始碼。您仍然可以使用 Maildrop 執行外部程序(例如 MySQL)來獲取您的列表,但如果您要這樣做,它與第一個選項基本相同,但實時。由於我在 10 年內無法在 maildrop-MySQL 上找到任何東西,因此這裡有一個使用外部程序的範例。

# set default Maildir
MAILDIR="$HOME/Maildir"
logfile "$HOME/mailfilter.log"

#user settings
DATABASE=<YOUR_DATABASE_USERNAME_HERE>
#mysql select
RESULT=`echo -ne "select toemail from addresses;" | mysql $DATABASE --skip-column-names`
### deliver to each RESULT here using your local methods

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