Как отправить файл в виде вложения электронной почты с помощью командной строки Linux? - PullRequest
277 голосов
/ 20 августа 2008

Я создал скрипт, который запускается каждую ночь на моем сервере Linux, который использует mysqldump для резервного копирования каждой из моих баз данных MySQL в файлы .sql и упаковки их вместе в сжатый файл .tar. Следующим шагом, который я хочу выполнить, является отправка этого tar-файла по электронной почте на удаленный почтовый сервер для безопасного хранения. Я смог отправить сырой сценарий в теле письма по электронной почте, отправив резервную копию текстового файла на mailx примерно так:

$ cat mysqldbbackup.sql | mailx backup@email.com

cat повторяет текст файла резервной копии, который передается в программу mailx с адресом электронной почты получателя, переданным в качестве аргумента.

Хотя это и выполняет то, что мне нужно, я думаю, что это может быть на шаг лучше, Есть ли способ, используя сценарии оболочки или иным образом, отправить сжатый файл .tar в исходящее сообщение электронной почты в виде вложение ? Это позволит справиться с очень длинными сообщениями электронной почты, которые содержат данные заголовка и часто имеют проблемы с переносом слов и т. д.

Ответы [ 26 ]

6 голосов
/ 02 февраля 2018

Здесь есть несколько ответов, предлагающих mail или mailx, так что это скорее фон, который поможет вам интерпретировать их в контексте.

Исторические заметки

Происхождение Unix mail восходит к туманам ранней истории Bell Labs Unix & trade; (1969?), И мы, вероятно, не можем надеяться углубиться в его полную генеалогию здесь. Достаточно сказать, что есть много программ, которые наследуют код или переопределяют (или наследуют код от переопределения) mail и что не существует единой базы кода, которую можно однозначно идентифицировать как «the» mail.

Однако одним из претендентов на эту должность, безусловно, является «Почта Беркли», которая первоначально называлась Mail с заглавной буквой М в 2BSD (1978); но в 3BSD (1979) он также заменил команду mail в нижнем регистре, что привело к некоторой новой путанице. SVR3 (1986) включал производную, которая называлась mailx. x был предположительно добавлен, чтобы сделать его уникальным и уникальным; но теперь это тоже было скопировано, переопределено и искалечено, так что нет единой отдельной версии, которая была бы окончательной.

В свое время стандарт de facto для отправки двоичных файлов по электронной почте был uuencode. Он все еще существует, но имеет множество проблем с юзабилити; если это вообще возможно, вы должны вместо этого отправлять вложения MIME, если только вы специально не пытаетесь общаться с концом 1980-х годов.

MIME был введен в начале 1990-х годов для решения ряда проблем с электронной почтой, включая поддержку различных типов контента, кроме простого текста, в одном наборе символов, который действительно подходит только для подмножества английского языка ( и, как нам говорят, гавайский). Это привело к поддержке многокомпонентных сообщений, интернационализации, расширенных типов контента и т. Д. И быстро завоевало популярность в течение 1990-х годов.

( Семейная реликвия mail / mailx исторические заметки были наиболее полезны при составлении этого и, безусловно, заслуживают прочтения, если вы любите подобные вещи.)

Текущие предложения

Начиная с 2018 года, в Debian есть три пакета, которые включают команду mail или mailx. (Вы можете искать Provides: mailx.)

debian$ aptitude search ~Pmailx
i   bsd-mailx                       - simple mail user agent
p   heirloom-mailx                  - feature-rich BSD mail(1)
p   mailutils                       - GNU mailutils utilities for handling mail

(Я не выделяю Debian в качестве рекомендации; это то, чем я пользуюсь, поэтому я с ним знаком; и он дает возможность однозначно различать различные альтернативы, ссылаясь на соответствующие имена пакетов. дистрибутив, из которого Ubuntu получает эти пакеты.)

В связи с этим, если ваш код должен быть переносимым и может зависеть от довольно сложного пакета, простой способ переносить отправку вложений MIME - это использование mutt.

4 голосов
/ 05 сентября 2017

Другая альтернатива - Swaks (Швейцарский армейский нож для SMTP).

swaks -tls \
    --to ${MAIL_TO} \
    --from ${MAIL_FROM} \
    --server ${MAIL_SERVER} \
    --auth LOGIN \
    --auth-user ${MAIL_USER} \
    --auth-password ${MAIL_PASSWORD} \
    --header "Subject: $MAIL_SUBJECT" \
    --header "Content-Type: text/html; charset=UTF-8" \
    --body "$MESSAGE" \
    --attach mysqldbbackup.sql
2 голосов
/ 04 августа 2015

Я использовал

echo "Start of Body" && uuencode log.cfg readme.txt | mail -s "subject" "a@b.c" 

и это хорошо сработало для меня ....

2 голосов
/ 17 сентября 2008

metamail имеет инструмент metasend

metasend -f mysqlbackup.sql.gz -t backup@email.com -s Backup -m application/x-gzip -b
1 голос
/ 15 апреля 2015

самый короткий путь для меня

file=filename_or_filepath;uuencode $file $file|mail -s "optional subject" email_address

так что для вашего примера это будет

file=your_sql.log;gzip -c $file;uuencode ${file}.gz ${file}|mail -s "file with magnets" ph.gachoud@gmail.com

хорошо то, что я могу вспомнить его с помощью Ctrl + r , чтобы отправить другой файл ...

1 голос
/ 12 августа 2014

Я обычно использую только команду mail на RHEL. Я пробовал mailx, и это довольно эффективно.

mailx -s "Sending Files" -a First_LocalConfig.conf -a
Second_LocalConfig.conf Recipient@myemail.com

This is the content of my msg.

.
1 голос
/ 08 сентября 2017

с помощью команды mailx

 echo "Message Body Here" | mailx -s "Subject Here" -a file_name user@example.com

с использованием sendmail

#!/bin/ksh

fileToAttach=data.txt

`(echo "To: user@company.com"
  echo "Cc: user@company.com"
  echo "From: Application"
  echo "Subject: your subject"
  echo  your body
  uuencode $fileToAttach $fileToAttach
  )| eval /usr/sbin/sendmail -t `;
1 голос
/ 22 января 2017

Из исходной машины

mysqldump --defaults-extra-file=sql.cnf database | gzip | base64 | mail me@myemail.com

На целевой машине. Сохраните полученное письмо как db.sql.gz.b64 ; то ..

base64 -D -i db.sql.gz.b64 | gzip -d | mysql --defaults-extra-file=sql.cnf
1 голос
/ 28 декабря 2013

mailx теперь имеет опцию -a для вложений.

0 голосов
/ 24 сентября 2012

Просто чтобы добавить 2 цента, я бы написал свой собственный PHP-скрипт:

http://php.net/manual/en/function.mail.php

Существует множество способов сделать вложение в примерах на этой странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...