Comment faire pour préserver les caractères de nouvelle ligne de sendmail pour en script bash?
Pourquoi ce n'est pas la suite de préserver les caractères de nouvelle ligne dans l'e-mail?
#!/bin/bash
file="/tmp/ip.txt"
address=$(curl -s http://ipecho.net/plain; echo)
ifconfig=$(ifconfig)
function build_body
{
echo "----------------------------------------------------------------" > $file
echo "IP Address: $address (according to http://ipecho.net/plain)" >> $file
echo "----------------------------------------------------------------" >> $file
echo >> $file
echo "Result from ifconfig:" >> $file
echo >> $file
echo "$ifconfig" >> $file
echo >> $file
}
build_body
msg=$(cat $file)
mail="subject:Home Server Status\nfrom:[email protected]\n$msg"
echo $mail | /usr/sbin/sendmail "[email protected]"
J'ai reçu le mail ce script génère, cependant, le corps entier est sur une seule ligne!
/tmp/ip.txt est exactement comment je veux que l'e-mail pour look.
Pourquoi ne pas utiliser le
Parfait, simple et juste ce que je voulais... Merci.
Deux choses: Vous
mail
utilitaire: mail -s "Subject" [email protected] < /path/to/body.txt
j'ai l'habitude de l'utiliser.Parfait, simple et juste ce que je voulais... Merci.
Deux choses: Vous
echo $mail | /usr/sbin...
. Cela supprime tous les excès de l'espace blanc lorsque vous faites un écho sans les guillemets. Essayez echo "$mail" | /usr/bin...
. Aussi, il peut y avoir un problème avec sendmail ne pas envoyer de \r\n
à la fin de chaque ligne qui est ce que les RFC pour e-mail nécessite. Essayez des guillemets autour de $mail
et voir si cela prend soin de la question. Si non, utilisez echo "$mail" | mail -s "$subject" $user
Notez les guillemets!OriginalL'auteur Charlie | 2014-02-04
Vous devez vous connecter pour publier un commentaire.
Je suis tombé sur cette récemment. J'ai été en mesure de résoudre l'ajout de l'option '-e' option de l'écho.
Changer cela:
:
Espérons que cette aide.
OriginalL'auteur postsasaguest
Vous pouvez utiliser des "documents" (
<<END
), la fonction de sortie de ses résultats sur la sortie standard.OriginalL'auteur AnFi
echo "$mail" | /usr/bin/sendmail ...
\n
entre les en-têtes de message et:comme dans:
OriginalL'auteur grebneke
Avec
echo $mail
, le contenu du fichier s'affichent sur la ligne de commande bash, et les traite avec word expansion. Aveccat "$file"
, le nom de fichier s'affiche sur la ligne de commande, mais le contenu du fichier ne sont pas et sont donc à l'abri de bash.OriginalL'auteur John1024