Wie sende ich eine Datei als E-Mail-Anhang über die Linux-Befehlszeile?

289

Ich habe ein Skript erstellt, das jeden Abend auf meinem Linux-Server ausgeführt wird und mysqldumpmit 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 mailxwie folgt weiterleitete :

$ cat mysqldbbackup.sql | mailx [email protected]

catgibt den Text der Sicherungsdatei wieder, der mailxmit 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.

Kit Roed
quelle
1
Können Sie das Skript freigeben, mit dem Ihre MySQL-Datenbanken gesichert werden?
Almino Melo
Entschuldigung, ich mache das schon eine Weile nicht mehr. Ich weiß, dass es mysqldumpdarum ging, die Ausgabe aufzurufen und dann an eine E-Mail anzuhängen (mit mutt). Möglicherweise hatte ich sogar einen Schritt, der die Ausgabe ebenfalls auf zip / tar.gz komprimierte ...
Kit Roed
1
Rein neugierig, warum senden Sie Ihre Backups per E-Mail gegen scp oder rsync sie?
Jchook

Antworten:

298

Keiner der Köter hat für mich gearbeitet. Es wurde angenommen, dass die E-Mail-Adresse Teil des Anhangs war. Musste tun:

echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- [email protected]
rynop
quelle
1
Ich benutze mutt 1.5.21 (2010-09-15) und es erfordert -a Parameter, um nach Empfänger-E-Mail zu sein
nurettin
Arbeitete für mich mit Mutt 1.5.24 (30.08.2015) auf openSUSE Leap 42.1.
Antonio Vinicius Menezes Medei
3
@fugitive bedeutet "Ende der Optionen". Werfen
Rynop
Gibt es eine Möglichkeit, nach Ausnahmen zu suchen und das Senden erneut zu versuchen?
ti034
79

Oder fehlgeschlagener Köter:

gzip -c mysqldbbackup.sql | uuencode mysqldbbackup.sql.gz  | mail -s "MySQL DB" [email protected]
Daniel Fone
quelle
26
Dadurch wird das nicht codierte Teil inline und nicht als Anhang gesendet . Viele Mail-Clients erkennen dies jedoch und zeigen den nicht codierten Teil als Anhang an.
FuePi
4
Verwenden Sie heutzutage keinen Uuencode mehr. MIME ist etwas komplexer, aber viel benutzerfreundlicher.
Tripleee
@DavidGiven: Sehen Sie zum Beispiel (auf einen Blick) alle anderen Antworten auf diese Frage.
Tripleee
6
Keiner von ihnen benutzt Post!
David gegeben
Dann zB stackoverflow.com/questions/3317174/… und durch einen text/htmlbeliebigen MIME-Typ ersetzen, der für Ihren Anhang sinnvoll ist. (Für dieses konkrete Beispiel, denke ich application/gzip.)
Tripleee
43

Abhängig von Ihrer Linux-Version kann es als Mail bezeichnet werden. Um @David oben zu zitieren:

mail -s "Backup" -a mysqldbbackup.sql [email protected] < message.txt

oder auch:

cat message.txt | mail -s "Backup" -a mysqldbbackup.sql [email protected] 
Nathan Fellman
quelle
@ KarelBílek: Wie wäre es mit der anderen Option?
Nathan Fellman
Beide Lösungen funktionieren bei mir nicht. Ich habe die E-Mail mit Outlook 2013 erhalten und die E-Mail enthält nur den Dateinamen
nickel715
2
Meine Manpage lautet:-a, --append=HEADER: VALUE append given header to the message being sent
Exhuma
2
Nathan, es sieht so aus, als ob dein Zitat von David falsch ist - er hat den muttBefehl benutzt, nicht mail. 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 -aOption in mailbewirkt - ich war dort für eine Minute verwirrt;)
nealmcb
7
anstelle von -a sollten Sie -A verwenden: -a, --append=HEADER: VALUE append given header to the message being sent -A, --attach=FILE attach FILE
Victor Perov
41

