Jak wysłać plik jako załącznik wiadomości e-mail za pomocą wiersza polecenia systemu Linux?


289

Stworzyłem skrypt, który działa co noc na moim serwerze Linux, który używa mysqldump do tworzenia kopii zapasowych każdej z moich baz danych MySQL w plikach .sql i pakuje je razem jako skompresowany plik .tar. Następnym krokiem, który chcę wykonać, jest wysłanie tego pliku tar pocztą e-mail na zdalny serwer poczty e-mail w celu przechowania. Udało mi się wysłać nieprzetworzony skrypt w treści wiadomości e-mail, przesyłając kopię zapasową pliku tekstowego w następujący mailxsposób:

$ cat mysqldbbackup.sql | mailx backup@email.com

catpowtarza tekst pliku kopii zapasowej, który jest przesyłany do mailxprogramu z adresem e-mail odbiorcy przekazanym jako argument.

Chociaż osiąga to, czego potrzebuję, myślę, że może być o krok lepszy. Czy jest jakiś sposób, za pomocą skryptów powłoki lub w inny sposób, wysłać skompresowany plik .tar do wychodzącej wiadomości e-mail jako załącznik ? Byłoby to lepsze niż radzenie sobie z bardzo długimi wiadomościami e-mail, które zawierają dane nagłówka i często występują problemy z zawijaniem słów itp.


1
Czy możesz udostępnić skrypt, który tworzy kopię zapasową baz danych MySQL?
Almino Melo

Przepraszam, nie robię tego od dłuższego czasu. Wiem, że wymagało to wywołania, mysqldumpa następnie dołączenia wyniku do wiadomości e-mail (za pomocą mutt). Mogłem nawet mieć krok, który skompresował dane wyjściowe do pliku zip / tar.gz ...
Kit Roed

1
Czysta ciekawość, po co wysyłać kopie zapasowe e-mailem vs scp lub rsync?
jchook

Odpowiedzi:


298

Żaden z tych kundli nie działał dla mnie. Myślał, że adres e-mail był częścią Attachemnt. Musiał zrobić:

echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- recipient@domain.com

1
Korzystam z mutta 1.5.21 (15.09.2010) i wymaga parametru -nazwa po e
nurettin

Pracowałem dla mnie przy użyciu Mutt 1.5.24 (30.08.2015) na openSUSE Leap 42.1.
Antonio Vinicius Menezes Medei

3
@ uciekinier oznacza „koniec opcji”. Spójrz na unix.stackexchange.com/questions/11376/...
rynop

Czy istnieje sposób na sprawdzenie wyjątków i ponowienie próby wysłania?
ti034

79

Lub nieudacznik:

gzip -c mysqldbbackup.sql | uuencode mysqldbbackup.sql.gz  | mail -s "MySQL DB" backup@email.com

26
Ten wysyła uuencoded część inline , a nie jako załącznik . Wielu klientów poczty rozpoznaje to i wyświetla niezakodowaną część jako załącznik.
FuePi

4
Nie używaj kodu uuencode w dzisiejszych czasach. MIME jest nieco bardziej skomplikowany, ale o wiele bardziej przyjazny dla użytkownika.
tripleee

@DavidGiven: Zobacz na przykład (szybki rzut oka) wszystkie pozostałe odpowiedzi na to pytanie.
tripleee

6
Żaden z nich nie używa poczty!
David Given

Następnie np. Stackoverflow.com/questions/3317174/... i zamień na text/htmldowolny typ MIME, który ma sens dla twojego załącznika. (Chyba ten konkretny przykład application/gzip.)
tripleee

43

W zależności od wersji systemu Linux może się nazywać poczta. Cytując @David powyżej:

mail -s "Backup" -a mysqldbbackup.sql backup@email.com < message.txt

lub też:

cat message.txt | mail -s "Backup" -a mysqldbbackup.sql backup@email.com 

@ KarelBílek: A co z inną opcją?
Nathan Fellman

Oba rozwiązania nie działają dla mnie. Otrzymałem wiadomość e-mail z
programem

2
moja strona internetowa brzmi:-a, --append=HEADER: VALUE append given header to the message being sent
ekshuma

2
Nathan, wygląda na to, że twój cytat z Davida jest błędny - nie użył muttpolecenia mail. Również, jak zauważyli inni, mutt wydaje się teraz wymagać --argumentu przed adresem. I widzę, że @exhuma i ja faktycznie zgadzamy się co do tego, co robi -aopcjamail
pomyliłem się

7
zamiast -a powinieneś użyć -A: -a, --append=HEADER: VALUE append given header to the message being sent -A, --attach=FILE attach FILE
Victor Perov

41

Patrząc na man mailxprogram mailx, nie ma opcji dołączenia pliku. Możesz użyć innego programu, takiego jak mutt.

echo "This is the message body" | mutt -a file.to.attach -s "subject of message" recipient@domain.com

Opcje wiersza poleceń dla mutt można wyświetlić za pomocą mutt -h.


Dzięki! To załatwiło sprawę, miałem kłopot z nakłonieniem kundla do cichego wykonania akcji.
Kit Roed

10
Zobacz odpowiedź poniżej ( stackoverflow.com/a/9524359/10608 ), ponieważ najwyraźniej zmieniono składnię dla mutta, który teraz wymaga --.
Alexander Bird

29

Korzystam z SendEmail, który został stworzony dla tego scenariusza. Jest spakowany dla Ubuntu, więc zakładam, że jest dostępny

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/


Uważam, że w twoim przykładzie powinno to być „sendEmail” zamiast „sendemail”.
Davit

1
Tak i nie - źródło (Caspian) używa wielkich liter E, podczas gdy jest to rzadkością strategia nazewnictwa dla narzędzi wiersza polecenia (w świecie Uniksa), co najmniej opakowanie Ubuntu tego oprogramowania zapewnia zarówno sendemaili sendEmailw /usr/bin/.
Fredrik Wendt

Moje Xubuntu 14.04.3 nie zostało zainstalowaneSendEmail
Witalij Zdanevich,

3
„sudo apt install sendemail”, aby zainstalować sendemail i dodać „-f mandatory@email.com” z pola obowiązkowego dla polecenia do działania. sendemail -f mandatory@email.com-t to@some.one -m "Here are your files!" -a file1.jpg file2.zip
Sailendra Pinupolu,

28

Używam mpack.

mpack -s subject file user@example.com

Niestety mpack nie rozpoznaje „-” jako aliasu dla standardowego wejścia. Ale następująca praca jest łatwa do zawinięcia w alias (shell) lub skrypt:

mpack -s subject /dev/stdin loser@example.com < file

Może to działać w bash dla standardowego wejścia. Nie mam mpack, więc nie próbowałem:mpack -s subject /dev/stdin loser@example.com <(stdout_generating_program)
thomasa88

23
 echo 'These are contents of my mail' | mailx -s 'This is my email subject' -a /path/to/attachment_file.log email_id@example.com

4
To powinna być zaakceptowana odpowiedź. Używa domyślnego mailx i działa idealnie. Mutt v1.5.21 odmawia wysłania> 1 MB załączników podczas korzystania z crona.
Joseph,

Szukałem czegoś, co działa w EC2 i to działa dobrze.
osobliwość

6
mailxnie jest odpowiednio ustandaryzowany. Każda odpowiedź, która zaleca, powinna wskazywać na to zastrzeżenie. Istnieją co najmniej trzy powszechnie niezgodne warianty.
tripleee

13

Kiedyś napisałem tę funkcję dla ksh na Solarisie (używa Perla do kodowania 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
}

8
W GNU / Linux base64do kodowania można użyć komendy zamiast perla
MestreLion

12

Możesz użyć mutt, aby wysłać wiadomość e-mail z załącznikiem

mutt -s "Backup" -a mysqldbbackup.sql backup@email.com < message.txt

2
Przynajmniej od wersji 1.5.21 (Ubuntu zaufany), musisz umieścić -aopcję za odbiorcą: mutt -s "Backup" backup@email.com -a mysqldbbackup.sql < message.txtlub użyj --opcji przed odbiorcą, jak pokazano w odpowiedzi rynop.
nealmcb

10

Wyślij e-mail w postaci zwykłego tekstu z jednym załącznikiem w postaci zwykłego tekstu za pomocą mailx:

(
  /usr/bin/uuencode attachfile.txt myattachedfilename.txt; 
  /usr/bin/echo "Body of text"
) | mailx -s 'Subject' youremail@gmail.com

Poniżej znajduje się to samo polecenie, co powyżej, bez nowych linii

