簡體   English   中英

在帶有變量的bash腳本中通過ssh通過mail發送帶有mailx的電子郵件

[英]Send an email with mailx through ssh in a bash script with variables

我正在努力通過ssh和mailx發送電子郵件。 這是用例。 我正在編寫一個小的部署腳本,並希望在最后發送自定義電子郵件。 由於我們的開發機無法直接發送電子郵件,因此我想到了通過ssh使用集成機來完成這項工作。 在腳本中,收件人,主題和電子郵件內容都存儲在變量中。 內容用Markdown編寫,因為它在項目中作為變更日志提交。

這是我嘗試的命令:

ssh user@host "echo -e ${CHANGELOG_CONTENT} | mailx -s \"${PROJECT_NAME} - ${TARGET_VERSION} - ${RELEASE_DATE}\" ${CHANGELOG_RECIPIENTS}"

在此之前,我嘗試了幾種變體,但沒有運氣。 這個版本給我這個錯誤:

bash: -c: line 0: syntax error near unexpected token `('

這是命令的示例,其中變量替換為其內容(手工制作):

ssh user@host "echo -e Version 1.2\n\n- branch-1 : [gitlab link](http://gitlab.example.com/project-alpha/commits/branch-1)\n\n | mailx -s "Project Alpha - 1.2 - 2015-26-05 13:10" me@example.com you@example.com"

我很確定我的錯誤是由錯誤的轉義/引號引起的,但是由於我使用SSH嵌套命令,因此找不到正確的組合。

任何幫助表示贊賞。

您可以使用heredocs將整個腳本動態地輸入到遠程/bin/sh的stdin中:

ssh user@host /bin/sh <<EOF
mailx -s "${PROJECT_NAME} - ${TARGET_VERSION} - ${RELEASE_DATE}" ${CHANGELOG_RECIPIENTS} <<'END_OF_MAIL_BODY'
${CHANGELOG_CONTENT}
END_OF_MAIL_BODY
EOF

請注意,如果$CHANGELOG_CONTENT包含以END_OF_MAIL_BODY開頭的行,它將失敗。

順便說一句,我更喜歡使用sendmail 它可以更好地控制發送郵件。

ssh user@host /bin/sh <<EOF
sendmail -t <<'END_OF_MAIL_HEADER_AND_BODY'
From: ${CHANGELOG_SENDER}
Subject: ${PROJECT_NAME} - ${TARGET_VERSION} - ${RELEASE_DATE}
Bcc: ${CHANGELOG_RECIPIENTS}

${CHANGELOG_CONTENT}
END_OF_MAIL_HEADER_AND_BODY
EOF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM