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 [email protected]

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.

Kit Roed
źródło
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" -- [email protected]
rynop
źródło
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" [email protected]
Daniel Fone
źródło
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 [email protected] < message.txt

lub też:

cat message.txt | mail -s "Backup" -a mysqldbbackup.sql [email protected] 
Nathan Fellman
źródło
@ 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" [email protected]

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

Chris N.
źródło
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 [email protected] -t [email protected] -m "Here are your files!" -a file1.jpg file2.zip

http://caspian.dotconf.net/menu/Software/SendEmail/

Fredrik Wendt
źródło
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 [email protected]” z pola obowiązkowego dla polecenia do działania. sendemail -f [email protected] [email protected] -m "Here are your files!" -a file1.jpg file2.zip
Sailendra Pinupolu,
28

Używam mpack.

mpack -s subject file [email protected]

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 [email protected] < file

źródło
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 [email protected] <(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 protected]
Sourabh Potnis
źródło
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
}
Glenn Jackman
źródło
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 [email protected] < message.txt
David Schlosnagle
źródło
2
Przynajmniej od wersji 1.5.21 (Ubuntu zaufany), musisz umieścić -aopcję za odbiorcą: mutt -s "Backup" [email protected] -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' [email protected]

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' [email protected]

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="[email protected]"
export MAILTO="[email protected]"
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ć.

użytkownik1651561
źródło
1
Dla mnie działało to na odwrót. (echo 'Email Body'; uuencode filename filename) | mailx -s 'Subject' [email protected]
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.

potrójny
źródło
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
Alexander Yancharuk
źródło
2

metamail ma narzędzie metasend

metasend -f mysqlbackup.sql.gz -t [email protected] -s Backup -m application/x-gzip -b
Pistolet
źródło
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" "[email protected]" 

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

ponczo
źródło
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 [email protected]

This is the content of my msg.

.
Alejandro Santillan
źródło
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" [email protected]

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

Pipo
źródło
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 [email protected]

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
Konchog
źródło
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.

Mike Graf
źródło
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.

Allan Pinto
źródło
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.

Yoav
źródło
0

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

MAIL="`whereis mail | awk '{print $2}'`"
WHOAMI="`whoami`"
HOSTNAME="`hostname`"
EMAIL"[email protected]"
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
dagorv
źródło
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 [email protected] < message.txt
nurp
źródło
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 [email protected]

za pomocą sendmaila

#!/bin/ksh

fileToAttach=data.txt

`(echo "To: [email protected]"
  echo "Cc: [email protected]"
  echo "From: Application"
  echo "Subject: your subject"
  echo  your body
  uuencode $fileToAttach $fileToAttach
  )| eval /usr/sbin/sendmail -t `;
Girdhar Singh Rathore
źródło
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 [email protected]
  • -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
Rumpel
źródło
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 [email protected]

Pipo
źródło
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*
Paras Singh
źródło