我是Python新手并尝试通过套接字通信创建一个发送脚本的电子邮件,但似乎无法用dkimpy lib签名.我在网上尝试了几个例子但是在运行dkim.sign时都返回了相同的错误:
File "C:\Python34\lib\re.py", line 196, in split return _compile(pattern,flags).split(string, maxsplit)
TypeError: expected string or buffer
Run Code Online (Sandbox Code Playgroud)
我可以说,dkim.sign函数中的第一个变量应该是一个字符串,所以我尝试使用readlines()甚至.as_string()来确定.我检查了消息,它似乎符合RFC822.但我会仔细检查是否有人认为这可能是问题所在.如果没有dkim.sign,它可以完美运行(减去任何安全性,如SPF/DKIM)
这是我正在使用的代码的片段:
f=open('mail.htm','r')
text=MIMEText(f.read(),'html')
headers = Parser().parse(open('mail.htm', 'r'))
sender=headers['From']
receiver=headers['To']
subj=headers['Subject']
f.close()
private_key = open('default.pem').read()
headers = ['To', 'From', 'Subject']
sig = dkim.sign(text, 'default', '<mydomain.here>', private_key, include_headers=headers)
Run Code Online (Sandbox Code Playgroud)
解析的头文件也用作套接字发送脚本的输入.我有一个用于测试目的的dkim键,但我认为它甚至没有达到这一点.
任何见解?
编辑:好的,我只是尝试使用dkimpy lib中的dkim.rfc822_parse解析字符串(而不是签名),我收到以下错误:
return _compile(pattern, flags).split(string, maxsplit)
TypeError: can't use a bytes pattern on a string-like object
Run Code Online (Sandbox Code Playgroud)
我是在读这篇文章还是看起来代码期待一个字符串,但模式是以字节为单位?
修复:很奇怪我没想过检查private_key.我手动创建Win中的密钥,所以我不知道,Windows添加了一个隐形的换行符,甚至vim或nano都看不到.用MCEdit删除后,程序顺利运行.谢谢您的帮助 :)
如果我没记错的话,dkim.sign 需要完整的消息源作为参数,但您正在传递 MIMEText 对象。
尝试传递 text.as_string() 代替
sig = dkim.sign(text.as_string(), .... )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2582 次 |
| 最近记录: |