【问题标题】:Send an email with mailx through ssh in a bash script with variables在带有变量的 bash 脚本中通过 ssh 使用 mailx 发送电子邮件
【发布时间】:2015-05-26 11:15:19
【问题描述】:

我很难通过 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 嵌套命令,我找不到合适的组合。

任何帮助表示赞赏。

【问题讨论】:

    标签: bash shell email ssh mailx


    【解决方案1】:

    您可以使用 heredocs 即时将整个脚本提供给远程 /bin/sh 的标准输入:

    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
    

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 2011-09-11
      • 1970-01-01
      • 2023-03-19
      • 2016-08-16
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 2011-01-17
      相关资源
      最近更新 更多