#python #email #smtp #html-email #smtplib
#питон #Адрес электронной почты #smtp #html-электронная почта #smtplib #python #html-email
Вопрос:
Я написал скрипт на Python для отправки электронных писем через сервер ретрансляции. Я проверил, что соответствующие адреса электронной почты и т.д. разрешены и т.д., отправив электронное письмо с помощью Telnet. Мой скрипт на Python также работает, когда настроен на отправку через мой старый сервер ретрансляции.
Поэтому я не понимаю, почему я получаю следующее сообщение об ошибке:
(552, '5.6.0 Submission denied Sender does not match originator <myEmailAddress>)
Я просмотрел ошибку SMTP 552, и она вызвана превышением размера сообщения, но я отправляю электронное письмо, содержащее всего несколько строк html размером всего в несколько кб, поэтому я предполагаю, что могу безопасно исключить эту проблему.
Любые другие идеи относительно того, в чем может быть проблема?
РЕДАКТИРОВАТЬ: Вот код Python, который генерирует ошибку.
1 #!/usr/bin/env python
2 import sys
3 from sys import argv
4 import smtplib
5 import logging
6 import logging.handlers
7
8 LOG_FILENAME = 'sendMail.log'
9 inputMessage = argv[1]
10 sender = 'hi@sender.com'
11 receivers = 'hi@sender.com'
12 #Reads in the file as a single string
13 message = open(inputMessage, 'r').read()
14 log = logging.getLogger()
15
16 def initializelogging():
17 log.setLevel(logging.DEBUG)
18 fileformatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
19 filehandler = logging.handlers.RotatingFileHandler(
20 LOG_FILENAME,
21 maxBytes=10000000,
22 backupCount=100)
23 filehandler.setFormatter(fileformatter)
24 consoleformatter = logging.Formatter('%(levelname)s: %(message)s')
25 consolehandler = logging.StreamHandler()
26 consolehandler.setLevel(logging.INFO)
27 consolehandler.setFormatter(consoleformatter)
28 log.addHandler(filehandler)
29 log.addHandler(consolehandler)
30 initializelogging()
31
32 def sendMail():
33 try:
34
35 smtpObj = smtplib.SMTP('mailserver@server.com')
36 smtpObj.sendmail(sender,sender, message)
37 print "Successfully sent email"
38 log.info('Successfully sent email')
39 except Exception, err:
40 log.error('Unable to send email. See below stack trace........')
41 log.error('%sn' % str(err))
42 sendMail()
Комментарии:
1. Нам действительно нужно увидеть некоторый код.
2. Нам также действительно нужно увидеть весь вывод сообщения об отказе. Из вашего сообщения неясно, возвращается ли 552 почтовым сервером immediate (server.com ) или конечному адресату (sender.com ).
Ответ №1:
Я не могу гарантировать, что любой из них является фактической причиной ошибки, но:
-
Я думаю, что в получаемом вами сообщении может быть указано, что
From:
заголовок в вашем сообщении не соответствует адресу электронной почты, который вы используете для отправителя вsendmail()
вызове. Убедитесь, что сообщение, которое вы читаете из файла, а) имеет допустимые заголовки SMTP (по крайней мере,From
,To
иSubject
, иMIME-Version
иContent-Type
это не повредит) и, более конкретно, б) имеетFrom: hi@sender.com
заголовок. -
При создании экземпляра для объекта SMTP используется адрес сервера, а не адрес электронной почты. Вы должны использовать
smtpObj = smtplib.SMTP('mail.server.com')
или что-то еще, в чем не так много@
. В противном случае, возможно, он подключается не к тому серверу, который вы считаете нужным.
Комментарии:
1. Большое спасибо, дело в том, что заголовок from не соответствовал адресу электронной почты, который я использовал для отправителя в sendmail()!!!