Wie kann ich einen Anhang über die Befehlszeile per E-Mail versenden?


25

Können Anhänge über die Befehlszeile per E-Mail versendet werden?

Wenn möglich, möchte ich etwas so Einfaches wie:

mail -a myfile.txt -t me@example.com -s "Here's my file"

Der standardmäßige Ubuntu-Befehlszeilen-Mail-User-Agent mail(aka mailx) ist MIME-ignorant. Daher können Anhänge nicht auf eine Weise verarbeitet werden, die nicht 1980er-Jahre alt ist. Das ist eine gute Frage, ich suche die kanonische kanonische MUA; da kommt noch mehr.
msw

Antworten:


18

Von allen E-Mail-Benutzeragenten im Ubuntu-Repository scheint mutt die Befehlszeilen-MUA zu sein, die mit Langzeitunterstützung gesegnet ist.

Laut Handbuch können Sie genau Folgendes tun:

mutt -a myfile.txt -s "Here's my file" -- me@example.com

außer es wird nirgendwo hingehen, da man auch einen Mail Transfer Agent benötigt. Beliebte sind:

  • das ehrwürdige sendmail
  • postfix
  • exim4
  • qmail
  • nullmailer

und die einzigen, die Canonical zu unterstützen scheint, sind postfix (danke für die Korrektur Steve) und exim4 .

Man könnte auch sagen, dass xdg-email auch eine richtige Ubuntu-MUA ist, aber es ist ein Bare-Bones-Frontend, das nur Ihre bevorzugte MUA in Ihrem Namen ausführt .

Wenn Sie Ratschläge dazu wünschen, welcher MTA für Ihre Verwendung geeignet sein könnte, öffnen Sie hier möglicherweise eine andere Frage.


Gute Frage, danke. Sie haben mich aufgefordert, meine Mailbox zu bearbeiten. Ich habe nullmailer MTA verwendet, um blind an meinen ISP weiterzuleiten, und der Beispielbefehl mutthat wie angekündigt funktioniert. Übrigens hat nullmailer ein gefälschtes sendmail-Frontend, sodass die meisten Programme, die mit sendmail kommunizieren möchten, ohne großen Aufwand von mir an einen echten MTA weitergeleitet werden.
msw

msw, ich bin mir nicht ganz sicher, warum Sie behaupten, exim4 sei die einzige kanonische Unterstützung, postfix ist ebenfalls in main und wird aktiviert, wenn Sie die Aufgabenauswahl für Mail-Server aus der Ubuntu-Server-Installation auswählen. Ich glaube, exim4 ist der Debian-Standard-MTA, und in der Vergangenheit haben die Paketeinstellungen möglicherweise dazu geführt, dass er standardmäßig abgerufen wurde, aber seit einiger Zeit ist Postfix definitiv der bevorzugte MTA in Ubuntu.
Steve Beattie

Oh, und beachten Sie auch, dass Sie, wenn Sie bsd mail / mailx als Ihre (nicht mime-fähige) MUA verwenden, immer noch einen MTA benötigen, um die Mail tatsächlich zu senden. Aber Mutt ist sowieso besser für dich. :-)
Steve Beattie

11

Ich hatte auch große Probleme mit dem Versenden von Anhangsdateien. Wenn ich eine E-Mail ohne Anhang gesendet habe, war sie erfolgreich, aber ohne Anhang. Dieses Problem wurde existent mit sendemail, mutt, mail, mailx,uuencode Befehle.

Zum Glück wurde es witzig gelöst. Ich benutze Google Mail zum Senden von E-Mails. Sie können Ihr Google Mail-Konto so konfigurieren, dass E-Mails über Befehle im Terminal gesendet werden, wie unter http://www.linuxandlife.com/2013/01/send-email-from-linux-terminal.html angegeben .

Sie können eine Text-E-Mail senden, indem Sie Folgendes verwenden:

mail -s "hello" RECEIVE@mail.com < /home/masoud/YOURFILE.txt 

Sie können jedoch nicht dieselbe Datei als Anhang wie folgt senden:

mail -s "hello" RECEIVE@mail.com -a /home/masoud/YOURFILE.txt

oder:

mail -s "hello" -a /home/masoud/YOURFILE.txt RECEIVE@mail.com

Schließlich habe ich verstanden, dass nur dieses Format einen Anhang senden kann:

echo "your message here" | mail -s "title" -a /home/masoud/YOURFILE.txt RECEIVE@mail.com

