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 me@example.com -s "Here's my file"

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" -- me@example.com

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.


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" RECEIVE@mail.com < /home/masoud/YOURFILE.txt 

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

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

ou:

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

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 RECEIVE@mail.com

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


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 username@example.com... 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 username@example.com -a ~/.zshrca "fonctionné" dans la mesure où elle a envoyé le message mais n'a pas envoyé le fichier. Si j'avais essayé, mail username@example.com -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" you@gmail.com -A /your/attachment/absolute/path < /home/you/message.txt

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


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é à you@example.com, 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='you@example.com',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='you@example.com',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' test@example.com '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.


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 rctp@domain.to

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" -- recipient@domain.com
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.