J'ai créé un script qui s'exécute chaque nuit sur mon serveur Linux qui permet mysqldump
de sauvegarder chacune de mes bases de données MySQL dans des fichiers .sql et de les regrouper sous forme de fichier .tar compressé. La prochaine étape que je veux accomplir est d'envoyer ce fichier tar par courrier électronique à un serveur de messagerie distant pour qu'il soit conservé. J'ai pu envoyer le script brut dans le corps d'un e-mail en redirigeant le fichier texte de sauvegarde mailx
comme suit:
$ cat mysqldbbackup.sql | mailx [email protected]
cat
fait écho au texte du fichier de sauvegarde qui est canalisé dans le mailx
programme avec l'adresse e-mail du destinataire passée en argument.
Bien que cela accomplit ce que je dois, je pense que ce pourrait être un pas mieux, est - il possible, en utilisant des scripts shell ou autrement, pour envoyer le fichier .tar compressé à un message e - mail sortant comme pièce jointe ? Cela éviterait d'avoir à traiter de très longs e-mails contenant des données d'en-tête et ayant souvent des problèmes d'habillage de mots, etc.
la source
mysqldump
puis de joindre la sortie à un e-mail (avecmutt
). J'ai peut-être même eu une étape qui a également compressé la sortie en zip / tar.gz ...Réponses:
Aucun des mutts n'a travaillé pour moi. Il pensait que l'adresse e-mail faisait partie de la pièce jointe. Devais faire:
la source
Ou, à défaut mutt:
la source
text/html
par le type MIME qui convient à votre pièce jointe. (Pour cet exemple concret, je supposeapplication/gzip
.)En fonction de votre version de Linux, elle peut s'appeler mail. Pour citer @David ci-dessus:
ou aussi:
la source
-a, --append=HEADER: VALUE append given header to the message being sent
mutt
commande, nonmail
. De plus, comme d'autres l'ont souligné, mutt semble maintenant exiger un--
argument avant l'adresse. Et je vois que @exhuma et je suis en fait d'accord sur ce que fait l'-a
optionmail
- je me suis-a, --append=HEADER: VALUE append given header to the message being sent
-A, --attach=FILE attach FILE
De regarder
man mailx
, le programme mailx n'a pas d'option pour joindre un fichier. Vous pouvez utiliser un autre programme tel que mutt.Les options de ligne de commande pour mutt peuvent être affichées avec
mutt -h
.la source
--
.J'utilise SendEmail, qui a été créé pour ce scénario. Il est conditionné pour Ubuntu, donc je suppose qu'il est disponible
http://caspian.dotconf.net/menu/Software/SendEmail/
la source
sendemail
etsendEmail
en/usr/bin/
.SendEmail
sendemail -f [email protected] [email protected] -m "Here are your files!" -a file1.jpg file2.zip
J'utilise mpack.
Malheureusement, mpack ne reconnaît pas «-» comme un alias pour stdin. Mais le travail suivant, et peut facilement être enveloppé dans un alias (shell) ou un script:
la source
mpack -s subject /dev/stdin [email protected] <(stdout_generating_program)
la source
mailx
n'est pas correctement standardisé. Toute réponse qui le recommande devrait signaler cette mise en garde. Il existe au moins trois variantes incompatibles couramment utilisées.J'ai écrit une fois cette fonction pour ksh sur Solaris (utilise Perl pour l'encodage base64):
la source
base64
commande au lieu de perl pour l'encodageVous pouvez utiliser mutt pour envoyer l'e-mail avec pièce jointe
la source
-a
option après le destinataire :,mutt -s "Backup" [email protected] -a mysqldbbackup.sql < message.txt
ou utiliser l'--
option avant le destinataire comme indiqué dans la réponse de rynop.Envoyez un e-mail contenant du texte brut avec une pièce jointe en texte brut avec mailx:
Ci-dessous est la même commande que ci-dessus, sans les retours à la ligne
Assurez-vous d'avoir un fichier
/home/el/attachfile.txt
défini avec ce contenu:Si vous n'avez pas uuencode, lisez ceci: /unix/16277/how-do-i-get-uuencode-to-work
Sous Linux, envoyez un e-mail HTML avec une pièce jointe PDF avec sendmail:
Assurez-vous que ksh est installé:
yum info ksh
Assurez-vous que sendmail est installé et configuré.
Assurez-vous que uuencode est installé et disponible: /unix/16277/how-do-i-get-uuencode-to-work
Créez un nouveau fichier appelé
test.sh
et placez-le dans votre répertoire personnel:/home/el
Mettez le code suivant dans
test.sh
:Modifiez les variables d'exportation en haut de
test.sh
pour refléter votre adresse et vos noms de fichiers.Téléchargez un document pdf de test et mettez-le dans
/home/el
appelé pdf-test.pdfCréez un fichier appelé /home/el/email_body.htm et mettez cette ligne dedans:
Assurez-vous que le fichier pdf dispose de 755 autorisations suffisantes.
Exécutez le script
./test.sh
Vérifiez votre boîte de réception, le texte doit être au format HTML et le fichier pdf automatiquement interprété comme un fichier binaire. Faites attention à ne pas utiliser cette fonction plus de 15 fois par jour, même si vous vous envoyez des e-mails, les filtres anti-spam dans gmail peuvent blacklister un domaine crachant des e-mails sans vous donner la possibilité de les laisser passer. Et vous constaterez que cela ne fonctionne plus, ou qu'il ne laisse passer que la pièce jointe, ou que l'e-mail ne passe pas du tout. Si vous devez faire beaucoup de tests à ce sujet, répartissez-les sur plusieurs jours ou vous serez étiqueté comme un spammeur et cette fonction ne fonctionnera plus.
la source
(echo 'Email Body'; uuencode filename filename) | mailx -s 'Subject' [email protected]
uuencode
n'est pas correctement une pièce jointe. Il intègre simplement une goutte de texte lisible par ordinateur au milieu d'un autre texte. Cela fonctionnait bien quand il n'y avait pas de meilleur mécanisme, mais c'était il y a plus de 20 ans.Il y a plusieurs réponses ici suggérant
mail
oumailx
si cela est plus d'un arrière - plan pour vous aider à interpréter ces derniers dans leur contexte.Notes historiques
Les origines d'Unix
mail
remontent dans les brumes de la première histoire de Bell Labs Unix ™ (1969?), Et nous ne pouvons probablement pas espérer entrer dans sa généalogie complète ici. Qu'il suffise de dire qu'il existe de nombreux programmes qui héritent du code de ou réimplémentent (ou héritent du code d'une réimplémentation de)mail
et qu'il n'y a pas de base de code unique qui puisse être identifié sans ambiguïté comme "le"mail
.Cependant, l'un des prétendants à cette position est certainement "Berkeley Mail", qui était à l'origine appelé
Mail
avec un M majuscule dans 2BSD (1978); mais dans 3BSD (1979), il a également remplacé lamail
commande en minuscules , entraînant une nouvelle confusion. SVR3 (1986) comprenait un dérivé appelémailx
. Lex
a probablement été ajouté pour le rendre unique et distinct; mais cela aussi a maintenant été copié, réimplémenté et mutilé de sorte qu'il n'y a pas de version individuelle unique qui soit définitive.À l'époque, la norme de facto pour l'envoi de fichiers binaires par courrier électronique était
uuencode
. Il existe toujours, mais présente de nombreux problèmes d'utilisation; dans la mesure du possible, vous devez envoyer des pièces jointes MIME à la place, sauf si vous vous efforcez spécifiquement de pouvoir communiquer avec la fin des années 1980.MIME a été introduit au début des années 1990 pour résoudre plusieurs problèmes avec le courrier électronique, notamment la prise en charge de divers types de contenu autres que du texte brut dans un seul jeu de caractères qui ne convient vraiment qu'à un sous-ensemble de l'anglais (et, nous dit-on, hawaïen ). Cela a introduit la prise en charge des messages en plusieurs parties, l'internationalisation, les types de contenu riche, etc., et a rapidement gagné du terrain tout au long des années 1990.
(Les notes Heirloom
mail
/mailx
histoire ont été très utiles lors de la composition de ce document, et valent certainement la peine d'être lues si vous êtes dans ce genre de chose.)Offres actuelles
Depuis 2018, Debian a trois paquets qui incluent une commande
mail
oumailx
. (Vous pouvez rechercherProvides: mailx
.)(Je ne distingue pas Debian comme une recommandation; c'est ce que j'utilise, donc je le connais; et cela fournit un moyen de distinguer sans ambiguïté les différentes alternatives en faisant référence à leurs noms de paquets respectifs. C'est évidemment aussi la distribution de quel Ubuntu obtient ces packages.)
bsd-mailx
est une méthode relativement simplemailx
qui ne semble pas prendre en charge l'envoi de pièces jointes MIME. Voir son page de manuel et notez que c'est celui que vous attendez d'un système * BSD, y compris MacOS, par défaut.heirloom-mailx
est maintenant appelés-nail
et prend en charge l'envoi de pièces jointes MIME avec-a
. Voir sa page de manuel et plus généralement le projet Heirloommailutils
aka GNU Mailutils inclut un wrappermail
/mailx
compatibilité qui prend en charge l'envoi de pièces jointes MIME avec-A
Avec ces problèmes, si vous avez besoin que votre code soit portable et puisse dépendre d'un package quelque peu complexe, le moyen le plus simple d'envoyer des pièces jointes MIME de manière portative est d' utiliser
mutt
.la source
Une autre alternative - Swaks (couteau suisse pour SMTP).
la source
metamail a l'outil metasend
la source
j'ai utilisé
et cela a bien fonctionné pour moi ....
la source
J'utilise généralement la commande mail uniquement sur RHEL. J'ai essayé mailx et c'est assez efficace.
la source
le moyen le plus court pour moi est
donc pour votre exemple, ce sera
la bonne partie est que je peux le rappeler avec Ctrl + r pour envoyer un autre fichier ...
la source
Depuis la machine source
Sur la machine de destination. Enregistrez le corps du courrier reçu sous db.sql.gz.b64 ; puis..
la source
Juste pour ajouter mes 2 cents, j'écrirais mon propre script PHP:
http://php.net/manual/en/function.mail.php
Il existe de nombreuses façons de faire la pièce jointe dans les exemples de cette page.
la source
sh
est encore plus omniprésent. Il y a des questions en double avec des réponses avec de bons exemples; Voici le mien.mailx
a-a
maintenant une option pour les pièces jointes.la source
mailx
do. Je pense qu'il y a deux implémentations. L'un-a
est pour les pièces jointes, l'autre pour les en-têtes.Pas une méthode pour envoyer des e-mails, mais vous pouvez utiliser un serveur Git en ligne (par exemple Bitbucket ou un service similaire) pour cela.
De cette façon, vous pouvez utiliser des
git push
commandes et toutes les versions seront stockées de manière compressée et organisée.la source
Voici comment je fais avec un gros fichier journal dans CentOS:
la source
WHOAMI
etHOSTNAME
deux fois?Si le fichier est du texte, vous pouvez l'envoyer plus facilement dans le corps comme:
la source
en utilisant la commande mailx
en utilisant sendmail
la source
uuencode
en faveur de MIME.eval
retours monstrueux et mystérieux autour de l'ensemble de l'engin sont complètement inutiles ici.Mailutils en fait un morceau de gâteau
-A file
joint un fichier-M
active MIME, afin que vous puissiez avoir une pièce jointe et un corps en texte brut.S'il n'est pas encore installé, exécutez
la source
Selon vos options de commande de messagerie (vérifiez avec
man mail
) et la version que vous pourriez faireecho yourBody|mail -s yoursubject -A /your/attachment/file [email protected]
la source
-A
option est spécifique à lamailutils
version GNU demail
comme cela a été souligné dans ma réponse ainsi qu'à @ rumpel'sSi mutt ne fonctionne pas ou n'est pas installé, essayez ceci-
la source