Я пытаюсь отправить образец электронной почту, но получает следующее сообщение об ошибке:электронной почты с дополнительными заголовками ошибками
>>> import smtplib
>>> from email.mime.text import MIMEText
>>> def send_email(subj, msg, from_addr, *to, host="localhost", port=1025, **headers):
... email = MIMEText(msg)
... email['Subject'] = subj
... email['From'] = from_addr
... for h, v in headers.items():
... print("Headers - {} Value {} ".format(h, v))
... email[h] = v
... sender = smtplib.SMTP(host,port)
... for addr in to:
... del email['To']
... email['To'] = addr
... sender.sendmail(from_addr, addr, email.as_string())
... sender.quit()
...
>>> headers={'Reply-To': '[email protected]'}
>>> send_email("first email", "test", "[email protected]", ("[email protected]", "[email protected]"), headers=headers)
Headers - headers Value {'Reply-To': '[email protected]'}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 12, in send_email
File "/usr/lib/python3.5/email/message.py", line 159, in as_string
g.flatten(self, unixfrom=unixfrom)
File "/usr/lib/python3.5/email/generator.py", line 115, in flatten
self._write(msg)
File "/usr/lib/python3.5/email/generator.py", line 195, in _write
self._write_headers(msg)
File "/usr/lib/python3.5/email/generator.py", line 222, in _write_headers
self.write(self.policy.fold(h, v))
File "/usr/lib/python3.5/email/_policybase.py", line 322, in fold
return self._fold(name, value, sanitize=True)
File "/usr/lib/python3.5/email/_policybase.py", line 360, in _fold
parts.append(h.encode(linesep=self.linesep,
AttributeError: 'dict' object has no attribute 'encode'
Когда я опускаю дополнительный словарь заголовка, то электронная почта успешно отправлена. Для параметра ** param необходим словарь, это правильно? Может ли кто-нибудь предложить средство для устранения ошибки?
Выход электронной почты для 'send_email (« Тема модели »,« Содержание сообщения »,« [email protected] »,« [email protected] »,« [email protected] »,« Ответ на вопрос » "," [email protected] ")' is '---------- СООБЩЕНИЕ ПОСЛЕДУЕТ ---------- Content-Type: text/plain; кодировка = "US-ASCII" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Тема: Модель Заголовок От: [email protected] To: [email protected] X-Peer: 127,0. 0.1', что не то, что я хочу, так как Reply-To: [email protected] не отображается Кроме того, список неверен. – alortimor
@alortimor: Это не выражение, которое я использовал в своем ответе. Вы отправляете электронное письмо (среди прочих), «Reply-to» и «[email protected]»), потому что это позиционные параметры. Поскольку вы не можете использовать 'Reply-To' в качестве аргумента прямого ключевого слова (этот заголовок не является допустимым идентификатором Python), используйте только' ** {'Reply-To': '[email protected]'} 'или отдельный словарь и '** headers', как я использовал в своем ответе, передадут эту пару ключ-значение в словарь' headers' в этой функции. –