( /usr/bin/uuencode /home/el/attachfile.txt myattachedfilename.txt; /usr/bin/echo "Body of text" ) | mailx -s 'Subject' youremail@gmail.com

Upewnij się, że masz plik /home/el/attachfile.txtzdefiniowany z tą zawartością:

<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>

Jeśli nie masz uuencode, przeczytaj to: /unix/16277/how-do-i-get-uuencode-to-work

W systemie Linux wysyłaj treść wiadomości e-mail HTML z załącznikiem PDF za pomocą sendmaila:

Upewnij się, że masz zainstalowany Ksh: yum info ksh

Upewnij się, że masz sendmaila zainstalowany i skonfigurowany.

Upewnij się, że masz zainstalowany i dostępny uuencode: /unix/16277/how-do-i-get-uuencode-to-work

Utwórz nowy plik o nazwie test.sh i umieść go w swoim katalogu domowym:/home/el

Wprowadź następujący kod 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

Zmień zmienne eksportu na górze test.sh aby odzwierciedlały Twój adres i nazwy plików.

Pobierz testowy dokument pdf i włóż go /home/el pdf-test.pdf

Utwórz plik o nazwie /home/el/email_body.htm i umieść w nim następujący wiersz:

<html><body><b>this is some bold text</b></body></html>

Upewnij się, że plik pdf ma wystarczające uprawnienia 755.

Uruchom skrypt ./test.sh

Sprawdź swoją skrzynkę odbiorczą, tekst powinien być w formacie HTML, a plik pdf automatycznie interpretowany jako plik binarny. Uważaj, aby nie używać tej funkcji częściej niż powiedzmy 15 razy dziennie, nawet jeśli wysyłasz wiadomości e-mail do siebie, filtry antyspamowe w Gmailu mogą umieścić na czarnej liście domeny wyrzucające e-maile bez możliwości przepuszczenia ich. Przekonasz się, że to już nie działa, albo tylko przepuszcza załącznik, albo e-mail w ogóle nie przychodzi. Jeśli musisz przeprowadzić wiele testów, rozłóż je na kilka dni, w przeciwnym razie zostaniesz oznaczony jako spamer i ta funkcja nie będzie działać.


1
Dla mnie działało to na odwrót. (echo 'Email Body'; uuencode filename filename) | mailx -s 'Subject' user@domain.com
Vicky,

uuencodenie jest właściwie załącznikiem. Po prostu osadza kropkę tekstu czytelną dla komputera w środku innego tekstu. Kiedyś działało dobrze, gdy nie było lepszego mechanizmu, ale było to ponad 20 lat temu.
tripleee

9

Istnieje kilka odpowiedzi sugerujących maillubmailx więc to raczej tle pomóc zinterpretować je w kontekście.

Notatki historyczne

Początki Uniksa mailsięgają mgły wczesnej historii Bell Labs Unix ™ (1969?) I prawdopodobnie nie możemy spodziewać się, że przejdziemy tutaj do pełnej genealogii. Wystarczy powiedzieć, że istnieje wiele programów, które dziedziczą kod po ponownej implementacji (lub dziedziczą kod po ponownej implementacji) maili że nie ma jednej podstawy kodu, którą można jednoznacznie zidentyfikować jako „mail .

Jednak jednym z pretendentów do tego stanowiska jest z pewnością „Berkeley Mail”, które pierwotnie nazywano Mailwielką literą M w 2BSD (1978); ale w 3BSD (1979) zastąpił on również małe litery mail, co doprowadziło do nowego zamieszania. SVR3 (1986) zawiera pochodną, ​​która została nazwana mailx. xPrzypuszczalnie dodany aby unikatowe i wyraźny; ale to również zostało teraz skopiowane, zaimplementowane i okaleczone, tak że nie ma jednej indywidualnej wersji, która byłaby ostateczna.

Dawno temu był to de facto standard wysyłania plików binarnych pocztą elektroniczną uuencode. Nadal istnieje, ale ma wiele problemów z użytecznością; jeśli to w ogóle możliwe, powinieneś zamiast tego wysyłać załączniki MIME, chyba że starasz się być w stanie komunikować się z końcem lat 80.

