Question Le moyen le plus simple d'envoyer un fichier par courrier électronique via la ligne de commande dans * nix?


Quelle est la commande la plus facile - et de préférence la plus portable - que je puisse utiliser pour envoyer par courrier électronique un seul fichier en tant que pièce jointe à un shell * nix?


10
2018-06-02 09:15


origine




Réponses:


En supposant que c'est une pièce jointe binaire:

uuencode [nom du fichier] [nom du fichier] | mail -s [objet] [adresse du destinataire]

Vous n'avez pas besoin de vous préoccuper du codage UU s'il s'agit uniquement d'un fichier texte, par exemple:

mail -s [objet] [adresse du destinataire] <[nom du fichier]

La plupart des * NIX ont le courrier et le code uuencode, donc cela devrait fonctionner à peu près n'importe où


11
2018-06-02 09:23



Que diriez-vous si je veux le fichier texte en tant que pièce jointe et non dans le corps du message? - Yuval A
Cela dépend - je ne pense pas qu'un courrier simple GNU puisse le faire, vous devez donc utiliser un client de messagerie réel; Pine, Mutt, ou quelque chose de similaire. Laquelle de ces options est disponible dépend de celles installées par vos systèmes. En utilisant mutt, la réponse de Gavin (ci-dessous) fonctionnera parfaitement. - RainyRat
Pine is good! Puis-je l'utiliser via la ligne de commande avec l'aide de l'interface graphique textuelle? - Yuval A
Je pense que c'est faisable. Jettes un coup d'oeil à staff.washington.edu/chappa/pine/info/outgoing.html pour plus. - RainyRat


En utilisant mutt, vous pouvez:

mutt -z -a <file> -s <subject> -- user@example.com

Ou, si vous ne voulez pas taper de corps:

mutt -z -a <file> -s <subject> -- user@example.com < /dev/null


11
2018-06-02 09:25



Mutt n'est pas disponible sur mes systèmes, merci quand même - Yuval A
Je pense que vous allez trouver que cela va être un mélange entre ce qui est facile et ce qui est portable. mailx est portable, mais pas forcément facile. Comme RainyRat le mentionne, je pense que vous allez devoir utiliser une MUA complète et la lancer à partir de la ligne de commande. - Gavin McTaggart
Je devais ajouter un -- avant l'adresse e-mail pour que ces commandes fonctionnent. - Doctor Mohawk
Des tirets sont en fait nécessaires pour séparer l'adresse e-mail des noms de fichier "--utilisateur@exemple.com", @DoctorMohawk est correct. Essayer de les ajouter ci-dessus au corps de la réponse. - Jeff Clayton


"sendEmail est un client de messagerie SMTP en ligne de commande léger. Si vous avez besoin d'envoyer un courrier électronique à partir d'une ligne de commande, ce programme gratuit est parfait: simple à utiliser et riche en fonctionnalités. Il a été conçu pour être utilisé dans les scripts bash, les fichiers batch, les programmes Perl et les sites Web, mais est assez adaptable et répondra probablement à vos besoins. SendEmail est écrit en Perl et est unique en ce sens qu'il ne nécessite AUCUN MODULES. Il possède un ensemble d’options de ligne de commande intuitives et flexibles, ce qui le rend très facile à apprendre et à utiliser. [Plates-formes prises en charge: Linux, BSD, OS X, Windows 98, Windows NT, Windows 2000 et Windows XP] "

Je l'ai déjà utilisé et je l'ai vraiment aimé. Vous pouvez joindre des fichiers avec l'option -a.


2
2018-06-02 14:29



+1 - C'était parfait pour ce dont j'avais besoin, car c'est facile et toujours activement maintenu! Si vous êtes sur un système Debian, vous pouvez simplement aptitude install sendemail. Notez que la commande est installée en tant que sendEmail avec un 'E' majuscule. - Topher Fangio
En fait, l'archive contient un script Perl et quelques documents. Vous pouvez simplement le télécharger, l'extraire et l'exécuter (à condition que votre système dispose de Perl). Content que ça vous plaise, cependant. - Clinton Blackmore


Je ne peux pas ajouter de commentaire, mais ..

  • Les réponses à cette question dépendront beaucoup de ce qui, le cas échéant, est dérivé de mailx vous avez disponible.
  • Bien que le fichier doive être affiché sans aucun problème par la MUA destinataire, la tuyauterie à partir de uuencode ne produira pas techniquement un email avec une pièce jointe. Jetez un coup d'oeil à la source de l'email que vous recevez pour voir pourquoi.

1
2018-06-02 09:32



+1 pour la vérité. Je n'avais même pas réalisé qu'il existait une version de mailx pouvant envoyer des pièces jointes (la mienne n'en a certainement pas). Vous avez également raison concernant le codage uud manuel requis avec le pipeline uuencode -> mail. - Gavin McTaggart


Si vous souhaitez une portabilité absolue, vous pouvez établir une connexion telnet avec votre serveur de messagerie sur le port 25 et établir directement des commandes SMTP. Ils ne sont pas trop durs, et ça devrait être très scriptable.


1
2018-06-02 12:49



Vous pouvez également écrire votre propre serveur SMTP. - hark


Un rapide Google est arrivé cette page, qui décrit diverses manières de joindre des fichiers à l’aide de diverses applications. Quelques-uns des plus répandus -

  • uuenc8de faire une "pièce jointe" en ligne.

  • métamail  -f file-to-attach -m mime-type

  • mpack  -c mime-type file-to-attach

  • cabot  -a file-to-attach

  • Orme  -A file-to-attach 

De plus, il a des liens vers un une paire de  scripts shell et un Script Perl pour élaborer et envoyer le message, qui sera probablement plus à votre goût.


1
2018-06-02 13:12





echo "Email body text" | mail -s "Subject of email" -a file.to.attach.txt my@email.com

1
2018-06-02 09:27



mail: option illégale - un - Yuval A
notez qu'il s'agit d'une fonctionnalité mailx, assurez-vous que ce paquet particulier est installé - niXar


Il y a quelques années, j'ai écrit un script shell qui faisait justement cela. Cela s'appelait binmail.sh. Il utilisait un encodeur base64 (de nombreux codes sources peuvent être trouvés avec Google) et des accessoires construits selon RFC1521.


0
2018-06-02 12:15





Ou si vous avez du python disponible, cela ne prendra que quelques lignes, comme celles listées ici: Envoi de pièces jointes en python


0
2018-06-02 15:06