Question

Je dois joindre un fichier avec mailx, mais pour le moment je ne réussis pas.

Voici mon code:

subject="Something happened"
to="somebody@somewhere.com"
body="Attachment Test"
attachment=/path/to/somefile.csv

uuencode $attachment | mailx -s "$subject" "$to" << EOF

The message is ready to be sent with the following file or link attachments:

somefile.csv

Note: To protect against computer viruses, e-mail programs may prevent
sending or receiving certain types of file attachments.  Check your
e-mail security settings to determine how attachments are handled.

EOF

Tous les commentaires seraient très appréciés.

Mettre à jour J'ai ajouté la pièce jointe var pour éviter d'avoir à utiliser le chemin à chaque fois.

Était-ce utile?

La solution

Vous devez concatter à la fois le texte de votre message et la pièce jointe encodée:

$ subject="Something happened"
$ to="somebody@somewhere.com"
$ body="Attachment Test"
$ attachment=/path/to/somefile.csv
$
$ cat >msg.txt <<EOF
> The message is ready to be sent with the following file or link attachments:
>
> somefile.csv
>
> Note: To protect against computer viruses, e-mail programs may prevent
> sending or receiving certain types of file attachments.  Check your
> e-mail security settings to determine how attachments are handled.
>
> EOF
$ ( cat msg.txt ; uuencode $attachment somefile.csv) | mailx -s "$subject" "$to"

Il existe différentes manières de fournir le texte du message. Il s'agit simplement d'un exemple proche de votre question d'origine. Si le message doit être réutilisé, il est logique de le stocker dans un fichier et d'utiliser ce fichier.

Autres conseils

Eh bien, voici les premiers problèmes que vous avez.

  1. Vous semblez supposer qu'un client de messagerie va gérer les pièces jointes encodées sans en-têtes. Cela n'arrivera pas.

  2. Vous utilisez mal la redirection des entrées / sorties: la sortie de uuencode et le document here sont tous deux envoyés à mailx, ce qui ne peut se produire.

  3. Vous utilisez mal le code uuencode: si un chemin est donné, il ne s’agit que d’un nom pour donner le fichier décodé, pas d’un nom de fichier en entrée. Donner le fichier deux fois attribuera le même nom au fichier décodé que celui qui a été lu. Le drapeau -m force l'encodage en base64. Mais cela ne fournira toujours pas d’en-têtes de pièces jointes pour mailx.

Vous feriez bien mieux de vous procurer une copie de mpack, qui fera ce que vous voulez.

Si vous devez le faire, vous pouvez faire quelque chose comme ceci:

cat <<EOF | ( cat -; uuencode -m /path/to/somefile.csv /path/to/somefile.csv; ) | mailx -s "$subject" "$to" 
place your message from the here block in your example here
EOF

Il y a beaucoup d'autres possibilités ... mais celui-ci a toujours le document ici comme dans votre exemple et était facile à comprendre, et il n'y a aucun fichier temporaire impliqué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top