Vom Blick auf man mailx, wird das mailx keine Option , eine Datei anzubringen. Sie könnten ein anderes Programm wie mutt verwenden.

echo "This is the message body" | mutt -a file.to.attach -s "subject of message" [email protected]

Befehlszeilenoptionen für Mutt können mit angezeigt werden mutt -h.

Chris N.
quelle
Vielen Dank! Das hat den Trick gemacht, ich hatte Probleme, Köter dazu zu bringen, die Aktion still zu machen.
Kit Roed
10
Siehe Antwort unten ( stackoverflow.com/a/9524359/10608 ), da anscheinend die Syntax für mutt geändert wurde, für die jetzt a erforderlich ist --.
Alexander Bird
29

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

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
quelle
Ich glaube, in Ihrem Beispiel sollte es "sendEmail" anstelle von "sendemail" sein.
Davit
1
Ja und Nein - die Quelle (Kaspisch) verwendet ein Großbuchstaben E, während dies eine ungewöhnliche Benennungsstrategie für Befehlszeilentools (in der Unix-Welt) ist, bietet zumindest die Ubuntu-Verpackung dieser Software sowohl sendemailals auch sendEmailin /usr/bin/.
Fredrik Wendt
Mein Xubuntu 14.04.3 nicht installiertSendEmail
Vitaly Zdanevich
3
"sudo apt install sendemail", um sendemail zu installieren und "-f [email protected]" hinzuzufügen, ein obligatorisches from-Feld, damit der Befehl funktioniert. sendemail -f [email protected] [email protected] -m "Here are your files!" -a file1.jpg file2.zip
Sailendra Pinupolu
28

Ich benutze mpack.

mpack -s subject file [email protected]

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:

mpack -s subject /dev/stdin [email protected] < file

quelle
Dies könnte in Bash für stdin funktionieren. Ich habe kein Mpack, also habe ich es nicht versucht: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
quelle
4
Dies sollte die akzeptierte Antwort sein. Verwendet Standard-Mailx und funktioniert einwandfrei. Mutt v1.5.21 weigert sich,> 1 MB Anhänge zu senden, wenn cron verwendet wird.
Joseph
Ich habe nach etwas gesucht, das in EC2 funktioniert, und das hat gut funktioniert.
Singularität
6
mailxist nicht richtig standardisiert. Jede Antwort, die dies empfiehlt, sollte auf diese Einschränkung hinweisen. Es werden mindestens drei inkompatible Varianten verwendet.
Tripleee
13

Ich habe diese Funktion einmal für ksh unter Solaris geschrieben (verwendet Perl für die Base64-Codierung):

# 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
quelle
8
Unter GNU / Linux kann man base64anstelle von Perl einen Befehl zum Codieren verwenden
MestreLion
12

Sie können mutt verwenden , um die E-Mail mit Anhang zu senden

mutt -s "Backup" -a mysqldbbackup.sql [email protected] < message.txt
David Schlosnagle
quelle
2
Zumindest ab Mutt 1.5.21 (Ubuntu Trusty) müssen Sie die -aOption nach dem Empfänger setzen: mutt -s "Backup" [email protected] -a mysqldbbackup.sql < message.txtoder die --Option vor dem Empfänger verwenden, wie in der Antwort von rynop gezeigt.
Nealmcb
10

Senden Sie eine Klartext-E-Mail mit einem Klartext-Anhang mit mailx:

(
  /usr/bin/uuencode attachfile.txt myattachedfilename.txt; 
  /usr/bin/echo "Body of text"
) | mailx -s 'Subject' [email protected]

Unten ist der gleiche Befehl wie oben, ohne die Zeilenumbrüche

( /usr/bin/uuencode /home/el/attachfile.txt myattachedfilename.txt; /usr/bin/echo "Body of text" ) | mailx -s 'Subject' [email protected]

Stellen Sie sicher, dass Sie eine Datei /home/el/attachfile.txtmit folgendem Inhalt definiert haben :

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

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:

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

