Ich habe ein Skript erstellt, das jeden Abend auf meinem Linux-Server ausgeführt wird und mysqldump
mit dem jede meiner MySQL-Datenbanken in SQL-Dateien gesichert und als komprimierte TAR-Datei zusammengefasst wird. Der nächste Schritt, den ich ausführen möchte, besteht darin, diese TAR-Datei zur sicheren Aufbewahrung per E-Mail an einen Remote-E-Mail-Server zu senden. Ich konnte dem Rohskript im Text eine E-Mail senden, indem ich die Sicherungstextdatei mailx
wie folgt weiterleitete :
$ cat mysqldbbackup.sql | mailx [email protected]
cat
gibt den Text der Sicherungsdatei wieder, der mailx
mit der als Argument übergebenen E-Mail-Adresse des Empfängers an das Programm weitergeleitet wird.
Während dies das erreicht, was ich brauche, denke ich, dass es einen Schritt besser sein könnte. Gibt es eine Möglichkeit, mithilfe von Shell-Skripten oder auf andere Weise die komprimierte .tar-Datei als Anhang an eine ausgehende E-Mail-Nachricht zu senden ? Dies würde es übertreffen, sich mit sehr langen E-Mail-Nachrichten befassen zu müssen, die Header-Daten enthalten und häufig Probleme mit dem Zeilenumbruch usw. haben.
quelle
mysqldump
darum ging, die Ausgabe aufzurufen und dann an eine E-Mail anzuhängen (mitmutt
). Möglicherweise hatte ich sogar einen Schritt, der die Ausgabe ebenfalls auf zip / tar.gz komprimierte ...Antworten:
Keiner der Köter hat für mich gearbeitet. Es wurde angenommen, dass die E-Mail-Adresse Teil des Anhangs war. Musste tun:
quelle
Oder fehlgeschlagener Köter:
quelle
text/html
beliebigen MIME-Typ ersetzen, der für Ihren Anhang sinnvoll ist. (Für dieses konkrete Beispiel, denke ichapplication/gzip
.)Abhängig von Ihrer Linux-Version kann es als Mail bezeichnet werden. Um @David oben zu zitieren:
oder auch:
quelle
-a, --append=HEADER: VALUE append given header to the message being sent
mutt
Befehl benutzt, nichtmail
. Wie andere bereits betont haben, scheint Mutt nun ein--
Argument vor der Adresse zu benötigen . Und ich sehe, dass @exhuma und ich uns tatsächlich einig sind, was die-a
Option inmail
bewirkt - ich war dort für eine Minute verwirrt;)-a, --append=HEADER: VALUE append given header to the message being sent
-A, --attach=FILE attach FILE
Vom Blick auf
man mailx
, wird das mailx keine Option , eine Datei anzubringen. Sie könnten ein anderes Programm wie mutt verwenden.Befehlszeilenoptionen für Mutt können mit angezeigt werden
mutt -h
.quelle
--
.Ich verwende SendEmail, das für dieses Szenario erstellt wurde. Es ist für Ubuntu gepackt, daher gehe ich davon aus, dass es verfügbar ist
http://caspian.dotconf.net/menu/Software/SendEmail/
quelle
sendemail
als auchsendEmail
in/usr/bin/
.SendEmail
sendemail -f [email protected] [email protected] -m "Here are your files!" -a file1.jpg file2.zip
Ich benutze mpack.
Leider erkennt mpack '-' nicht als Alias für stdin. Aber die folgende Arbeit, und kann leicht in einen (Shell-) Alias oder ein Skript eingeschlossen werden:
quelle
mpack -s subject /dev/stdin [email protected] <(stdout_generating_program)
quelle
mailx
ist nicht richtig standardisiert. Jede Antwort, die dies empfiehlt, sollte auf diese Einschränkung hinweisen. Es werden mindestens drei inkompatible Varianten verwendet.Ich habe diese Funktion einmal für ksh unter Solaris geschrieben (verwendet Perl für die Base64-Codierung):
quelle
base64
anstelle von Perl einen Befehl zum Codieren verwendenSie können mutt verwenden , um die E-Mail mit Anhang zu senden
quelle
-a
Option nach dem Empfänger setzen:mutt -s "Backup" [email protected] -a mysqldbbackup.sql < message.txt
oder die--
Option vor dem Empfänger verwenden, wie in der Antwort von rynop gezeigt.Senden Sie eine Klartext-E-Mail mit einem Klartext-Anhang mit mailx:
Unten ist der gleiche Befehl wie oben, ohne die Zeilenumbrüche
Stellen Sie sicher, dass Sie eine Datei
/home/el/attachfile.txt
mit folgendem Inhalt definiert haben :Wenn Sie keinen Uuencode haben, lesen Sie diesen: /unix/16277/how-do-i-get-uuencode-to-work
Senden Sie unter Linux HTML-Text-E-Mails mit einem PDF-Anhang mit sendmail:
Stellen Sie sicher, dass Sie ksh installiert haben:
yum info ksh
Stellen Sie sicher, dass sendmail installiert und konfiguriert ist.
Stellen Sie sicher, dass Sie uuencode installiert und verfügbar haben: /unix/16277/how-do-i-get-uuencode-to-work
Erstellen Sie eine neue Datei mit dem Namen
test.sh
und legen Sie sie in Ihrem Home-Verzeichnis ab:/home/el
Geben Sie den folgenden Code ein
test.sh
:Ändern Sie die Exportvariablen oben auf
test.sh
, um Ihre Adresse und Dateinamen wiederzugeben.Laden Sie ein Test-PDF-Dokument herunter und
/home/el
fügen Sie es in die Datei pdf-test.pdf einErstellen Sie eine Datei mit dem Namen /home/el/email_body.htm und fügen Sie diese Zeile ein:
Stellen Sie sicher, dass die PDF-Datei über ausreichend 755 Berechtigungen verfügt.
Führen Sie das Skript aus
./test.sh
Überprüfen Sie Ihren E-Mail-Posteingang, der Text sollte im HTML-Format vorliegen und die PDF-Datei wird automatisch als Binärdatei interpretiert. Achten Sie darauf, diese Funktion nicht mehr als 15 Mal am Tag zu verwenden. Selbst wenn Sie die E-Mails an sich selbst senden, können Spam-Filter in Google Mail eine Domain auf die schwarze Liste setzen, ohne dass Sie die Möglichkeit haben, sie durchzulassen. Und Sie werden feststellen, dass dies nicht mehr funktioniert oder nur den Anhang durchlässt oder die E-Mail überhaupt nicht durchkommt. Wenn Sie diesbezüglich viele Tests durchführen müssen, verteilen Sie diese auf mehrere Tage, oder Sie werden als Spammer bezeichnet, und diese Funktion funktioniert nicht mehr.
quelle
(echo 'Email Body'; uuencode filename filename) | mailx -s 'Subject' [email protected]
uuencode
ist nicht richtig ein Anhang. Es wird einfach ein vom Computer lesbarer Textklumpen in die Mitte eines anderen Textes eingebettet. Früher hat es gut funktioniert, als es keinen besseren Mechanismus gab, aber das war vor über 20 Jahren.Es gibt mehrere Antworten hier was darauf hindeutet ,
mail
odermailx
so ist dies eher ein Hintergrund ist, damit Sie diese in Zusammenhang interpretieren.Historische Notizen
Die Ursprünge von Unix
mail
reichen bis in die Nebel der frühen Geschichte von Bell Labs Unix ™ (1969?) Zurück, und wir können wahrscheinlich nicht hoffen, hier auf die vollständige Genealogie einzugehen. Es genügt zu sagen, dass es viele Programme gibt, die Code von oder Neuimplementierung erben (oder Code von einer Neuimplementierung von erben),mail
und dass es keine einzige Codebasis gibt, die eindeutig als "the" identifiziert werden kannmail
.Einer der Anwärter auf diese Position ist jedoch sicherlich "Berkeley Mail", das ursprünglich
Mail
in 2BSD (1978) mit einem Großbuchstaben M bezeichnet wurde; In 3BSD (1979) wurde jedoch auch der Kleinbuchstabenbefehl ersetztmail
, was zu neuer Verwirrung führte. SVR3 (1986) enthielt ein Derivat, das genannt wurdemailx
. Dasx
wurde vermutlich hinzugefügt, um es einzigartig und unverwechselbar zu machen; Aber auch dies wurde jetzt kopiert, neu implementiert und verstümmelt, so dass es keine einzige Einzelversion gibt, die endgültig ist.Früher war der De-facto- Standard für das Versenden von Binärdateien über E-Mail
uuencode
. Es existiert immer noch, hat aber zahlreiche Usability-Probleme; Wenn möglich, sollten Sie stattdessen MIME-Anhänge senden, es sei denn, Sie möchten ausdrücklich mit den späten 1980er Jahren kommunizieren können.MIME wurde Anfang der neunziger Jahre eingeführt, um verschiedene Probleme mit E-Mails zu lösen, einschließlich der Unterstützung verschiedener Arten von Inhalten außer einfachem Text in einem einzigen Zeichensatz, der nur für eine Teilmenge von Englisch (und, wie wir wissen, Hawaiianisch) wirklich geeignet ist ). Dies führte die Unterstützung für mehrteilige Nachrichten, Internationalisierung, umfangreiche Inhaltstypen usw. ein und gewann in den neunziger Jahren schnell an Bedeutung.
(Die Heirloom-
mail
/mailx
Geschichtsnotizen waren beim Verfassen dieses Artikels am hilfreichsten und sind auf jeden Fall eine Lektüre wert, wenn Sie sich für solche Dinge interessieren .)Aktuelle Angebote
Ab 2018 verfügt Debian über drei Pakete, die einen
mail
odermailx
-Befehl enthalten. (Sie können suchenProvides: mailx
.)(Ich nehme Debian nicht als Empfehlung heraus; es ist das, was ich verwende, daher bin ich damit vertraut; und es bietet eine Möglichkeit, die verschiedenen Alternativen eindeutig zu unterscheiden, indem auf ihre jeweiligen Paketnamen Bezug genommen wird. Es ist offensichtlich auch die Distribution von welches Ubuntu diese Pakete bekommt.)
bsd-mailx
ist relativ einfachmailx
und scheint das Senden von MIME-Anhängen nicht zu unterstützen. Lesen Sie die Handbuchseite und beachten Sie, dass dies diejenige ist, die Sie standardmäßig auf einem * BSD-System, einschließlich MacOS, erwarten würden.heirloom-mailx
genannt wird jetzts-nail
und tut Unterstützung sendet MIME - Anhänge mit-a
. Siehe die Handbuchseite und allgemein das Heirloom-Projektmailutils
aka GNU Mailutils enthält einenmail
/mailx
kompatiblen Wrapper, der das Senden von MIME-Anhängen mit unterstützt-A
Mit diesen Bedenken, wenn Sie Ihren Code müssen tragbar sein und auf einem etwas komplexen Paket abhängen kann, ist die einfache Art und Weise zu portably Anlagen senden MIME ist die Verwendung
mutt
.quelle
Eine weitere Alternative - Swaks (Schweizer Taschenmesser für SMTP).
quelle
metamail hat das Tool metasend
quelle
ich benutzte
und das hat bei mir gut funktioniert ....
quelle
Ich benutze normalerweise nur den Mail-Befehl auf RHEL. Ich habe mailx ausprobiert und es ist ziemlich effizient.
quelle
Der kürzeste Weg für mich ist
Also für dein Beispiel wird es sein
Das Gute daran ist, dass ich mich mit Strg + r daran erinnern kann , eine weitere Datei zu senden ...
quelle
Von der Quellmaschine
Auf dem Zielcomputer. Speichern Sie den empfangenen E-Mail- Text als db.sql.gz.b64 . dann..
quelle
Um meine 2 Cent hinzuzufügen, würde ich mein eigenes PHP-Skript schreiben:
http://php.net/manual/en/function.mail.php
In den Beispielen auf dieser Seite gibt es viele Möglichkeiten, den Anhang zu erstellen.
quelle
sh
ist noch allgegenwärtiger. Es gibt doppelte Fragen mit Antworten mit guten Beispielen; hier ist mein.mailx
hat jetzt eine-a
Option für Anhänge.quelle
mailx
do. Ich glaube, es gibt zwei Implementierungen. Zum einen-a
für Anhänge, zum anderen für Header.Keine Methode zum Senden von E-Mails, aber Sie können dafür einen Online-Git-Server (z. B. Bitbucket oder einen ähnlichen Dienst) verwenden.
Auf diese Weise können Sie
git push
Befehle verwenden, und alle Versionen werden komprimiert und organisiert gespeichert.quelle
So mache ich es mit einer großen Protokolldatei in CentOS:
quelle
WHOAMI
undHOSTNAME
zweimal?Wenn es sich bei der Datei um Text handelt, können Sie sie am einfachsten im Text senden:
quelle
mit dem Befehl mailx
mit sendmail
quelle
uuencode
zugunsten von MIME.eval
und mysteriösen Backticks rund um die ganze Erfindung sind hier völlig unnötig.Mailutils macht dies zu einem Kinderspiel
-A file
hängt eine Datei an-M
aktiviert MIME, sodass Sie einen Anhang und einen Klartextkörper haben können.Wenn noch nicht installiert, ausführen
quelle
Abhängig von Ihren Mail-Befehlsoptionen (überprüfen Sie dies mit
man mail
) und der Version, die Sie ausführen könnenecho yourBody|mail -s yoursubject -A /your/attachment/file [email protected]
quelle
-A
Option spezifisch für die GNU-mailutils
Version von,mail
wie in meiner Antwort erwähnt, sowie für @Wenn mutt nicht funktioniert oder nicht installiert ist, versuchen Sie Folgendes:
quelle