Как прикрепить файл с помощью команды mail в Linux? [дубликат]


этот вопрос уже есть ответ здесь:

Я нахожусь на сервере под управлением оболочки Linux. Мне нужно отправить простой файл получателю. Как это сделать, предпочтительно используя только почта?

обновление: получил хорошее решение, используя mutt вместо:

$ echo | mutt -a syslogs.tar.gz admin@domain.org
13 56

13 ответов:

пример использования uuencode:

uuencode surfing.jpeg surfing.jpeg | mail sylvia@home.com

и библиографическая ссылка на статью:

http://www.shelldorado.com/articles/mailattachments.html

$ echo | mutt -a syslogs.tar.gz admin@domain.org

но он использует mutt, а не mail (или mailx).

mail на каждой версии современного Linux, которую я пробовал, может это сделать. Нет необходимости в другом программном обеспечении:

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.

используя ubuntu 10.4, вот как написано решение mutt

echo | mutt -a myfile.zip -- admin@domain.org

есть много ответов здесь с помощью 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.