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

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

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

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

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

Ответы [ 26 ]

0 голосов
/ 16 мая 2017

Если Mutt не работает или не установлен, попробуйте это -

*#!/bin/sh

FilePath=$1
FileName=$2
Message=$3
MailList=$4

cd $FilePath

Rec_count=$(wc -l < $FileName)
if [ $Rec_count -gt 0 ]
then
(echo "The attachment contains $Message" ; uuencode $FileName $FileName.csv ) | mailx -s "$Message" $MailList
fi*
0 голосов
/ 23 февраля 2017

Если файл текстовый, вы можете отправить его проще всего в теле как:

sendmail recipient@example.com < message.txt
0 голосов
/ 04 сентября 2015

Вот как я поступаю с одним большим файлом журнала в CentOS:

MAIL="`whereis mail | awk '{print $2}'`"
WHOAMI="`whoami`"
HOSTNAME="`hostname`"
EMAIL"your@email.address"
LOGDIR="/var/log/aide"
LOGNAME="`basename "$0"`_`date "+%Y%m%d_%H%M"`"
# Arhiveerime ning kui hästi, saadame edasi:
/bin/tar -zcvf ${LOGDIR}/${LOGNAME}.tgz "${LOGDIR}/${LOGNAME}.log" > /dev/null 2>&1
if [ $? -eq 0 ]; then
    cd ${LOGDIR}
    # This works too. The message content will be taken from text file below
    # echo 'Hello!' >/root/scripts/audit_check.sh.txt
    # echo "Arhiivifail manuses" | ${MAIL} -s "${HOSTNAME} Aide report" -q /root/scripts/audit_check.sh.txt -a ${LOGNAME}.tgz -S from=${WHOAMI}@${HOSTNAME} ${EMAIL}
    echo "Arhiivifail manuses" | ${MAIL} -s "${HOSTNAME} Aide report" -a ${LOGNAME}.tgz -S from=${WHOAMI}@${HOSTNAME} ${EMAIL}
    /bin/rm "${LOGDIR}/${LOGNAME}.log"
fi
0 голосов
/ 09 октября 2012

Еще одна вещь о mutt: по умолчанию он использует ваш адрес и имя в поле «От:». Если это не то, что вам нужно, вы можете создать альтернативный файл muttrc, содержащий следующую строку: set from = "Мой почтовый демон"

Используйте этот файл с параметром командной строки -F.

0 голосов
/ 16 февраля 2019

Mailutils делает это кусок пирога

echo "Body" | mail.mailutils -M -s "My Subject" -A attachment.pdf mail@example.org
  • -A file прикрепляет файл
  • -M включает MIME, так что вы можете иметь вложение и текстовое тело.

Если еще не установлен, запустите

sudo apt install mailutils
0 голосов
/ 29 июня 2014

Не способ отправки электронной почты, но вы можете использовать для этого онлайн-сервер Git (например, Bitbucket или подобный сервис).

Таким образом, вы можете использовать git push команды, и все версии будут храниться в сжатом и упорядоченном виде.

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