Ошибка при попытке подписать электронное письмо с помощью DKIM в PythonPython

Программы на Python
Anonymous
Ошибка при попытке подписать электронное письмо с помощью DKIM в Python

Сообщение Anonymous »

Я пытаюсь создать сценарий с помощью Python для отправки электронных писем, я новичок в Python и прочитал несколько статей о том, как это сделать. Он работает для отправки электронных писем без их подписи, но они попадают прямо в ящик для спама, поэтому я пытаюсь сделать их подписанными. Я пытаюсь использовать следующий скрипт:

Код: Выделить всё

def sendEmail():
dkim_selector = 'default'
domain = 
port = 465
pw = input('insert password: ')
smtp_server = 'smtp.terra.com.br'
sender = 
rec = 

message = msg(sender, rec) #a function that creates the message

# the dkim library uses regex on byte strings so everything
# needs to be encoded from strings to bytes.
with open(
) as fh:
dkim_private_key = fh.read()
headers = [b'To', b"From", b"Subject"]
sig = dkim.sign(
message=message.as_bytes(),
selector=str(dkim_selector).encode(),
domain=domain.encode(),
privkey=dkim_private_key.encode(),
include_headers=headers,
)

# add the dkim signature to the email message headers.
# decode the signature back to string_type because later on
# the call to msg.as_string() performs it's own bytes encoding...
message["DKIM-Signature"] = sig[len("DKIM-Signature: "):].decode()

# Create secure connection with server and send email
context = ssl.create_default_context()
with smtplib.SMTP_SSL(smtp_server, port, context=context) as server:
server.login(sender, pw)
server.sendmail(
sender, rec, message.as_string()
)
Когда я запускаю программу, я получаю следующую ошибку:

Код: Выделить всё

Traceback (most recent call last):
File "C:\Python39\lib\site-packages\dkim\crypto.py", line 140, in parse_private_key
pka = asn1_parse(ASN1_RSAPrivateKey, data)
File "C:\Python39\lib\site-packages\dkim\asn1.py", line 85, in asn1_parse
r.append(asn1_parse(t[1], data[i:i+length]))
File "C:\Python39\lib\site-packages\dkim\asn1.py", line 91, in asn1_parse
raise ASN1FormatError(
dkim.asn1.ASN1FormatError: Unexpected tag (got 30, expecting 02)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Python39\lib\site-packages\dkim\__init__.py", line 827, in sign
pk = parse_pem_private_key(privkey)
File "C:\Python39\lib\site-packages\dkim\crypto.py", line 170, in parse_pem_private_key
return parse_private_key(pkdata)
File "C:\Python39\lib\site-packages\dkim\crypto.py", line 142, in parse_private_key
raise UnparsableKeyError('Unparsable private key: ' + str(e))
dkim.crypto.UnparsableKeyError: Unparsable private key: Unexpected tag (got 30, expecting 02)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "z:\main.py", line 44, in 
sendEmail()
File "z:\main.py", line 23, in sendEmail
sig = dkim.sign(
File "C:\Python39\lib\site-packages\dkim\__init__.py", line 1335, in sign
return d.sign(selector, domain, privkey, identity=identity, canonicalize=canonicalize, include_headers=include_headers, length=length)
File "C:\Python39\lib\site-packages\dkim\__init__.py", line 829, in sign
raise KeyFormatError(str(e))
dkim.KeyFormatError: Unparsable private key: Unexpected tag (got 30, expecting 02)
Я создал ключи с помощью openssl из следующих строк:

Код: Выделить всё

z:\> openssl genrsa -out privateKey.pem 1024
z:\> openssl rsa -in privateKey.pem -out publicKey.pub -pubout
Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/694 ... -in-python

Вернуться в «Python»