Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
898
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
950
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
940
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1725
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4398
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Как отправить файл в виде вложения email с помощью командной строки Linux?
Я создал скрипт, который работает каждую ночь на моем сервере Linux, который использует mysqldump для резервного копирования каждой из моих баз данных MySQL в файлы .sql и упаковывает их вместе в сжатый файл .tar. Следующий шаг, который я хочу сделать, - это отправить этот tar-файл через email на удаленный сервер email для безопасного хранения. Я смог отправить сырой скрипт в теле email, передав резервный текстовый файл в mailx примерно так:
$ cat mysqldbbackup.sql | mailx backup@email.com
cat повторяет текст файла резервной копии, который передается в программу mailx с адресом получателя email, передаваемым в качестве аргумента.
Хотя это делает то, что мне нужно, я думаю, что это может быть на один шаг лучше, есть ли какой-либо способ, используя скрипты shell или иным образом, отправить сжатый файл .tar в исходящее сообщение email в качестве вложения ? Это было бы лучше, чем иметь дело с очень длинными сообщениями email, которые содержат данные заголовка и часто имеют проблемы с переносом слов и т. д.
Глядя на man mailx, программа mailx не имеет возможности прикрепить файл. Вы можете использовать другую программу, такую как mutt.
echo "This is the message body" | mutt -a file.to.attach -s "subject of message" recipient@domain.com
Параметры командной строки для mutt могут быть показаны с помощью mutt -h .
Я использую SendEmail, который был создан для этого сценария. Он упакован для Ubuntu, поэтому я предполагаю, что он доступен
sendemail -f sender@some.where -t receiver@some.place -m "Here are your files!" -a file1.jpg file2.zip
http://caspian.dotconf.net/menu/Software/SendEmail/
Я однажды написал эту функцию для ksh на Solaris (использует 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
}
Отправить текстовое тело email с одним открытым вложением с помощью mailx:
(
/usr/bin/uuencode attachfile.txt myattachedfilename.txt;
/usr/bin/echo "Body of text"
) | mailx -s 'Subject' youremail@gmail.com
(
/usr/bin/uuencode attachfile.txt myattachedfilename.txt;
/usr/bin/echo "Body of text"
) | mailx -s 'Subject' youremail@gmail.com
Ниже приведена та же команда, что и выше, без новых строк
( /usr/bin/uuencode /home/el/attachfile.txt myattachedfilename.txt; /usr/bin/echo "Body of text" ) | mailx -s 'Subject' youremail@gmail.com
Убедитесь, что у вас есть файл /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>
Если у вас нет uuencode, прочитайте это: https://unix.stackexchange.com/questions/16277/how-do-i-get-uuencode-to-work
На Linux отправьте HTML body email с вложением PDF с помощью sendmail:
Убедитесь, что у вас установлен ksh: yum info ksh
Убедитесь, что вы установили и настроили sendmail.
Убедитесь, что у вас установлен и доступен uuencode: https://unix.stackexchange.com/questions/16277/how-do-i-get-uuencode-to-work
Создайте новый файл с именем test.sh и поместите его в свой домашний каталог: /home/el
Поместите следующий код в test.sh :
#!/usr/bin/ksh
export MAILFROM="el@defiant.com"
export MAILTO="youremail@gmail.com"
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 и поместите его в /home/el под названием pdf-test.pdf
Сделайте файл с именем /home/el/email_body.htm и поместите в него эту строку:
<html><body><b>this is some bold text</b></body></html>
Убедитесь, что файл pdf имеет достаточные разрешения 755.
Запустите скрипт ./test.sh
Проверьте ваш почтовый ящик email, текст должен быть в формате HTML, а файл pdf автоматически интерпретируется как двоичный файл. Будьте осторожны, чтобы не использовать эту функцию больше, чем скажем 15 раз в день, даже если вы отправляете письма себе, спам-фильтры в gmail могут внести домен в черный список, извергающий письма, не давая вам возможности пропустить их. И вы обнаружите, что это больше не работает,или он только пропускает вложение, или email вообще не проходит. Если вам нужно сделать много тестов на этом, распространите их в течение нескольких дней, или вы будете помечены как спамер, и эта функция больше не будет работать.
Здесь есть несколько ответов, предполагающих mail или mailx , так что это скорее фон, чтобы помочь вам интерпретировать их в контексте.
историческая справка
Происхождение Unix mail восходит к туманам ранней истории Bell Labs Unix™ (1969?), и мы, вероятно, не можем надеяться, что здесь мы войдем в его полную генеалогию. Достаточно сказать, что существует множество программ, которые наследуют код от или реимплементации (или наследуют код от реимплементации) mail , и что нет ни одной кодовой базы, которую можно было бы однозначно идентифицировать как "the" mail .
Однако одним из претендентов на эту должность, безусловно, является "Berkeley Mail", который первоначально назывался Mail с прописной буквой M в 2BSD (1978); но в 3BSD (1979) он также заменил строчную команду mail , что привело к некоторой новой путанице. SVR3 (1986) включал производную, которая называлась mailx . x было предположительно добавлено, чтобы сделать его уникальным и отчетливым; но и это тоже теперь скопировано, переосмыслено и искажено так, что нет ни одной отдельной версии, которая была бы окончательной.
В те далекие времена фактическим стандартом для отправки двоичных файлов по электронной почте было uuencode . Он все еще существует, но имеет множество проблем с удобством использования; если это вообще возможно, вы должны отправить MIME вложений вместо этого, если только вы специально не стремитесь иметь возможность общаться с концом 1980-х.
MIME был введен в начале 1990-х годов для решения нескольких проблем с email, включая поддержку различных типов контента, отличных от обычного текста в одном наборе символов, который действительно подходит только для подмножества английского языка (и, как нам говорят, Гавайского). Это привело к появлению поддержки для составных сообщений, интернационализации, богатых типов контента и т.д., и быстро набирало обороты на протяжении 1990-х годов.
( Исторические заметки Heirloom 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 получает эти пакеты.)
bsd-mailx-это относительно простойmailx, который, по- видимому, не поддерживает отправку вложений MIME. Смотрите его страницу руководства и обратите внимание, что это тот, который вы ожидали бы найти в системе *BSD, включая MacOS, по умолчанию.heirloom-mailxтеперь называетсяs-nailи поддерживает отправку MIME вложений с-a. Смотрите его справочную страницу и более общий проект Heirloommailutilsaka GNU Mailutils включает в себя оболочку совместимостиmail/mailx, которая поддерживает отправку вложений MIME с-A
С учетом этих проблем, если вам нужно, чтобы ваш код был переносимым и зависел от несколько сложного пакета, простой способ переносимой отправки вложений MIME-это использовать mutt .
Еще одна альтернатива- Swaks (Swiss Army Knife for 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
самый короткий путь для меня это
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 , чтобы отправить другой файл...
использование команды 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 `;
Просто чтобы добавить свои 2 цента, я бы написал свой собственный сценарий PHP:
http://php.net/manual/en/function.mail.php
Есть много способов сделать вложение в примерах на этой странице.