Как прикрепить файл с помощью команды mail в Linux? [дубликат]
этот вопрос уже есть ответ здесь:
Я нахожусь на сервере под управлением оболочки Linux. Мне нужно отправить простой файл получателю. Как это сделать, предпочтительно используя только почта?
обновление: получил хорошее решение, используя mutt вместо:
$ echo | mutt -a syslogs.tar.gz admin@domain.org
13 ответов:
пример использования uuencode:
uuencode surfing.jpeg surfing.jpeg | mail sylvia@home.com
и библиографическая ссылка на статью:
matiu@matiu-laptop:~$ mail -a doc.jpg someone@somewhere.com Subject: testing This is a test EOT
ctrl+d, Когда вы закончите печатать.
mailx может также помочь. С man-страницы mailx:
-a file Attach the given file to the message.
довольно легко, не так ли?
мой ответ нуждается в base64 в дополнение к почте, но некоторые версии uuencode также могут делать base64 с-m, или вы можете забыть о mime и использовать простой вывод uuencode...
FROM=me@mydomain.com TO=someone@mydomain.com SUBJECT="Auto emailed" MIME="application/x-gzip" # Adjust this to the proper mime-type of file FILE=somefile.tar.gz ENCODING=base64 boundary="---my-unlikely-text-for-mime-boundary---$$--" (cat <<EOF From: $FROM To: $REPORT_DEST Subject: $SUBJECT Date: $(date +"%a, %b %e %Y %T %z") Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="$boundary" Content-Disposition: inline --$boundary Content-Type: text/plain; charset=us-ascii Content-Disposition: inline This email has attached the file --$boundary Content-Type: $MIME;name="$FILE" Content-Disposition: attachment;filename="$FILE" Content-Transfer-Encoding: $ENCODING EOF base64 $FILE echo "" echo "--$boundary" ) | mail
mailx -a /path/to/file email@address
вы можете перейти в интерактивный режим (он предложит вам "тема:", а затем пустую строку), введите тему, затем введите тело и нажмите Ctrl+D (EOT), чтобы закончить.
mpack-a-s"Эй: может это послужит вашим отчетом?"- M 0-C application / x-tar-GZ survey_results.смола.gz hesco@example.net
mpack и munpack работают вместе с metamail для расширения mailx и сделайте его полезным с современной электронной почтой, загроможденной html-разметкой и вложениями.
эти четыре пакета, взятые вместе, позволят вам справиться любая электронная почта, которую вы могли бы в почтовом клиенте gui.
есть много ответов здесь с помощью mutt или mailx или люди говорят, что Почта не поддерживает "- a"
во-первых, Ubuntu 14.0.4 mail от mailutils поддерживает это:
mail-a filename - s "subject" email@example.com
во-вторых, я обнаружил, что с помощью команды " man mail "и поиска"attach"
ниже приведено достойное решение для всех установок Unix / Linux, которое не зависит от каких-либо необычных функций программы. Это поддерживает многострочное тело сообщения, несколько вложений и все другие типичные функции
mailx
.к сожалению, она не помещается на одной строке.
#!/bin/ksh # Get the date stamp for temporary files DT_STAMP=`date +'%C%y%m%d%H%M%S'` # Create a multi-line body echo "here you put the message body which can be split across multiple lines! woohoo! " > body-${DT_STAMP}.mail # Add several attachments uuencode File1.pdf File1.pdf > attachments-${DT_STAMP}.mail uuencode File2.pdf File2.pdf >> attachments-${DT_STAMP}.mail # Put everything together and send it off! cat body-${DT_STAMP}.mail attachments-${DT_STAMP}.mail > out-${DT_STAMP}.mail mailx -s "here you put the message subject" nobody@test-address.com < out-${DT_STAMP}.mail # Clean up temporary files rm body-${DT_STAMP}.mail rm attachments-${DT_STAMP}.mail rm out-${DT_STAMP}.mail
на Linux я бы предложил,
# FILE_TO_BE_ATTACHED=abc.ГЗ
uuencode abc.gz abc.gz > abc.gz.enc # This is optional, but good to have # to prevent binary file corruption. # also it make sure to get original # file on other system, w/o worry of endianness # Sending Mail, multiple attachments, and multiple receivers. echo "Body Part of Mail" | mailx -s "Subject Line" -a attachment1 -a abc.gz.enc "youremail@domain.com anotheremail@domain.com"
при получении вложения почты, если вы использовали uuencode, вам понадобится uudecode
uudecode abc.gz.enc
# это создаст файл как оригинал с именем так же, как и 2-й аргумент для uuencode.
С mailx вы можете сделать:
mailx -s "My Subject" -a ./mail_att.csv -S from=noreply@foo.com recipient@bar.com < ./mail_body.txt
это отлично работало на наших серверах GNU Linux, но, к сожалению, моя среда разработки-Mac OsX, которая имеет только вшивую старую версию BSD mailx. Обычно я использую Coreutils для получения лучших версий команд unix, чем Mac BSD, но mailx не находится в Coreutils.
Я нашел решение от notpeter в несвязанном потоке (https://serverfault.com/questions/196001/using-unix-mail-mailx-with-a-modern-mail-server-imap-instead-of-mbox-files) который должен был загрузить двоичный пакет Heirloom mailx OSX изhttp://www.tramm.li/iWiki/HeirloomNotes.html. Он имеет более функциональный mailx, который может обрабатывать приведенный выше синтаксис команды.
(извиняюсь за плохую перекрестную ссылку или атрибуцию, я новичок на сайте.)
Я использую mailutils и запутанная часть заключается в том, что для того, чтобы прикрепить файл, вам нужно использовать параметр capital A. ниже приведен пример.
echo 'here you put the message body' | mail -A syslogs.tar.gz admin@domain.org
Если вы хотите знать, является ли ваша почтовая команда из mailutils, просто запустите "mail-V".
root@your-server:~$ mail -V mail (GNU Mailutils) 2.99.98 Copyright (C) 2010 Free Software Foundation, inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.