我只是花了太多时间在SMTP服务器上,因为它不喜欢我使用的base64编码的凭证。原来,当我选择不使用perl
时,就像互联网上说的那样,我犯了一个很大的错误。为什么会这样?我以为base64是一个单一的标准。在
考虑:
$ perl -MMIME::Base64 -e 'print encode_base64("ASDF1234asdf")'
QVNERjEyMzRhc2Rm
$ base64 <<<"ASDF1234asdf"
QVNERjEyMzRhc2RmCg==
$ python3.6 -m base64 <<<"ASDF1234asdf"
QVNERjEyMzRhc2RmCg==
$ python2.7 -m base64 <<<"ASDF1234asdf"
QVNERjEyMzRhc2RmCg==
$ perl -MMIME::Base64 -e "print encode_base64('my_user_name@my_domain.com')"
bXlfdXNlcl9uYW1lQG15X2RvbWFpbi5jb20=
$ base64 <<<"my_user_name@my_domain.com"
bXlfdXNlcl9uYW1lQG15X2RvbWFpbi5jb20K
因此,perl
在其输出中是唯一的,我的服务器需要这样做。在
为什么我得到不同的结果?在
如何使用perl以外的东西获得MIME/SMTP友好的输出?在
没有不同的base64编码,但在结尾处编码换行符,或者不编码:
这不是Perl与其他所有人的比较;这是一个“使用Bash的} thing) when passing them to commands 。因此,使用
<<<
构造”与“不做那个”的事情。虽然没有明确地记录(至少在ubuntuxenial的manpage中没有),但是Bash appends a newline to herestrings (the ^{<<<
调用的所有命令实际上都在编码'ASDF1234asdf\n'
,而Perl(不是用herestring调用的)只编码'ASDF1234asdf'
。不同的输入,不同的输出。在为了将不带尾随换行符的字符串传递给命令的标准输入,请使用
printf
命令,例如:相关问题 更多 >
编程相关推荐