我的示例数据文件是
$ 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>"
那里的接收方名称的正确语法如何?
答案 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
不正确的情况。