Komischerweise besteht der Unterschied in der Existenz des "Echo" -Befehls.

Update: 201808

Scheint, dass die -aOption mit Großbuchstaben -A für den Anhang jetzt geändert wurde . Das -ascheint zum Ändern des Headers laut doc


Ausgezeichnet! Vielen Dank. Ich habe versucht, meine .zshrcDatei an jemanden zu senden , und obwohl ich häufig mailschnelle Nachrichten versende, funktionierte der Versuch, einen Anhang zu senden, nicht. Ich brauchte nur eine Bestätigung, dass es möglich war, zu erkennen, dass die Reihenfolge der Argumente sehr wichtig ist. Das hat bei mir geklappt: mail -s "zshrc" -a ~/.zshrc username@example.com... natürlich musste ich noch den Nachrichtentext eingeben und in ctrl+ddie letzte leere Zeile tippen .
Karl Wilbur

Das Verwenden von mail username@example.com -a ~/.zshrc"funktionierte" dahingehend, dass die Nachricht gesendet wurde, die Datei jedoch nicht gesendet wurde. Wenn ich es versucht mail username@example.com -a ~/.zshrc -s 'zshrc'hätte, wäre es offensichtlich gewesen, dass die Parameter nach der Empfängeradresse ignoriert wurden.
Karl Wilbur

@ Masoud lnk ist kaputt ... wollte es aktualisieren, aber Sie wissen besser, welche Dokumentation Sie bereitgestellt haben, so dass ich es Ihnen
überlassen

6

Ich fand, dass der Befehl und die Parameter vor kurzem geändert worden sind.

Wenn Sie Ihre Anhänge mit diesem Befehl senden möchten:

mail -s "your subject" you@gmail.com -A /your/attachment/absolute/path < /home/you/message.txt

Die Option attachmentsollte -ACAPITAL sein A.


3

Möglicherweise möchten Sie eine Datei aus der Shell senden , ansonsten verwenden Sie Thunderbird .

Versuchen Sie es in diesem Fall thunderbird -remote ... nützlich - vorausgesetzt, Thunderbird läuft normalerweise:

Der Befehl öffnet ein Mail-Erstellungsfenster einer laufenden Thunderbird-Instanz.
Die "Von" -Adresse ist Ihre in Thunderbird konfigurierte Standardadresse .
Auch die vorhandenen Kontoeinstellungen verwendet, es ist keine separate Einrichtung erforderlich.

Für eine E-Mail you@example.commit Betreff "S", Text "B" und einem Anhang /some/absolute/file.txtlautet der Befehl

thunderbird -remote "xfeDoCommand(composeMessage,subject='S',to='you@example.com',body='B',attachment='/some/absolute/file.txt')"

Es gibt zwei Probleme:

Die angehängte Datei muss durch einen absoluten Pfad angegeben werden , was in der Praxis mühsam ist. Dies kann durch Auflösen readlink -frelativer Pfade erfolgen:

thunderbird -remote "xfeDoCommand(composeMessage,subject='S',to='you@example.com',body='B',attachment='$(readlink -f file.txt)')"

Außerdem ist der Befehl zu lang. Verwenden Sie ein Shell-Skript oder eine Shell-Funktion mit vier Argumenten:

thunderbird-compose () {
    thunderbird -remote "xfeDoCommand(composeMessage,subject='$1',to='$2',body='$3',attachment='$(readlink -f $4)')"
}

Mit dieser Funktion wird der Befehl lesbar:

thunderbird-compose 'Some Subject' test@example.com 'Body of message' file1

öffnet ein thunderbird "Write" -Fenster mit dem Anhang und ausgefülltem From, To, Subject und Body-Text. Dieser kann vor dem Senden bearbeitet werden .


2

heirloom-mailxpackage in debian bietet einen mailxBefehl zum einfachen Versenden von MIME-Anhängen. folgendes arbeitet für mich;

 mailx -a attachment.zip -s subject rctp@domain.to

1
Dies war das fehlende Stück, das ich brauchte; die mailund mailxenthalten mit RH-Doppelgängern hat -afür Dateianhänge, aber das in Debian- a -likes enthalten nicht.
DopeGhoti

0

Ich möchte eine weitere Antwort hinzufügen, die zum Hinzufügen von Nachrichtentext zusammen mit dem Anhang verwendet wird. Prost!!

echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- recipient@domain.com
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.