私はPythonが初めてで、ソケット通信を介して電子メール送信スクリプトを作成しようとしていますが、dkimpy libで署名できないようです。Web でいくつかの例を試しましたが、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 で削除した後、プログラムは問題なく動作しました。助けてくれてありがとう :)