Как подключить файл с помощью команды mail в Linux?
Я на сервере, на котором установлена оболочка Linux.
Мне нужно отправить простой файл получателю.
Как это сделать, предпочтительнее использовать только команду mail?
UPDATE: получил хорошее решение, вместо этого используя mutt:
$ echo | mutt -a syslogs.tar.gz [email protected]
Ответы
Ответ 1
Пример использования uuencode:
uuencode surfing.jpeg surfing.jpeg | mail [email protected]
и справочная статья:
http://www.shelldorado.com/articles/mailattachments.html
Замечания:
Вы можете apt install sharutils
для использования команды uuencode
Ответ 2
$ echo | mutt -a syslogs.tar.gz [email protected]
Но он использует mutt, а не почту (или mailx).
Ответ 3
mail
на каждой версии современного Linux, которую я пробовал, может это сделать. Нет необходимости в другом программном обеспечении:
[email protected]:~$ mail -a doc.jpg [email protected]
Subject: testing
This is a test
EOT
Ctrl + D, когда вы закончите печатать.
Ответ 4
mailx также может помочь. На странице mailx man:
-a file
Attach the given file to the message.
Довольно легко, правильно?
Ответ 5
Мой ответ требует base64 в дополнение к почте, но некоторые версии uuencode также могут делать base64 с -m, или вы можете забыть о mime и использовать простой выход uuencode...
[email protected]
[email protected]
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
Ответ 6
mailx -a /path/to/file [email protected]
Вы можете перейти в интерактивный режим (он предложит вам "Тема:", а затем пустую строку), введите тему, затем введите тело и нажмите Ctrl + D (EOT), чтобы закончить.
Ответ 7
mpack -a -s "Эй: может, это послужит вашим отчетом?" -m 0 -c application/x-tar-gz survey_results.tar.gz [email protected]
mpack и munpack работают вместе с метамалией для расширения mailx
и сделать его полезным с современной электронной почтой, загроможденной html-разметкой и вложениями.
Эти четыре пакета, взятые вместе, позволят вам обрабатывать
любое электронное письмо, которое вы могли бы использовать в почтовом клиенте gui.
Ответ 8
Используя ubuntu 10.4, это то, как записывается решение mutt
echo | mutt -a myfile.zip -- [email protected]
Ответ 9
Здесь много ответов с использованием mutt или mailx или людей, которые говорят, что почта не поддерживает "-a"
Во-первых, почта Ubuntu 14.0.4 от mailutils поддерживает это:
mail -A filename -s "subject" [email protected]
Во-вторых, я обнаружил, что с помощью команды "man mail" и поиска "attach"
Ответ 10
Следующее является достойным решением для установок 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" [email protected] < out-${DT_STAMP}.mail
# Clean up temporary files
rm body-${DT_STAMP}.mail
rm attachments-${DT_STAMP}.mail
rm out-${DT_STAMP}.mail
Ответ 11
С mailx вы можете сделать:
mailx -s "My Subject" -a ./mail_att.csv -S [email protected] [email protected] < ./mail_body.txt
Это прекрасно работало на наших серверах GNU Linux, но, к сожалению, моей средой разработки является Mac OsX, на которой установлена только старая версия mailx для BSD. Обычно я использую 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, который может обрабатывать приведенный выше синтаксис команды.
(Извиняюсь за плохую перекрестную ссылку или атрибуцию, я новичок на сайте.)
Ответ 12
В Linux я бы предложил,
# FILE_TO_BE_ATTACHED = abc.gz
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 "[email protected] [email protected]"
После получения вложения электронной почты, если вы использовали uuencode, вам понадобится uudecode
uudecode abc.gz.enc
# Это будет генерировать файл как оригинал с именем так же, как второй аргумент для uuencode.
Ответ 13
Я использую mailutils, и запутанная часть заключается в том, что для прикрепления файла вам нужно использовать параметр капитала A. ниже приведен пример.
echo 'here you put the message body' | mail -A syslogs.tar.gz [email protected]
Если вы хотите узнать, есть ли ваша почтовая команда от mailutils, просто запустите "mail -V".
[email protected]:~$ 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.