Comment envoyer une pièce jointe par e-mail depuis la ligne de commande

26

Est-il possible d'envoyer des pièces jointes par e-mail à partir de la ligne de commande?

Si possible, j'aimerais quelque chose d'aussi simple que:

mail -a myfile.txt -t [email protected] -s "Here's my file"
conorgriffin
la source
1
L'agent utilisateur de messagerie par défaut de la ligne de commande ubuntu mail(aka mailx) est MIME ignorant et ne peut donc pas gérer les pièces jointes d'une manière différente de 1980. C'est une bonne question, je recherche le MUA canonique canonique; plus à venir.
msw

Réponses:

18

De tous les agents utilisateurs de messagerie dans le référentiel Ubuntu, il apparaît que mutt est le MUA de ligne de commande qui bénéficie du support à long terme.

Selon le manuel , vous pouvez faire quelque chose exactement comme:

mutt -a myfile.txt -s "Here's my file" -- [email protected]

sauf qu'il n'ira nulle part, car il faut également un agent de transfert de courrier. Les plus populaires sont:

  • le vénérable sendmail
  • suffixe
  • exim4
  • qmail
  • nullmailer

et les seuls que Canonical semble supporter sont postfix (merci pour la correction Steve) et exim4 .

On pourrait également dire que xdg-email est également un MUA Ubuntu approprié, mais c'est un frontal simple qui n'exécute que votre MUA préféré en votre nom.

Si vous souhaitez des conseils sur le MTA qui pourrait convenir à votre utilisation, ouvrez peut-être une autre question ici.

msw
la source
Grande question, merci. Vous m'avez invité à faire fonctionner le courrier sur ma boîte. J'ai utilisé nullmailer MTA pour transmettre aveuglément à mon FAI, et l'exemple de muttcommande a fonctionné comme annoncé. Soit dit en passant, nullmailer a un faux frontal sendmail, de sorte que la plupart des programmes qui s'attendent à parler à sendmail sont transférés vers un véritable MTA sans aucun effort de ma part.
msw
msw, je ne sais pas trop pourquoi vous prétendez que exim4 est le seul support canonique, postfix est également en principal et est ce qui est activé si vous sélectionnez la sélection de tâches du serveur de messagerie dans l'installation ubuntu-server. Je crois qu'exim4 est le MTA par défaut de Debian, et dans le passé, les préférences de l'empaquetage ont pu le faire par défaut, mais depuis un certain temps maintenant, postfix est certainement le MTA préféré dans Ubuntu.
Steve Beattie
Oh, et notez également que si vous utilisiez bsd mail / mailx en tant que MUA (non mime), vous auriez toujours besoin d'un MTA pour envoyer le courrier. Mais c'est mieux pour toi de toute façon. :-)
Steve Beattie
11

J'ai également eu de la difficulté à envoyer des fichiers joints. Lorsque j'ai envoyé un e-mail sans pièce jointe, il a réussi, mais pas avec pièce jointe. Ce problème a été existant avec sendemail, mutt, mail, mailx, uuencodecommandes.

Heureusement, cela a été résolu de façon amusante. J'utilise Gmail pour envoyer des e-mails. Vous pouvez configurer votre gmail pour l'envoi d'e-mails via des commandes dans le terminal comme indiqué sur http://www.linuxandlife.com/2013/01/send-email-from-linux-terminal.html .

Vous pouvez envoyer un e-mail texte en utilisant:

mail -s "hello" [email protected] < /home/masoud/YOURFILE.txt 

mais vous ne pouvez pas envoyer le même fichier en pièce jointe que ci-dessous:

mail -s "hello" [email protected] -a /home/masoud/YOURFILE.txt

ou:

mail -s "hello" -a /home/masoud/YOURFILE.txt [email protected]

Enfin, j'ai compris que seul ce format pouvait envoyer une pièce jointe:

echo "your message here" | mail -s "title" -a /home/masoud/YOURFILE.txt [email protected]

