嘗試通過郵件發送多個文本附件
執行此腳本:“Red Had Enterprise Linux Server release 5.11 (Tikanga)”
郵件是:8.1 6/6/93 版(看起來很舊)。
嘗試了各種事情,但似乎無法讓它發揮作用..
echo "Email message" | mail -a /home/user/checks/notprocessed.txt -a /home/user/checks/dirlist.txt -s "Subject" recipient@company.com /home/user/checks
結果消息:
郵件:無效選項——a
未安裝 mutt,我對該系統的訪問權限有限,因為它歸我工作的公司所有。我可以添加其他組件,但必須通過變更管理和相關流程。
uuencode 也不可用。
這是我今天使用的內容,我正在嘗試將第二個文件添加到:
if grep 'Not Empty' /home/user/checks/notprocessed.txt then echo "files were found"; SUBJECT="NIGHTLY DIRECTORY LISTING OF FILES SENT TO VENDOR"; FROM="SENDER<sender@company.com>" # EMAIL="JOHN DOE<recipient@company.com>" EMAIL="MARY DOE<recipient@company.com>"; /bin/mail -s "$SUBJECT" "$EMAIL" -- -f "$FROM" < /home/user/checks/notprocessed.txt /home/user/checks/dirlist.txt exit -20 fi
並且.. /home/user/checks/dirlist.txt 沒有附加或包含在電子郵件中。我希望 /home/user/checks/dirlist.txt 實際上是一個附件
這確實有效 - 但包括 notprocessed.txt 作為電子郵件的正文。
if grep 'Not Empty' /home/user/checks/notprocessed.txt then echo "files were found"; SUBJECT="NIGHTLY DIRECTORY LISTING OF FILES SENT TO VENDOR"; FROM="SENDER<sender@company.com>" # EMAIL="JOHN DOE<recipient@company.com>" EMAIL="MARY DOE<recipient@company.com>"; /bin/mail -s "$SUBJECT" "$EMAIL" -- -f "$FROM" < /home/user/checks/notprocessed.txt exit -20 fi
好吧,當您執行 stdin 重定向 (
<
) 時會發生什麼,即打開第一個文件 - 並且只有第一個 - 並將其內容傳遞給因為您的
mailx
實現是舊的,它不支持目前版本的-a
標誌來創建 MIME 附件。您可以做的是自己創建 MIME 格式,使用可用的東西。幸運的是,使用簡單的 bash 腳本並不難(即使在 RHEL 5 上,我也 100% 確定它是可用的 :-)),這樣簡單的事情可能會做到:
#!/bin/bash msgid="$RANDOM$RANDOM$RANDOM$RANDOM" to="$1" shift subject="$1" shift echo "To: $to" echo "From: secret-admirer@example.com" echo "Subject: $subject" echo "Message-ID: $msgid" echo "MIME-Version: 1.0" echo "Content-Type: multipart/mixed; boundary=$msgid" echo "" # header termination while [ -n "$1" ]; do echo "--$msgid" echo "Content-Type: text/plain; charset=UTF-8" echo "Content-Disposition: attachment; filename=\"$(basename $1)\"" echo "Content-Transfer-Encoding: base64" echo "" base64 < "$1" shift done
然後您只需要將生成的電子郵件文本送出到以
sendmail
進行傳遞,如下所示:mail.sh "$SUBJECT" "$EMAIL" /home/user/checks/notprocessed.txt \ /home/user/checks/dirlist.txt | sendmail -t
該腳本使用
base64
“ASCII Armor”文件的命令,因此您可以發送文本文件和二進製文件,但如果您不發送文本文件,您可能想弄清楚如何Content-type
正確設置附件(或者只是將其全部更改為application/octet-stream
,即“二進制”)。該命令可作為 RHEL 5 上 coreutils 的一部分使用,因此我不認為使用它會出現問題。另請注意,使用該
-t
標誌讓sendmail
MTA 僅從郵件本身讀取電子郵件信封,因此無需在sendmail
命令參數中添加任何其他內容。只需確保腳本在輸出中包含所有需要的欄位 - 我已經讓它從命令行讀取收件人和主題mailx
,但它不是必需的,並且發件人地址無論如何都是硬編碼的。