web-dev-qa-db-fra.com

envoi de fichier avec sendmail

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.

5
Tarun

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.

1
Tarun

Tapez uuencode /path/filename.txt | sendmail -s "subject" user@domain dans votre terminal pour envoyer du courrier.

  • Remplacez "chemin" par le chemin du répertoire dans lequel se trouve le fichier à joindre.
  • Remplacez "nomfichier.ext" par le nom de fichier actuel et son extension.
  • Remplacez "sujet" par la ligne d'objet que vous voulez que l'email ait.
  • Remplacez "utilisateur @ domaine" par l'adresse électronique du destinataire.

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.

3
rɑːdʒɑ

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 sharutilsname__, que vous devrez peut-être installer (l'équivalent sur Redhat est muttname__).

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 mailxau lieu de mailavec exactement les mêmes paramètres.

0
Petefram

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 sendmailname__. Un bon client de messagerie en ligne de commande complet est muttname__; en particulier, il comporte un indicateur de ligne de commande permettant de joindre des fichiers, ce qui évite l'utilisation fastidieuse de uuencodename__:

echo Test | mutt -s Test -a image.jpg -- [email protected]

Comme d’habitude, consultez man mutt pour obtenir des informations sur l’utilisation.

0
fkraiem

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?

SCÉNARIO

(
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
0
Amol Aranke