我是 Python 新手,并试图通过套接字通信创建一个电子邮件发送脚本,但似乎无法使用 dkimpy 库对其进行签名。我在网上尝试了几个示例,但在运行 dkim.sign 时都返回了相同的错误:
File "C:\Python34\lib\re.py", line 196, in split return _compile(pattern,flags).split(string, maxsplit)
TypeError: expected string or buffer
据我所知, 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)
解析的标头也用作套接字发送脚本的输入。我确实有一个用于测试目的的 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
我是在阅读这篇文章,还是看起来代码需要一个字符串但模式是以字节为单位的?
修正:奇怪的是,我没想到要检查 private_key。我在 Win 中手动创建了我不知道的密钥,Windows 添加了一个不可见的换行符,即使 vim 或 nano 也看不到。使用 MCEdit 将其删除后,该程序可以顺利运行。谢谢您的帮助 :)