Ändern Sie die Exportvariablen oben auf test.sh , um Ihre Adresse und Dateinamen wiederzugeben.

Laden Sie ein Test-PDF-Dokument herunter und /home/elfügen Sie es in die Datei pdf-test.pdf ein

Erstellen Sie eine Datei mit dem Namen /home/el/email_body.htm und fügen Sie diese Zeile ein:

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

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.

user1651561
quelle
1
Bei mir hat es umgekehrt funktioniert. (echo 'Email Body'; uuencode filename filename) | mailx -s 'Subject' [email protected]
Vicky
uuencodeist 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.
Tripleee
9

Es gibt mehrere Antworten hier was darauf hindeutet , mailoder mailxso ist dies eher ein Hintergrund ist, damit Sie diese in Zusammenhang interpretieren.

Historische Notizen

Die Ursprünge von Unix mailreichen 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), mailund dass es keine einzige Codebasis gibt, die eindeutig als "the" identifiziert werden kann mail.

Einer der Anwärter auf diese Position ist jedoch sicherlich "Berkeley Mail", das ursprünglich Mailin 2BSD (1978) mit einem Großbuchstaben M bezeichnet wurde; In 3BSD (1979) wurde jedoch auch der Kleinbuchstabenbefehl ersetzt mail, was zu neuer Verwirrung führte. SVR3 (1986) enthielt ein Derivat, das genannt wurde mailx. Das xwurde 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/ mailxGeschichtsnotizen 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 mailoder mailx-Befehl enthalten. (Sie können suchen 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

(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-mailxist relativ einfach mailxund 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-mailxgenannt wird jetzt s-nailund tut Unterstützung sendet MIME - Anhänge mit -a. Siehe die Handbuchseite und allgemein das Heirloom-Projekt
  • mailutilsaka GNU Mailutils enthält einen mail/ mailxkompatiblen 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.

Tripleee
quelle
Ich habe dies ursprünglich als Antwort auf eine mäßig beliebte doppelte Frage gestapelt stackoverflow.com/questions/902591/…
Tripleee
4

Eine weitere Alternative - Swaks (Schweizer Taschenmesser für 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
quelle
2

metamail hat das Tool metasend

metasend -f mysqlbackup.sql.gz -t [email protected] -s Backup -m application/x-gzip -b
Gunstick
quelle
Dies wurde früher fast überall installiert, aber fast nie benutzt. Da es lange Zeit nicht gewartet wurde (und immer noch AFAIK ist), wurde es auf vielen Plattformen aus dem De-facto- Standard-Toolset entfernt.
Tripleee
2

ich benutzte

echo "Start of Body" && uuencode log.cfg readme.txt | mail -s "subject" "[email protected]" 

und das hat bei mir gut funktioniert ....

Poncho
quelle
1

Ich benutze normalerweise nur den Mail-Befehl auf RHEL. Ich habe mailx ausprobiert und es ist ziemlich effizient.

mailx -s "Sending Files" -a First_LocalConfig.conf -a
Second_LocalConfig.conf [email protected]

This is the content of my msg.

.
Alejandro Santillan
quelle
1

Der kürzeste Weg für mich ist

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

Also für dein Beispiel wird es sein

file=your_sql.log;gzip -c $file;uuencode ${file}.gz ${file}|mail -s "file with magnets" [email protected]

Das Gute daran ist, dass ich mich mit Strg + r daran erinnern kann , eine weitere Datei zu senden ...

Pipo
quelle
Die geschweiften Klammern nützen Ihnen nicht viel, aber um vollständig portabel zu sein, sollten Sie die Variablen in doppelte Anführungszeichen setzen. Siehe auch stackoverflow.com/questions/10067266/…
Tripleee
1

Von der Quellmaschine

mysqldump --defaults-extra-file=sql.cnf database | gzip | base64 | mail [email protected]

Auf dem Zielcomputer. Speichern Sie den empfangenen E-Mail- Text als db.sql.gz.b64 . dann..

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

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.

Mike Graf
quelle
2
Möglicherweise ist nicht auf jedem Server PHP installiert. Wenn Sie wirklich den Pfad "Schreiben Sie Ihr eigenes Skript" einschlagen möchten, sind Perl oder Python viel besser geeignet, da sie normalerweise standardmäßig verfügbar sind.
Exhuma
shist noch allgegenwärtiger. Es gibt doppelte Fragen mit Antworten mit guten Beispielen; hier ist mein.
Tripleee
0

mailxhat jetzt eine -aOption für Anhänge.

Allan Pinto
quelle
2
Die "-a" Option ist für Header
Yves Martin
man mail [x], Version 12.5 vom 09.10.10 (vor einigen Jahren) sagt eindeutig -a Datei Hänge die angegebene Datei an die Nachricht an.`
fche
4
Einige Versionen von mailxdo. Ich glaube, es gibt zwei Implementierungen. Zum einen -afür Anhänge, zum anderen für Header.
Exhuma
1
Die Version von mailx in Ubuntu stammt von GNU und bedeutet dort einen Header hinzufügen. manpages.ubuntu.com/manpages/lucid/en/man1/mailx.1.html Welches System und welches Mailx erstellt einen Anhang?
Nealmcb
3
In der neuen Implementierung ist "-a" für Header und "-A" für Attchments
Avi Mehenwal
0

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 pushBefehle verwenden, und alle Versionen werden komprimiert und organisiert gespeichert.

Yoav
quelle
0

So mache ich es mit einer großen Protokolldatei in 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
quelle
Warum definieren Sie WHOAMIund HOSTNAME zweimal?
David C. Rankin
Dies hat mehrere Fehler im Shell-Codierungsstil. shellcheck.net wird auf einige, aber nicht alle hinweisen.
Tripleee
0

Wenn es sich bei der Datei um Text handelt, können Sie sie am einfachsten im Text senden:

sendmail [email protected] < message.txt
nurp
quelle
1
Dies sendet es nicht als Anhang oder sogar als Nachrichtentext. Sendmail erwartet, dass die Eingabe eine vollständige, wohlgeformte RFC5322-E-Mail-Nachricht ist, und kann auf interessante Weise fehlschlagen, wenn dies nicht der Fall ist.
Tripleee
0

mit dem Befehl mailx

 echo "Message Body Here" | mailx -s "Subject Here" -a file_name [email protected]

mit sendmail

#!/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
quelle
1
sendmail ist ein schönes Beispiel, ich bin froh, dass ich es hier gefunden habe.
Honza P.
Beachten Sie, dass Sie am Anfang von "Ihr Körper" eine leere Zeile benötigen, da sonst der Körper in den Kopfzeilen verschwindet oder die Nachricht möglicherweise vollständig unterbrochen wird. Siehe auch Hinweise an anderer Stelle zum Vermeiden uuencodezugunsten von MIME.
Tripleee
Und die monströsen evalund mysteriösen Backticks rund um die ganze Erfindung sind hier völlig unnötig.
Tripleee
0

Mailutils macht dies zu einem Kinderspiel

echo "Body" | mail.mailutils -M -s "My Subject" -A attachment.pdf [email protected]
  • -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

sudo apt install mailutils
Rumpel
quelle
0

Abhängig von Ihren Mail-Befehlsoptionen (überprüfen Sie dies mit man mail) und der Version, die Sie ausführen können

echo yourBody|mail -s yoursubject -A /your/attachment/file [email protected]

Pipo
quelle
Dies scheint vorhandene Antworten zu duplizieren, ohne etwas Neues hinzuzufügen. Insbesondere ist die -AOption spezifisch für die GNU- mailutilsVersion von, mailwie in meiner Antwort erwähnt, sowie für @
rumpels
-1

Wenn mutt nicht funktioniert oder nicht installiert ist, versuchen Sie Folgendes:

*#!/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
quelle