2015-05-26 5 views
1

Я изо всех сил пытаюсь отправить электронное письмо через ssh с mailx. Вот прецедент. Я пишу небольшой сценарий развертывания и хочу отправить заказную электронную почту в конце. Поскольку наши машины-разработчики не могут отправлять электронную почту напрямую, я подумал о том, чтобы использовать машину интеграции через ssh для выполнения этой работы. В сценарии получатели, субъект и содержимое электронной почты хранятся в переменных. Содержимое написано в Markdown, потому что оно зафиксировано в проекте как журнал изменений.Отправить письмо с mailx через ssh в скрипте bash с переменными

Здесь нет команды я попробовал:

ssh [email protected] "echo -e ${CHANGELOG_CONTENT} | mailx -s \"${PROJECT_NAME} - ${TARGET_VERSION} - ${RELEASE_DATE}\" ${CHANGELOG_RECIPIENTS}" 

Я попробовал несколько вариантов, прежде чем этот, но не повезло. Эта версия дает мне эту ошибку:

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

Вот пример команды с переменными заменены их содержанием (ручной):

ssh [email protected] "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" [email protected] [email protected]" 

Я уверен, что мои ошибки приходят от плохого экранирования/quoting, но так как я вложенные команды с SSH, я не могу найти правильную комбинацию.

Любая помощь приветствуется.

ответ

0

Вы можете накормить весь сценарий в стандартный ввод дистанционного /bin/sh на лету с помощью heredocs:

ssh [email protected] /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.

Btw Я предпочитаю использовать sendmail. Это позволяет лучше контролировать отправку писем.

ssh [email protected] /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 

 Смежные вопросы

  • Нет связанных вопросов^_^