Le moyen le plus simple d'envoyer un fichier par e-mail via la ligne de commande dans * nix?

10

Quelle est la commande la plus simple - et de préférence la plus portable - que je peux utiliser pour envoyer par e-mail un seul fichier en pièce jointe à un shell * nix?

Yuval A
la source

Réponses:

11

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

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

Vous n'avez pas à vous soucier de l'UUencoding si c'est juste un fichier texte, par exemple:

mail -s [sujet] [adresse du destinataire] <[nom de fichier]

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

RainyRat
la source
Que diriez-vous si je veux le fichier texte en pièce jointe, et non dans le corps du message?
Yuval A
Cela dépend - je ne pense pas qu'un simple courrier GNU puisse le faire, vous devrez donc utiliser un véritable client de messagerie; pin, cabot ou quelque chose de similaire. Lesquelles de ces options sont disponibles dépendent de celles que vos systèmes ont installées. En utilisant mutt, la réponse de Gavin (ci-dessous) fonctionnera très bien.
RainyRat
Le pin est bon! Puis-je l'utiliser via la ligne de commande en utilisant l'interface graphique textuelle?
Yuval A
Je pense que c'est faisable. Jetez un œil à staff.washington.edu/chappa/pine/info/outgoing.html pour en savoir plus.
RainyRat
11

En utilisant mutt, vous pouvez:

mutt -z -a <file> -s <subject> -- [email protected]

Ou, si vous ne voulez pas taper de corps:

mutt -z -a <file> -s <subject> -- [email protected] < /dev/null

Gavin McTaggart
la source
mutt n'est pas disponible sur mes systèmes, merci quand même
Yuval A
Je pense que vous allez constater que cela va être un mélange entre ce qui est facile et ce qui est portable. mailx est portable, mais pas nécessairement facile. Comme RainyRat le mentionne, je pense que vous allez devoir utiliser un MUA complet et l'exécuter à partir de la ligne de commande.
Gavin McTaggart
2
J'ai dû ajouter un --avant l'adresse e-mail pour que ces commandes fonctionnent.
Autumnsault
Des tirets sont en fait nécessaires pour séparer l'adresse e-mail des noms de fichiers "- [email protected]", @DoctorMohawk est correct. Tenter de les ajouter ci-dessus au corps de la réponse.
Jeff Clayton
2

" sendEmail est un client de messagerie SMTP léger en ligne de commande. Si vous avez besoin d'envoyer des e-mails à 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 des scripts bash, des fichiers batch , Programmes Perl et sites Web, mais il est assez adaptable et répondra probablement à vos besoins. SendEmail est écrit en Perl et est unique en ce qu'il ne nécessite AUCUN MODULE. Il dispose d'un ensemble intuitif et flexible d'options de ligne de commande, ce qui le rend très facile pour 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.

Clinton Blackmore
la source
+1 - C'était parfait pour ce dont j'avais besoin car c'est facile et toujours activement entretenu! Si vous êtes sur un système Debian, vous pouvez simplement aptitude install sendemail. Notez que la commande est installée comme sendEmailavec un «E» majuscule.
Topher Fangio
En fait, l'archive tar 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). Heureux que vous l'aimiez, cependant.
Clinton Blackmore
1

Je ne peux pas ajouter de commentaire, mais ..

  • Les réponses à cette question dépendront en grande partie de l’éventuel dérivé dont mailxvous disposez.
  • Bien que le fichier doive être affiché sans aucun problème par le MUA destinataire, la tuyauterie de uuencodene produira pas techniquement un e-mail avec une pièce jointe. Jetez un œil à la source de l'e-mail que vous recevez pour voir pourquoi.
Dan Carley
la source
+1 pour la vérité. Je ne savais même pas qu'il existait une version de mailx qui pouvait envoyer des pièces jointes (la mienne certainement pas). Vous avez également raison concernant le codage manuel uudecode requis avec le pipeline uuencode -> mail.
Gavin McTaggart
1

Si vous voulez une portabilité absolue, vous pouvez telnet dans votre serveur de messagerie sur le port 25 et émettre directement des commandes SMTP. Ils ne sont pas trop difficiles et devraient être très scriptables.

Maximus Minimus
la source
3
Vous pouvez également écrire votre propre serveur SMTP.
hark
1

Un rapide Google a affiché cette page , qui décrit une variété de façons de joindre des fichiers à l'aide d'une variété d'applications. Quelques-uns des plus répandus -

  • uuenc8de pour créer 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 contient des liens vers quelques scripts shell et un script Perl pour créer et envoyer le message, ce qui sera probablement plus à votre goût.

hark
la source
1
echo "Email body text" | mail -s "Subject of email" -a file.to.attach.txt [email protected]
Neobyte
la source
mail: option illégale - a
Yuval A
1
notez qu'il s'agit d'une fonction mailx, assurez-vous qu'un package particulier est installé
niXar
0

Il y a quelques années, j'ai écrit un script shell qui faisait exactement cela. Il s'appelait binmail.sh. Il a utilisé un encodeur base64 (de nombreux codes source peuvent être trouvés avec Google ) et construit des pièces jointes conformément à la RFC1521 .

mouviciel
la source