Я'создал скрипт, который запускается каждую ночь на моем Linux-сервере и использует mysqldump
для резервного копирования каждой из моих баз данных MySQL в файлы .sql и упаковывает их вместе в сжатый файл .tar. Следующим шагом, который я хочу выполнить, является отправка этого tar-файла по электронной почте на удаленный почтовый сервер для хранения. Я'смог отправить необработанный скрипт в теле письма, передав резервный текстовый файл в mailx
следующим образом:
$ cat mysqldbbackup.sql | mailx [email protected]
cat
повторяет текст резервного файла', который передается в программу mailx
с адресом электронной почты получателя' в качестве аргумента.
Хотя это и достигает того, что мне нужно, я думаю, что это может быть на один шаг лучше, Есть ли способ, используя сценарии оболочки или иным образом, отправить сжатый .tar файл в исходящее сообщение электронной почты в качестве вложения? Это позволило бы избежать необходимости иметь дело с очень длинными сообщениями электронной почты, которые содержат данные заголовков и часто имеют проблемы с оберткой слов и т.д.
Ни одна шавка из них работал на меня. Он думал, что адрес электронной почты является частью attachemnt. Пришлось сделать:
echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- [email protected]
Или, если шавка:
gzip -c mysqldbbackup.sql | uuencode mysqldbbackup.sql.gz | mail -s "MySQL DB" [email protected]
Если посмотреть на man mailx
, то в программе mailx нет опции для прикрепления файла. Вы можете использовать другую программу, например mutt.
echo "This is the message body" | mutt -a file.to.attach -s "subject of message" [email protected]
Параметры командной строки для mutt могут быть показаны с помощью команды mutt -h
.
В зависимости от вашей версии linux он может называться mail. Цитируя @David выше:
mail -s "Backup" -a mysqldbbackup.sql [email protected] < message.txt
или также:
cat message.txt | mail -s "Backup" -a mysqldbbackup.sql [email protected]
Я использую mpack.
mpack -s subject file [email protected]
К сожалению mpack не признает '-' как псевдоним для ввода. Но следующие работы, и может легко быть обернуты в (оболочки) Алиас или скрипт:
mpack -s subject /dev/stdin [email protected] < file
Я использовать отправка электронных писем отключена, который был создан для этого сценария. Это'ы заготовок для Ubuntu так что я предполагаю, что это's доступный
&ГТ; отправка электронных писем отключена -Ф [email protected] -Т [email protected] -М "и вот ваши файлы!&я; -а file1.jpg file2.zip
echo 'These are contents of my mail' | mailx -s 'This is my email subject' -a /path/to/attachment_file.log [email protected]
Однажды я написал эту функцию для КШ на Солярис (использует Perl для кодирования base64):
# usage: email_attachment to cc subject body attachment_filename
email_attachment() {
to="$1"
cc="$2"
subject="$3"
body="$4"
filename="${5:-''}"
boundary="_====_blah_====_$(date +%Y%m%d%H%M%S)_====_"
{
print -- "To: $to"
print -- "Cc: $cc"
print -- "Subject: $subject"
print -- "Content-Type: multipart/mixed; boundary=\"$boundary\""
print -- "Mime-Version: 1.0"
print -- ""
print -- "This is a multi-part message in MIME format."
print -- ""
print -- "--$boundary"
print -- "Content-Type: text/plain; charset=ISO-8859-1"
print -- ""
print -- "$body"
print -- ""
if [[ -n "$filename" && -f "$filename" && -r "$filename" ]]; then
print -- "--$boundary"
print -- "Content-Transfer-Encoding: base64"
print -- "Content-Type: application/octet-stream; name=$filename"
print -- "Content-Disposition: attachment; filename=$filename"
print -- ""
print -- "$(perl -MMIME::Base64 -e 'open F, shift; @lines=<F>; close F; print MIME::Base64::encode(join(q{}, @lines))' $filename)"
print -- ""
fi
print -- "--${boundary}--"
} | /usr/lib/sendmail -oi -t
}
Вы можете использовать mutt, чтобы отправить письмо с вложением
mutt -s "Backup" -a mysqldbbackup.sql [email protected] < message.txt
(
/usr/bin/uuencode attachfile.txt myattachedfilename.txt;
/usr/bin/echo "Body of text"
) | mailx -s 'Subject' [email protected]
Ниже такая же команда, как и выше, без новых строк
( /usr/bin/uuencode /home/el/attachfile.txt myattachedfilename.txt; /usr/bin/echo "Body of text" ) | mailx -s 'Subject' [email protected]
Убедитесь, что у вас есть файл /home/el/attachfile.txt
определяется содержание:
<html><body>
Government discriminates against programmers with cruel/unusual 35 year prison
sentences for making the world's information free, while bankers that pilfer
trillions in citizens assets through systematic inflation get the nod and
walk free among us.
</body></html>
Если вы Don'т иметь кодировки uuencode, прочитайте это: https://unix.stackexchange.com/questions/16277/how-do-i-get-uuencode-to-work
Убедитесь, что вы установили КШ: ням инфо КШ
Убедитесь, что у вас установлен sendmail и настроить.
Убедитесь, что вы установили uuencode и доступен: https://unix.stackexchange.com/questions/16277/how-do-i-get-uuencode-to-work
Сделать новый файл под названием test.sh и положить его в вашу домашнюю директорию:
/дом/Эль
Поместите следующий код в test.sh
:
#!/usr/bin/ksh
export MAILFROM="[email protected]"
export MAILTO="[email protected]"
export SUBJECT="Test PDF for Email"
export BODY="/home/el/email_body.htm"
export ATTACH="/home/el/pdf-test.pdf"
export MAILPART=`uuidgen` ## Generates Unique ID
export MAILPART_BODY=`uuidgen` ## Generates Unique ID
(
echo "From: $MAILFROM"
echo "To: $MAILTO"
echo "Subject: $SUBJECT"
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/mixed; boundary=\"$MAILPART\""
echo ""
echo "--$MAILPART"
echo "Content-Type: multipart/alternative; boundary=\"$MAILPART_BODY\""
echo ""
echo "--$MAILPART_BODY"
echo "Content-Type: text/plain; charset=ISO-8859-1"
echo "You need to enable HTML option for email"
echo "--$MAILPART_BODY"
echo "Content-Type: text/html; charset=ISO-8859-1"
echo "Content-Disposition: inline"
cat $BODY
echo "--$MAILPART_BODY--"
echo "--$MAILPART"
echo 'Content-Type: application/pdf; name="'$(basename $ATTACH)'"'
echo "Content-Transfer-Encoding: uuencode"
echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"'
echo ""
uuencode $ATTACH $(basename $ATTACH)
echo "--$MAILPART--"
) | /usr/sbin/sendmail $MAILTO
Изменить экспортные переменные на вершине test.sh
чтобы отразить ваш адрес и имена.
Скачать документ тест PDF и положить его в `/дома/Эль под названием ПДФ-тест.формат PDF
Создайте файл с именем /home/el/email_body.htm и поместите в него эту строчку:
<html><body><b>this is some bold text</b></body></html>
Убедитесь, что PDF-файл имеет достаточно 755 разрешений.
Запустите скрипт ./test.sh
Проверьте свой почтовый ящик письмо, текст должен быть в формате HTML и PDF-файл автоматически интерпретируется как двоичный файл. Будьте осторожны, чтобы не использовать эту функцию больше, чем скажем 15 раз в день, даже если вы посылаете электронную почту к себе, спам-фильтров в Gmail черный список изрыгая письма домен, не давая вам возможность, чтобы дать им войти. И вы'll найти это больше не работает, или это только через вложения, или по электронной почте не'т пройти через все. Если вам нужно сделать много испытаний на этом, распределить их в течение нескольких дней или вы'll быть помечены спамер и эта функция выиграл't работать больше.
Есть несколько ответов здесь, предполагая, что почта
или `mailx-это скорее фон, чтобы помочь вам интерпретировать их в контексте.
Происхождение семейства Unix [электронной почты
](https://en.wikipedia.org/wiki/Mail_(ОС UNIX)) возвращайся в тумане ранней истории лаборатории Белл&ампер с Unix;торговля; (1969?), и мы, наверное, не может надеяться уйти в свою полную родословную здесь. Достаточно сказать, что есть много программ, которые наследуют код или переопределить (или наследовать код с реинкарнацией) почта
и что нет единого кода, который может быть однозначно определен как "в" Почта
.
Тем не менее, один из претендентов на эту должность является, несомненно, "по Беркли почте на" которая первоначально называлась "почта" с заглавной м в 2BSD (1978); но в 3BSD (1979), его заменил строчные почта
команду, что приводит к некоторой путанице. Файлов svr3 (1986) входит производная, которая называлась mailx
. "Х", вероятно, был добавлен, чтобы сделать его уникальным и отчетливой, но это тоже уже скопировал, переделал, и изуродованное так, что нет ни одного индивидуального версию, которая является окончательным.
Назад в день де-факто стандартные файлы для отправки по электронной почте был данный
. Он все еще существует, но имеет множество проблем с удобством использования, если это вообще возможно, вы должны послать вместо MIME-вложения, если вы специально не стремитесь быть в состоянии общаться с конца 1980-х годов.
МИМ был введен в начале 1990-х годов решить ряд проблем с электронной почтой, включая поддержку для различных типов содержимого, отличного от обычного текста в единый набор символов, который только действительно подходит для подмножества английского (и, как мы говорили, Гавайи'ян). Этим введена поддержка составных сообщений, интернационализация, богатые типы контента и т. д., и быстро набирает обороты на протяжении 1990-х годов.
(В реликвия почта
/mailx
история были наиболее полезными при написании этой, и, безусловно, стоит прочитать, если вы'вновь в такого рода вещи.)
В 2018 году, в Debian есть три пакета, которые включают mail
, или mailx
команды. (Вы можете искать обеспечивает: 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 как рекомендация; его's то, что я использую, так что я знаком с ним, и это позволяет различать различные альтернативы однозначно, ссылаясь на их упаковке наименований. Очевидно также, что дистрибутив, с которого Ubuntu получает эти пакеты.)
дом Heirloom-mailx
теперь называется ы-гвоздь
и не поддерживает отправку вложений MIME С -а
. Увидеть его руководство и в более общем плане реликвия проектаmailutils
ака в GNU Mailutils включает в себя электронной почты
/mailx
совместимость фантик, которые не поддерживает отправку вложения MIME С -а
С этими проблемами, если вам нужен ваш код, чтобы быть портативным и может зависеть от довольно сложный пакет, простой способ переносимым отправлять вложения MIME-это для использовать шавка
.
Другая альтернатива - 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
Я
echo "Start of Body" && uuencode log.cfg readme.txt | mail -s "subject" "[email protected]"
и это работало хорошо для меня....
metamail имеет metasend инструмент
metasend -f mysqlbackup.sql.gz -t [email protected] -s Backup -m application/x-gzip -b
Я обычно использую только команды на RHEL. Я пробовал mailx и это довольно эффективно.
mailx -s "Sending Files" -a First_LocalConfig.conf -a
Second_LocalConfig.conf [email protected]
This is the content of my msg.
.
mailx
есть -опцию
сейчас для вложений.
самый короткий путь для меня
file=filename_or_filepath;uuencode $file $file|mail -s "optional subject" email_address
так что для вашего примера это'll быть
file=your_sql.log;gzip -c $file;uuencode ${file}.gz ${file}|mail -s "file with magnets" [email protected]
хорошая часть заключается в том, что я могу вспомнить это с помощью комбинации клавиш [Ctrl+R] и1, чтобы отправить другой файл...
Из машины
mysqldump --defaults-extra-file=sql.cnf database | gzip | base64 | mail [email protected]
На машину назначения. Сохранить полученный теле письма как дБ.для SQL.ГЗ.b64; затем..
base64 -D -i db.sql.gz.b64 | gzip -d | mysql --defaults-extra-file=sql.cnf
Это, как я делаю с одной большой лог-файл в CentOS:
MAIL="`whereis mail | awk '{print $2}'`"
WHOAMI="`whoami`"
HOSTNAME="`hostname`"
EMAIL"[email protected]"
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
Если файл является текстом, Вы можете послать его простым в организме, как:
sendmail [email protected] < message.txt