Cron

如何從 Vixie-cron (debian) 和 msmtp 自定義電子郵件標題?

  • September 28, 2021

我在讓 cron 發送電子郵件方面遇到了一些麻煩。我的 ISP 要求“發件人:”欄位與發送電子郵件的電子郵件地址相匹配,否則電子郵件將被拒絕。由於 cron 將“發件人:”欄位硬編碼為“root(Cron 守護程序)”,因此不會發送這些電子郵件。

我已經設置了 msmtp 並且可以從命令行毫無問題地發送電子郵件。事實上,我已經將我的一些 cron 作業包裝在一個發送電子郵件本身的腳本中。這很好用,但我想要一個更優雅的解決方案。

我最初使用的是 package msmtp-mta,它只是符號連結/usr/lib/sendmail/usr/bin/msmtp以便 cron 使用 msmtp 發送電子郵件。由於這不起作用,我刪除了包並放入了一個 bash 腳本,/usr/lib/sendmail而不是應該從標準輸入中讀取並發送帶有正確標題的電子郵件:

#!/bin/bash

HEADERS="To: <myemail>
From: Cron <myotheremail>
Subject: Vixie-cron snooper ($@)

"

INPUT=$( cat /dev/stdin )

echo -e "$HEADERS""Stdin:\n$INPUT\n" | msmtp <myemail>
echo "$HEADERS""Stdin:\n$INPUT\n" > /tmp/vixielog

但是,這並沒有達到預期的效果。我剛剛收到一封幾乎是空的電子郵件,/tmp/vixielog其中包含相同的內容:

To: <myemail>
From: Cron <myotheremail>
Subject: Vixie-cron snooper (-i -FCronDaemon -oem <myemail>)

Stdin:

電子郵件來得正是時候,所以我知道 cron 作業正在正常執行,但我沒有得到輸出。我如何調整這種方法以在電子郵件中獲取命令的輸出?

最終我得出了以下解決方案。我沒有使用mstmp-mta,而是編寫了自己的簡單 bash 腳本來充當 MTA。放置在 中/usr/sbin/sendmail,它會替換 From 標頭並繼續發送電子郵件。

#!/bin/bash

sed -e "s/From: root (Cron Daemon)/From: WHATEVER YOU LIKE/" | msmtp $BASH_ARGV

希望這可以幫助任何想要解決問題的輕量級解決方案的人。

它不需要知道郵件頭的來源(以前的文章來自:root(Cron Daemon)):

#!/bin/bash

# /usr/sbin/sendmail

# We write the sent letter to the stdin variable
stdin=$(cat)

# Text to which we will replace the From header:
__REPLACE_WITH="sender name <your.from.mail@domain.com>"


# Find the text between From: and To :, write it to the __FIND_WHAT variable.
__FIND_WHAT=$(echo $stdin |  grep -o -P '(?<=From: ).*(?=To:)')


# grep command (above) adds a space to the variable at the end of the line. It must be deleted, otherwise the text replacement will not work.
# Remove the space at the end of the variable
__FIND_WHAT=$( echo $__FIND_WHAT | sed -e 's/\s$//g' )


# Replace the text __FIND_WHAT with __REPLACE_WITH
mail=$(echo "$stdin" |  sed -e "s/$__FIND_WHAT/$__REPLACE_WITH/"  )


# Send a letter, with the correct sender in the header of the letter.
echo -e "$mail" | msmtp $BASH_ARGV

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