Я боролся с подобной проблемой (с почтой) в одном из моих хитов post_receive git, и, наконец, я обнаружил, что sendmail на самом деле лучше работает для такого рода вещей, особенно если вы немного знаете, как создаются электронные письма (и кажется, что ты знаешь). Я знаю, что этот ответ приходит очень поздно, но, возможно, он будет полезен и другим. Я использовал оператор heredoc и функцию, которая расширяет переменные, поэтому он также может запускать встроенные сценарии. Просто проверьте это (скрипт bash):
<code>#!/bin/bash
recipients=(
'john@example.com'
'marry@not-so-an.example.com'
# 'naah@not.this.one'
);
sender='highly-automated-reporter@example.com';
subject='Oh, who really cares, seriously...';
sendmail -t <<-MAIL
From: ${sender}
`for r in "${recipients[@]}"; do echo "To: ${r}"; done;`
Subject: ${subject}
Content-Type: text/html; charset=UTF-8
<html><head><meta charset="UTF-8"/></head>
<body><p>Ladies and gents, here comes the report!</p>
<pre>`mysql -u ***** -p***** -H -e "SELECT * FROM users LIMIT 20"`
MAIL
Обратите внимание на обратные пометки в части MAIL для генерации некоторого вывода и помните, что оператор <<-
удаляет только табуляции (не пробелы) с начала строк, поэтому в этом случае копирование-вставка не будет работать (вам нужно заменить отступы с правильными вкладками). Или используйте оператор <<
и не делайте никаких отступов. Надеюсь, это кому-нибудь поможет. Конечно, вы можете использовать обратные пометки за пределами части MAIL и сохранить выходные данные в какую-то переменную, которую позже сможете использовать в части MAIL - независимо от вкуса и читабельности. И я знаю, #!/bin/bash
не всегда работает в каждой системе.