Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux mailx将邮件作为bin附件发送_Linux_Perl_Mailx - Fatal编程技术网

Linux mailx将邮件作为bin附件发送

Linux mailx将邮件作为bin附件发送,linux,perl,mailx,Linux,Perl,Mailx,我有一个Perl脚本,它应该发送一封电子邮件,内容由表单的行组成 key = value 结果消息由Perl命令发出 `echo "$msg" | mailx -r $WEBMASTER_EMAIL -s "$field{'subject'}" $field{'email'}\n`; 当值为标准ASCII时,此功能可以正常工作。但是,当扩展字符是任何值的一部分时,它不起作用。电子邮件不包含文本,而是包含包含键值对的ATT000001.bin文件 是否有一个参数可以发送给mailx来阻

我有一个Perl脚本,它应该发送一封电子邮件,内容由表单的行组成

key = value
结果消息由Perl命令发出

`echo "$msg" | 
   mailx -r $WEBMASTER_EMAIL -s "$field{'subject'}" $field{'email'}\n`;
当值为标准ASCII时,此功能可以正常工作。但是,当扩展字符是任何值的一部分时,它不起作用。电子邮件不包含文本,而是包含包含键值对的ATT000001.bin文件

是否有一个参数可以发送给mailx来阻止它这样做,或者有一个建议的方法来转换我的值以便mailx正确处理它们


提前感谢

我今天遇到了完全相同的问题,我通过谷歌找到了这个问题。:-)

在我的例子中,我试图通过电子邮件发送curl命令的输出,不幸的是,它混合了
\r\n
\n
。因此,
mailx
将内容视为二进制文件,并执行奇怪的文件附件操作--
ATT000001.bin

假设您可以修改Perl脚本,请尝试以下操作:

$msg =~ s/\r\n/\n/g;  # convert Windows newlines to UNIX newlines
$msg =~ s/\r/\n/g;    # convert bare carriage returns to UNIX newlines
`echo "$msg" | 
    mailx -r $WEBMASTER_EMAIL -s "$field{'subject'}" $field{'email'}\n`;
echo "$msg" | perl -p -e 's/\r\n/\n/g; s/\r/\n/g' | mailx ...
或者,从shell脚本(我的案例)中,尝试以下操作:

$msg =~ s/\r\n/\n/g;  # convert Windows newlines to UNIX newlines
$msg =~ s/\r/\n/g;    # convert bare carriage returns to UNIX newlines
`echo "$msg" | 
    mailx -r $WEBMASTER_EMAIL -s "$field{'subject'}" $field{'email'}\n`;
echo "$msg" | perl -p -e 's/\r\n/\n/g; s/\r/\n/g' | mailx ...

来自Redhat的更多信息:

与MIME::Lite library相比,使用mailx是不是很难?等等,因为我正在解决旧应用程序的问题,我想尽量减少更改minimum fixes way=>请看一看。它提供了调整mailx命令行选项的方法。如果它不起作用,那么use可以直接使用
sendmail
程序。