我是 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
我正在阅读这篇文章,还是代码似乎需要一个字符串,但模式以字节为单位?
修复:奇怪的是我没有想到要检查私钥。我在Win中手动创建了密钥,所以我不知道的是,Windows添加了一个甚至vim或nano都看不到的不可见的换行符。使用 MCEdit 将其删除后,程序运行顺利。
谢谢您的帮助 :)