MIME został wprowadzony na początku lat dziewięćdziesiątych, aby rozwiązać kilka problemów z pocztą e-mail, w tym obsługę różnych typów treści innych niż zwykły tekst w jednym zestawie znaków, który naprawdę jest odpowiedni tylko dla części języka angielskiego (i, jak nam powiedziano, hawajski) ). Wprowadziło to obsługę wiadomości wieloczęściowych, internacjonalizację, bogate typy treści itp. I szybko zyskało popularność w latach 90.

(The Heirloom mail/ mailxHistoria notatki były najbardziej pomocne podczas tworzenia tego, a to z pewnością warto przeczytać, jeśli jesteś do tego rodzaju rzeczy).

Aktualne oferty

Od 2018 roku Debian ma trzy pakiety, które zawierają polecenie maillub mailx. (Możesz wyszukać 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

(Nie wymieniam Debiana jako rekomendacji; to jest to, czego używam, więc jestem z nim zaznajomiony; i zapewnia sposób na jednoznaczne rozróżnienie różnych alternatyw poprzez odniesienie do ich odpowiednich nazw pakietów. Oczywiście jest to również dystrybucja który Ubuntu otrzymuje te pakiety).

  • bsd-mailxJest to stosunkowo prosty mailx, który ma nie wydaje się, aby wspierać wysyłania załączników MIME. Zapoznaj się z jego instrukcją obsługi i zauważ, że jest to ta, której można oczekiwać w systemie * BSD, w tym MacOS, domyślnie.
  • heirloom-mailxjest obecnie nazywa s-naili nie obsługuje wysyłania załączników z MIME -a. Zobacz jego stronę podręcznika, a bardziej ogólnie projekt Heirloom
  • mailutilsaka GNU Mailutils obejmuje mail/ mailxkompatybilności owijkę , która robi obsługuje wysyłania załączników z MIME-A

Z tych obaw, jeśli potrzebny jest kod będzie przenośny i może zależeć od nieco kompleksowego pakietu, prosty sposób na przenośnie wysłać załączniki MIME jest do użytku mutt.


Pierwotnie opublikowałem to jako odpowiedź na umiarkowanie popularne zduplikowane pytanie stackoverflow.com/questions/902591/...
tripleee

4

Inna alternatywa - Swaks (szwajcarski scyzoryk dla 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

2

metamail ma narzędzie metasend

metasend -f mysqlbackup.sql.gz -t backup@email.com -s Backup -m application/x-gzip -b

To było instalowane prawie wszędzie, ale prawie nigdy nie było używane. Ponieważ został brakuje opiekuna przez długi czas (i nadal jest AFAIK) został usunięty z de facto standardowym zestawem narzędzi na wielu platformach.
tripleee

2

użyłem

echo "Start of Body" && uuencode log.cfg readme.txt | mail -s "subject" "a@b.c" 

i to działało dobrze dla mnie ....


1

Zwykle używam tylko polecenia mail na RHEL. Próbowałem mailx i jest dość wydajny.

mailx -s "Sending Files" -a First_LocalConfig.conf -a
Second_LocalConfig.conf Recipient@myemail.com

This is the content of my msg.

.

1

najkrótsza droga dla mnie to

file=filename_or_filepath;uuencode $file $file|mail -s "optional subject" email_address

tak będzie w twoim przykładzie

file=your_sql.log;gzip -c $file;uuencode ${file}.gz ${file}|mail -s "file with magnets" ph.gachoud@gmail.com

dobrą stroną jest to, że mogę przywołać go za pomocą Ctrl + r, aby wysłać kolejny plik ...


Nawiasy klamrowe nie przyniosą wiele dobrego, ale aby być całkowicie przenośnym, powinieneś używać podwójnych cudzysłowów wokół zmiennych. Zobacz także stackoverflow.com/questions/10067266/…
tripleee

1

Z maszyny źródłowej

mysqldump --defaults-extra-file=sql.cnf database | gzip | base64 | mail me@myemail.com

Na maszynie docelowej. Zapisz otrzymaną treść wiadomości jako db.sql.gz.b64 ; następnie..

base64 -D -i db.sql.gz.b64 | gzip -d | mysql --defaults-extra-file=sql.cnf

0

Żeby dodać 2 centy, napisałbym własny skrypt PHP:

http://php.net/manual/en/function.mail.php

Istnieje wiele sposobów wykonania załącznika w przykładach na tej stronie.


2
Nie na każdym serwerze może być zainstalowany PHP. Jeśli naprawdę chcesz pójść ścieżką „napisz własny skrypt”, wtedy perl lub python są o wiele lepiej dostosowane, ponieważ zazwyczaj są dostępne domyślnie.
ekshuma

shjest jeszcze bardziej wszechobecny. Istnieją duplikaty pytań z odpowiedziami z dobrymi przykładami; Tu jest moje.
tripleee

0

mailxma -ateraz opcję załączników.


2
Opcja „-a” dotyczy nagłówków
Yves Martin

man mail [x], wersja 12.5 z 10.10.10 (kilka lat temu) wyraźnie mówi -a plik Załącz podany plik do wiadomości.
fche

4
niektóre wersje mailxdo. Wierzę, że są dwie implementacje. Z jednej strony -asą załączniki, z drugiej strony nagłówki.
ekshuma

1
Wersja mailx w Ubuntu pochodzi z GNU i tam -a oznacza dodanie nagłówka. manpages.ubuntu.com/manpages/lucid/en/man1/mailx.1.html Który system i który mailx wykonuje załącznik?
nealmcb

3
W nowej implementacji „-a” dotyczy nagłówków, a „-A” dotyczy
załączników

0

Nie jest to metoda wysyłania wiadomości e-mail, ale możesz do tego użyć internetowego serwera Git (np. Bitbucket lub podobnej usługi).

W ten sposób możesz używać git pushpoleceń, a wszystkie wersje będą przechowywane w skompresowany i zorganizowany sposób.


0

Oto co robię z jednym dużym plikiem dziennika w CentOS:

MAIL="`whereis mail | awk '{print $2}'`"
WHOAMI="`whoami`"
HOSTNAME="`hostname`"
EMAIL"your@email.address"
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

Dlaczego definiujesz WHOAMIi HOSTNAME dwa razy?
David C. Rankin

Ma to kilka błędów w stylu kodowania powłoki. shellcheck.net wskaże niektóre z nich, ale nie wszystkie.
tripleee

0

Jeśli plik jest tekstem, możesz go najłatwiej wysłać w ciele jako:

sendmail recipient@example.com < message.txt

1
Nie wysyła go jako załącznika ani nawet jako treści wiadomości. Sendmail oczekuje, że jego dane wejściowe będą kompletną, poprawnie sformułowaną wiadomością e-mail RFC5322, a jeśli nie, może się nie powieść na ciekawe sposoby.
tripleee

0

za pomocą polecenia mailx

 echo "Message Body Here" | mailx -s "Subject Here" -a file_name user@example.com

za pomocą sendmaila

#!/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 `;

1
sendmail jest dobrym przykładem, cieszę się, że go tu znalazłem.
Honza P.,

Zauważ, że potrzebujesz pustej linii na początku „twojego ciała”, w przeciwnym razie ciało zniknie w nagłówkach lub ewentualnie całkowicie zniszczy wiadomość. Zobacz także inne uwagi na temat unikania uuencodena rzecz MIME.
tripleee

A potworne evali tajemnicze wstrząsy wokół całego urządzenia są tutaj zupełnie niepotrzebne.
tripleee

0

Mailutils sprawia, że ​​jest to bułka z masłem

echo "Body" | mail.mailutils -M -s "My Subject" -A attachment.pdf mail@example.org
  • -A file dołącza plik
  • -M włącza MIME, dzięki czemu możesz mieć załącznik i treść w postaci zwykłego tekstu.

Jeśli jeszcze nie został zainstalowany, uruchom

sudo apt install mailutils

0

W zależności od opcji polecenia poczty (zaznacz to man mail) i wersji, którą możesz zrobić

echo yourBody|mail -s yoursubject -A /your/attachment/file john@doe.com


Wydaje się, że powiela to istniejące odpowiedzi bez dodawania niczego nowego, przede wszystkim -Aopcja jest specyficzna dla mailutilswersji GNU, mailjak wskazano w mojej odpowiedzi, a także @ rumpel's
tripleee

-1

Jeśli mutt nie działa lub nie jest zainstalowany, spróbuj tego-

*#!/bin/sh

FilePath=$1
FileName=$2
Message=$3
MailList=$4

cd $FilePath

Rec_count=$(wc -l < $FileName)
if [ $Rec_count -gt 0 ]
then
(echo "The attachment contains $Message" ; uuencode $FileName $FileName.csv ) | mailx -s "$Message" $MailList
fi*
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.