如何在mailx命令中添加收件人名称

时间:2019-12-28 10:35:54

标签: linux bash awk sed

我的示例数据文件是

$ cat /fullpath/a.csv
a@gmail.com, Amit Singh
k@gmail.com, Km Singh

我正在使用script.sh

   #!/bin/bash

while IFS= read -r line
do

email=$(echo $line | awk -F, '{print $1 }')
name=$(echo $line | awk -F, '{print $2 }')

echo | mailx -v -s "Helo $name" -S smtp-use-starttls -S ssl-verify=ignore -S smtp-auth=login -S smtp=smtp://smtp.gmail.com:587 -S from="xxxx@gmail.com(John Smith)" -S smtp-auth-user=xxxx@gmail.com -S  smtp-auth-password=xxxxpassword## -S ssl-verify=ignore -S nss-config-dir=~/.certs "$name<$email>" 

done < /fullpath/a.csv

当我发送电子邮件时,一切顺利。但不会在"$name<$email>"

中选择收件人姓名

那里的接收方名称的正确语法如何?

2 个答案:

答案 0 :(得分:1)

正确的格式应在真实姓名和电子邮件总站之间留一个空格;但我认为mailx不会在命令行上接受它,或者至少不会在To:标头中公开它。尝试以下方法:

echo "To: $name <$email>" |
mailx ... options ... "$email"

您仍在使用IFS,为什么不充分使用它呢?

while IFS=, read -r email name; do ...

也许更好的设计还是不要使用逗号作为分隔符。

答案 1 :(得分:0)

您已使用'##'注释掉了包含接收方名称的命令部分:

-S  smtp-auth-password=xxxxpassword##

如果您需要密码以#结尾,请将该参数放在引号中。

我还要在个人姓名$name <$email>后面加一个空格。我不确定这是必需的还是只是通常以这种方式完成。

除此之外,我建议您在测试脚本时,在打开set -x的情况下运行它,以便确切地了解将传递给mailx的内容。这还将捕获$email不正确的情况。