Curieusement, la différence est l'existence de la commande "echo".

Mise à jour: 201808

Semble que l' -aoption a été modifiée avec majuscule -A pour la pièce jointe maintenant. Le -asemble être pour changer l'en-tête selon le doc

Masoud
la source
Excellent! Merci. J'essayais d'envoyer mon .zshrcfichier à quelqu'un et bien que j'utilise mailbeaucoup pour envoyer des messages rapides, essayer d'envoyer une pièce jointe ne fonctionnait pas. J'avais juste besoin d'une confirmation qu'il était possible de réaliser que l' ordre des arguments était très important. Cela a fonctionné pour moi: mail -s "zshrc" -a ~/.zshrc [email protected]... bien sûr, je devais encore taper le corps du message et appuyer ctrl+dsur la dernière ligne vierge.
Karl Wilbur
L'utilisation mail [email protected] -a ~/.zshrca "fonctionné" dans la mesure où elle a envoyé le message mais n'a pas envoyé le fichier. Si j'avais essayé, mail [email protected] -a ~/.zshrc -s 'zshrc'il aurait été évident que les paramètres après l'adresse du destinataire étaient ignorés.
Karl Wilbur
@Masoud lnk est cassé ... je voulais le mettre à jour, mais vous savez mieux quelle documentation vous avez fournie alors je vous la laisse
Philippe Gachoud
6

J'ai trouvé que la commande et les paramètres ont été modifiés récemment.

Si vous souhaitez envoyer vos pièces jointes avec cette commande:

mail -s "your subject" [email protected] -A /your/attachment/absolute/path < /home/you/message.txt

L'option attachmentdevrait être celle -Aqui est CAPITAL A.

Alex
la source
3

Vous voudrez peut-être envoyer un fichier à partir du shell , mais sinon, utilisez Thunderbird .

Dans ce cas, essayez thunderbird -remote ...est utile - en supposant que Thunderbird est généralement en cours d'exécution:

La commande ouvre une fenêtre de composition de courrier d'une instance de Thunderbird en cours d'exécution.
L'adresse "De" est votre adresse par défaut configurée dans Thunderbird.
En outre, les paramètres de compte existants sont utilisés, aucune configuration distincte n'est requise.

Pour un mail adressé à [email protected], avec le sujet "S", le corps "B", et une pièce jointe /some/absolute/file.txt, la commande est

thunderbird -remote "xfeDoCommand(composeMessage,subject='S',to='[email protected]',body='B',attachment='/some/absolute/file.txt')"

Il y a deux problèmes:

Le fichier joint doit être donné par un chemin absolu , ce qui est fastidieux en pratique. Cela peut être géré en utilisant readlink -fpour résoudre les chemins relatifs:

thunderbird -remote "xfeDoCommand(composeMessage,subject='S',to='[email protected]',body='B',attachment='$(readlink -f file.txt)')"

De plus, la commande est trop longue. Utilisez un script shell ou une fonction shell, avec quatre arguments:

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

Avec cette fonction, la commande devient lisible:

thunderbird-compose 'Some Subject' [email protected] 'Body of message' file1

ouvrira une fenêtre "Ecrire" de thunderbird avec la pièce jointe et le texte De, À, Sujet et corps rempli. Il peut être modifié avant de l'envoyer.

Volker Siegel
la source
2

heirloom-mailxle paquet dans debian fournit la mailxcommande pour envoyer facilement les pièces jointes MIME. œuvres suivantes pour moi;

 mailx -a attachment.zip -s subject [email protected]
Furkan Mustafa
la source
1
C'était la pièce manquante dont j'avais besoin; le mailet mailxinclus avec RH-alikes a -apour les pièces jointes, mais pas celui inclus dans Debian-alikes.
DopeGhoti
0

Je souhaite ajouter une autre réponse qui est utilisée pour ajouter le corps du texte avec la pièce jointe. À votre santé!!

echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- [email protected]
Anandu M Das
la source