在我的脚本中,我想发送一个带有一些主题的邮件,一些文本作为正文以及csv文件作为附件
我的问题是主题在葡萄牙语中有特殊字符 像这样
Subject: Relatório de utilização do QRCODE
我使用sendmail命令发送邮件,因为我需要更改发件人姓名(不是电子邮件ID)
我试过了:
Subject=Relatório de utilização do QRCODE
mnth=$(date '+%m/%Y' --date="1 month ago")
echo 'mês:'$mnth>>mailBody.html
echo 'contagem de registros:'11090>>mailBody.html
cat mailBody.html>out.mail
echo "$mnth"
uuencode QR_Log.csv QR_Report_$fname.csv >> out.mail
sendmail -F "xyzname" "$subject" -f "receiver@abc.com" <out.mail
echo "mail sent"
当我运行上面的脚本时,我收到这样的消息:
邮箱地址中的语法错误“Relat ?? rio.de.utiliza ???? o.do.QRCODE” (不可打印的字符) 发送邮件
如何实现这一目标请帮助我......
非常感谢帮助。我等一下
提前致谢
答案 0 :(得分:1)
我写了一个像这样的shell脚本,我得到了一个有效的标题。尝试重写发送邮件的代码,如MIME:
#!/bin/bash
echo 'To: you@domain.net'>>test.html
echo 'From: Some User <user@domain.net>'>>test.html
echo 'Subject: Relatório de utilização do QRCODE'>>test.html
echo 'MIME-Version: 1.0'>>test.html
echo 'Content-Type: text/html; charset="utf-8"'>>test.html
echo 'Content-Disposition: inline'>>test.html
echo ''>>test.html
echo '<span style="color:red;">Your message goes here</span>'>>test.html
sendmail -i -t < test.html
rm test.html
如果这有帮助,请告诉我们。)
以下是我的回答......
不是Linux家伙,但这可能对你有所帮助。首先,您必须将主题编码为base64。例如:
echo 'your subject' | openssl base64
假设您已将编码后的字符串放入$ subject变量中。接下来,您在发送电子邮件时设置这样的主题:
"=?UTF-8?B?$subject?="
基本上尝试在base64编码的主题之前放置 =?UTF-8?B?,在没有空格之后放?= 。
正如我所说,我不是一个Linux家伙,但你会管理:)
如果有帮助,请告诉我。
答案 1 :(得分:0)
rfc2045-(5)(软换行符)Quoted-Printable编码要求编码的行长不能超过76个字符。 对于bash shell脚本代码:
#!/bin/bash
subject_encoder(){
echo -n "$1" | xxd -ps -c3 |awk -Wposix 'BEGIN{
BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
printf " =?UTF-8?B?"; bli=8
}
function encodeblock (strin){
b1=sprintf("%d","0x" substr(strin,1,2))
b2=sprintf("%d","0x" substr(strin,3,2))
b3=sprintf("%d","0x" substr(strin,5,2))
o=substr(BASE64,b1/4 + 1,1) substr(BASE64,(b1%4)*16 + b2/16 + 1,1)
len=length(strin)
if(len>1) o=o substr(BASE64,(b2%16)*4 + b3/64 + 1,1); else o=o"="
if(len>2) o=o substr(BASE64,b3%64 +1 ,1); else o=o"="
return o
}{
bs=encodeblock($0)
bl=length(bs)
if((bl+bli)>64){
printf "?=\n =?UTF-8?B?"
bli=bl
}
printf bs
bli+=bl
}END{
printf "?=\n"
}'
}
SUBJECT="Relatório de utilização"
SUBJECT=`subject_encoder "${SUBJECT}"`
echo '<html>test</html>'| mail -a "Subject:${SUBJECT}" -a "MIME-Version: 1.0" -a "Content-Type: text/html; charset=UTF-8" you@domain.net