J'ai un script shell qui utilise la fonction sendmail pour envoyer un email, le code est le suivant
mailalert(){
sendmail -F Sender-Name -it <<END_MESSAGE
To: [email protected]
Subject: Subject
Message
END_MESSAGE
}
Il est exécuté chaque fois que j'appelle cette fonction. Maintenant, j'ai un fichier texte que je veux envoyer en utilisant sendmail en tant que pièce jointe ou en tant que message dans le courrier électronique qu'il envoie. Comment puis je faire ça? J'ai essayé beaucoup de trucs mais rien ne semble fonctionner. S'il vous plaît aider.
Plutôt étrange, mais j’ai utilisé une approche différente de celle utilisée lorsque uuencode
a commencé à s’exécuter, mais le curseur est resté bloqué à begin 644 /path/to/file
et j’ai donc utilisé cat pour envoyer mon fichier dans le corps du message.
file=/path/to/file
mailalert(){
sendmail -F Sender-Name -it <<END_MESSAGE
To: [email protected]
Subject: Subject
$(cat $file)
END_MESSAGE
}
Le code ci-dessus fonctionnait parfaitement, mais lorsque j’ai vu le message dans mon navigateur Web, c’était parfait. Mais lorsque je l'ai vu dans Thunderbird, cela ne s'est pas correctement illustré. C'était comme une sorte de codé.
Donc, je garde cette question ouverte jusqu'à ce que je ne trouve pas la bonne solution pour le moment.
Tapez uuencode /path/filename.txt | sendmail -s "subject" user@domain
dans votre terminal pour envoyer du courrier.
il s’agit du processus d’envoi de courrier avec pièce jointe.
ajoutez uuencode /path/filename.txt
avant la commande sendmail dans votre script. Je veux dire le modifier comme
mailalert(){
uuencode /path/filename.txt
sendmail -F Sender-Name -it <<END_MESSAGE
To: [email protected]
Subject: Subject
Message
END_MESSAGE
}
espérons que cela peut vous aider.
Après avoir parcouru de nombreuses MAN pages inutiles et googlé, je suis finalement arrivé à cette solution:
Fichier à envoyer: test.csv
Sur Ubuntu, vous aurez uuencode (AIX), fourni par le paquetage sharutils
name__, que vous devrez peut-être installer (l'équivalent sur Redhat est mutt
name__).
uuencode test.csv test.csv | mail -v -s "Subject test" -r [email protected] [email protected]
Le plus gros problème était de combiner sendmail et pièce jointe tout en définissant le sujet. Également sous AIX, l'option -a attachment
n'est pas disponible, contrairement à ce que suggère la page Man LINUX.
Vous pouvez également utiliser mailx
au lieu de mail
avec exactement les mêmes paramètres.
Lors de l'envoi de courrier, même à partir de la ligne de commande, il est préférable d'utiliser un programme conçu à cet effet, plutôt que d'appeler directement sendmail
name__. Un bon client de messagerie en ligne de commande complet est mutt
name__; en particulier, il comporte un indicateur de ligne de commande permettant de joindre des fichiers, ce qui évite l'utilisation fastidieuse de uuencode
name__:
echo Test | mutt -s Test -a image.jpg -- [email protected]
Comme d’habitude, consultez man mutt
pour obtenir des informations sur l’utilisation.
J'ai créé le script ci-dessous pour joindre un fichier CSV. Le fichier est en cours de génération, mais il tronque le nom de la ligne/colonne de CSV d'en-tête de manière incorrecte. Un fichier supplémentaire est joint au courrier électronique, à savoir "ATT0001.txt" avec chaque courrier électronique. Quelque chose de faux que vous pourriez trouver ici?
(
echo "From:"$1;
echo "To:"$2;
echo "Subject:"$3;
echo "MIME-Version: 1.0";
echo "Content-Type:multipart/mixed; boundary=\"B835649000072104Jul07\"";
echo "--B835649000072104Jul07";
echo "Content-Type: text/html; charset=\"UTF-8\"";
echo "Content-Transfer-Encoding: 7bit";
echo "Content-Disposition: inline";
echo "";
echo "$4";
echo "--B835649000072104Jul07";
echo "Content-Type: text/csv";
echo "Content-Transfer-Encoding: base64";
echo "Content-Disposition: attachment; filename=\"$5\"";
base64 "$5"
echo "--B835649000072104Jul07";
) | sendmail -t