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 mailx
sposób:
$ cat mysqldbbackup.sql | mailx [email protected]
cat
powtarza tekst pliku kopii zapasowej, który jest przesyłany do mailx
programu 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.
źródło
mysqldump
a 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 ...Odpowiedzi:
Żaden z tych kundli nie działał dla mnie. Myślał, że adres e-mail był częścią Attachemnt. Musiał zrobić:
źródło
Lub nieudacznik:
źródło
text/html
dowolny typ MIME, który ma sens dla twojego załącznika. (Chyba ten konkretny przykładapplication/gzip
.)W zależności od wersji systemu Linux może się nazywać poczta. Cytując @David powyżej:
lub też:
źródło
-a, --append=HEADER: VALUE append given header to the message being sent
mutt
poleceniamail
. 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-a
opcjamail
-a, --append=HEADER: VALUE append given header to the message being sent
-A, --attach=FILE attach FILE
Patrząc na
man mailx
program mailx, nie ma opcji dołączenia pliku. Możesz użyć innego programu, takiego jak mutt.Opcje wiersza poleceń dla mutt można wyświetlić za pomocą
mutt -h
.źródło
--
.Korzystam z SendEmail, który został stworzony dla tego scenariusza. Jest spakowany dla Ubuntu, więc zakładam, że jest dostępny
http://caspian.dotconf.net/menu/Software/SendEmail/
źródło
sendemail
isendEmail
w/usr/bin/
.SendEmail
sendemail -f [email protected] [email protected] -m "Here are your files!" -a file1.jpg file2.zip
Używam mpack.
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:
źródło
mpack -s subject /dev/stdin [email protected] <(stdout_generating_program)
źródło
mailx
nie jest odpowiednio ustandaryzowany. Każda odpowiedź, która zaleca, powinna wskazywać na to zastrzeżenie. Istnieją co najmniej trzy powszechnie niezgodne warianty.Kiedyś napisałem tę funkcję dla ksh na Solarisie (używa Perla do kodowania base64):
źródło
base64
do kodowania można użyć komendy zamiast perlaMożesz użyć mutt, aby wysłać wiadomość e-mail z załącznikiem
źródło
-a
opcję za odbiorcą:mutt -s "Backup" [email protected] -a mysqldbbackup.sql < message.txt
lub użyj--
opcji przed odbiorcą, jak pokazano w odpowiedzi rynop.Wyślij e-mail w postaci zwykłego tekstu z jednym załącznikiem w postaci zwykłego tekstu za pomocą mailx:
Poniżej znajduje się to samo polecenie, co powyżej, bez nowych linii
Upewnij się, że masz plik
/home/el/attachfile.txt
zdefiniowany z tą zawartością: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
: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.pdfUtwórz plik o nazwie /home/el/email_body.htm i umieść w nim następujący wiersz:
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ć.
źródło
(echo 'Email Body'; uuencode filename filename) | mailx -s 'Subject' [email protected]
uuencode
nie 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.Istnieje kilka odpowiedzi sugerujących
mail
lubmailx
więc to raczej tle pomóc zinterpretować je w kontekście.Notatki historyczne
Początki Uniksa
mail
się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)mail
i ż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
Mail
wielką literą M w 2BSD (1978); ale w 3BSD (1979) zastąpił on również małe literymail
, co doprowadziło do nowego zamieszania. SVR3 (1986) zawiera pochodną, która została nazwanamailx
.x
Przypuszczalnie 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
/mailx
Historia 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
mail
lubmailx
. (Możesz wyszukaćProvides: mailx
.)(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-mailx
Jest to stosunkowo prostymailx
, 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-mailx
jest obecnie nazywas-nail
i nie obsługuje wysyłania załączników z MIME-a
. Zobacz jego stronę podręcznika, a bardziej ogólnie projekt Heirloommailutils
aka GNU Mailutils obejmujemail
/mailx
kompatybilnoś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
.źródło
Inna alternatywa - Swaks (szwajcarski scyzoryk dla SMTP).
źródło
metamail ma narzędzie metasend
źródło
użyłem
i to działało dobrze dla mnie ....
źródło
Zwykle używam tylko polecenia mail na RHEL. Próbowałem mailx i jest dość wydajny.
źródło
najkrótsza droga dla mnie to
tak będzie w twoim przykładzie
dobrą stroną jest to, że mogę przywołać go za pomocą Ctrl + r, aby wysłać kolejny plik ...
źródło
Z maszyny źródłowej
Na maszynie docelowej. Zapisz otrzymaną treść wiadomości jako db.sql.gz.b64 ; następnie..
źródło
Ż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.
źródło
sh
jest jeszcze bardziej wszechobecny. Istnieją duplikaty pytań z odpowiedziami z dobrymi przykładami; Tu jest moje.mailx
ma-a
teraz opcję załączników.źródło
mailx
do. Wierzę, że są dwie implementacje. Z jednej strony-a
są załączniki, z drugiej strony nagłówki.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 push
poleceń, a wszystkie wersje będą przechowywane w skompresowany i zorganizowany sposób.źródło
Oto co robię z jednym dużym plikiem dziennika w CentOS:
źródło
WHOAMI
iHOSTNAME
dwa razy?Jeśli plik jest tekstem, możesz go najłatwiej wysłać w ciele jako:
źródło
za pomocą polecenia mailx
za pomocą sendmaila
źródło
uuencode
na rzecz MIME.eval
i tajemnicze wstrząsy wokół całego urządzenia są tutaj zupełnie niepotrzebne.Mailutils sprawia, że jest to bułka z masłem
-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
źródło
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]
źródło
-A
opcja jest specyficzna dlamailutils
wersji GNU,mail
jak wskazano w mojej odpowiedzi, a także @ rumpel'sJeśli mutt nie działa lub nie jest zainstalowany, spróbuj tego-
źródło