Linux

當郵件到達郵件伺服器時如何執行腳本?(Debian)

  • October 20, 2021

我想從剛剛到達關鍵任務應用程序郵件伺服器的郵件中解析並插入一些資訊。

我有任何方法可以配置我的郵件伺服器,以便它在郵件到達時執行腳本。

雖然我有一個 debian 系統,但任何通用解決方案(Linux)都可以。

看起來其他人已經回答了這個問題,但我想我會為你寫一個具體的答案。

我會使用 procmail 並在您的 .procmailrc 中使用類似於以下內容的配方:

#turn this off when you're finished testing :)
VERBOSE=on
LOGFILE=/home/user/procmail.log

:0 c #the c means continue on after this recipe is parsed
| /path/to/your/script

您還需要底部的預設配方將郵件定向到您的郵件目錄。

您可以使用 /etc/aliases 將電子郵件直接傳送到要處理的程序,因此,如果您想執行腳本來處理髮送到 test@domain.com 的所有電子郵件,您可以將此行放在 /etc/aliases 中(適用於後綴,發送郵件等):

test:              "|/usr/local/bin/processtestemail.php"

然後執行“newaliases”來更新數據庫。

然後確保在 /usr/local/bin 中有一個名為 processtestemail.php 的工作程序。

它可以用 php、bash、perl、python 編寫,任何你想要的和你有的任何解釋器都可以。您甚至可以啟動用 c/c++ 等編寫的編譯二進製文件。

上面有使用 procmail 的建議,它是一個很棒的產品,但老實說,我提出的是最快和最簡單的解決方案,它適用於更多版本的 *NIX,郵件程序比其他任何版本都多。

同樣,其他答案都沒有真正告訴您如何處理入站消息,因此您將在腳本中從標準“in”(stdin)讀取輸入,然後使用您可能必須正確處理的任何算法解析該數據如下:

<?php

$fd = fopen('php://stdin','r');
if ($fd) then
   {
   $email = '';                         // initialize buffer
   while (!feof ($fd))                  // read as long as message
       {
       $rawemail .= fread($fd,1024);    // read up to 1K at a time
       ProcessTheMessageChunk($rawEmail);
       }
   fclose($fd);                         // done so close file handle
   $fd=NULL;                            // clear file handle
   }
else
   {
   print("ERROR:  Could could open stdin...");
   };

/* 
** Now write your code to fill in the function ProcessMessageChunk()
** and then process the data you have collected altogether using
** that function/subroutine.
*/

?>

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