[英]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.