Linux mail <file.log имеет Content-Type: application/octet-stream (приложение без имени в Gmail)
Я использовал
mail -s "here is a log file" "[email protected]" < log/logfile.log
Что раньше приходилось с заголовками:
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Но теперь файлы длиннее. Я получаю вложения без имени, потому что с этим:
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Итак, если все остальное не работает, проверьте руководство man mail
...
NAME
mailx - send and receive Internet mail
SYNOPSIS
mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr] [-r from-addr] [-h hops]
[-A account] [-S variable[=value]] to-addr . . .
Ни один из этих параметров не кажется полезным, так как я могу заставить Content-Type: text/plain
?
Ответы
Ответ 1
Персональная страница - это хорошее место для начала! Продолжайте читать, пока не дойдете до раздела MIME TYPES
и обратите пристальное внимание на следующее:
В противном случае, или если имя файла не имеет расширения, типы содержимого text/plain или application/octet-stream используемый для текстовых или международных текстовых файлов, второй для любого файла, который содержит форматирование char - актеры, отличные от новых строк и горизонтальных табуляторов.
Итак, если ваше сообщение содержит "символы форматирования" (которые в общем случае означают управляющие символы), отличные от новых строк и вкладок, оно будет автоматически классифицироваться как application/octet-stream
. Бьюсь об заклад, что если вы внимательно посмотрите на данные, вы найдете некоторые управляющие символы, плавающие вокруг.
Вы можете обойти это с помощью...
- Включая файл журнала как вложение (используя
-a
) вместо основного тела сообщения и настройте файл ~/.mime.types
для идентификации файлов *.log
в виде текста /plain.
- Отфильтруйте управляющие символы, используя что-то вроде
tr
.
-
Для отправки почты используйте другой MUA, например mutt
. На самом деле вы можете просто написать сообщение самостоятельно и отправить его прямо на sendmail
:
(
echo To: [email protected]
echo From: [email protected]
echo Subject: a logfile
echo
cat logfile.log
) | sendmail -t
Ответ 2
Недавно я получил аналогичную проблему и, наконец, получил более короткое решение:
cat -v log/logfile.log | mail -s "here is a log file" "[email protected]"
Подробнее о обсуждении cat с mailx.
Ответ 3
У меня возникли проблемы с тем, чтобы запустить автоматические сценарии электронной почты после перехода на Ubuntu Precise 12.04. Я не знаю, когда Ubuntu (или Debian) обменял bsd-mailx на heirloom-mailx, но две команды "mail" ведут себя по-разному. (Например, heirloom использует -a для вложений, в то время как он используется для дополнительных заголовков в bsd.)
В моем случае heirloom-mailx не смог надежно определить тип Mime и продолжал отправлять текст в виде вложений. Обвиняйте меня за то, что вы не лишаете контрольных символов или что-то еще, но я не вижу большого смысла в изменении сценариев, которые отлично справились с задачей до обновления.
Поэтому, если вы предпочитаете самостоятельно настраивать Mimetype, bsd-mailx - лучшее решение.
sudo apt-get install bsd-mailx
sudo apt-get remove heirloom-mailx
Решил это для меня.
Ответ 4
В системах на базе RedHat (SL, CentOS, Fedora и т.д.) вы захотите установить bsd-mailx, а затем соответствующим образом установите /etc/alternatives/mail:
sudo yum -y install bsd-mailx
sudo alternatives --set mail /usr/bin/bsd-mailx
Конечно, вы рискуете сломать приложения, которые полагаются на поведение heirloom-mailx, но явно не называют "mailx" вместо "mail".
Для отображения информации о /bin/mail в настоящее время указывает на:
sudo alternatives --display mail
Чтобы проверить наличие установленных пакетов mailx:
sudo rpm -qa *mailx
Ответ 5
В моем случае script был вызван из cron, где LC_ * не был определен, а акценты интерпретировались как "контрольные символы". Я только что вставил следующие строки в начале моего файла crontab:
LC_NAME=fr_FR.UTF-8
LC_ALL=fr_FR.UTF-8