Bru*_*sky 7 python linux shell perl mime
我只是花了太多时间对着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
Run Code Online (Sandbox Code Playgroud)
因此,perl
它的输出是独一无二的,我的服务器需要它.
为什么我会得到不同的结果?
如何使用perl之外的其他东西获得MIME/SMTP友好输出?
jwo*_*der 12
这不是Perl与其他人的事情; 这是"使用Bash的<<<
构造"与"不做那样"的事情.虽然没有明确记录(至少在Ubuntu Xenial的联机帮助页中没有),但是<<<
当将它们传递给命令时,Bash会向herestrings(the thing)添加换行符.因此,您调用的所有命令<<<
实际上都是编码'ASDF1234asdf\n'
,而Perl(不使用herestring调用)只是编码'ASDF1234asdf'
.不同的输入,不同的输出.
为了将没有尾部换行符的字符串传递给命令的标准输入,请使用printf
命令,例如:
$ printf %s ASDF1234asdf | base64
QVNERjEyMzRhc2Rm
Run Code Online (Sandbox Code Playgroud)
没有不同的base64编码,但最后编码换行符,或不:
$ perl -MMIME::Base64 -e 'print encode_base64("ASDF1234asdf")'
QVNERjEyMzRhc2Rm
$ perl -MMIME::Base64 -e 'print encode_base64("ASDF1234asdf\n")'
QVNERjEyMzRhc2RmCg==
$ echo -ne "my_user_name@my_domain.com" | base64
bXlfdXNlcl9uYW1lQG15X2RvbWFpbi5jb20=
$ echo -ne "my_user_name@my_domain.com\n" | base64
bXlfdXNlcl9uYW1lQG15X2RvbWFpbi5jb20K
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
656 次 |
最近记录: |