ОШИБКА SMTP: (552, ‘Отправитель с отклонением отправки 5.6.0 не соответствует отправителю )

#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:

Я не могу гарантировать, что любой из них является фактической причиной ошибки, но:

  1. Я думаю, что в получаемом вами сообщении может быть указано, что From: заголовок в вашем сообщении не соответствует адресу электронной почты, который вы используете для отправителя в sendmail() вызове. Убедитесь, что сообщение, которое вы читаете из файла, а) имеет допустимые заголовки SMTP (по крайней мере, From , To и Subject , и MIME-Version и Content-Type это не повредит) и, более конкретно, б) имеет From: hi@sender.com заголовок.

  2. При создании экземпляра для объекта SMTP используется адрес сервера, а не адрес электронной почты. Вы должны использовать smtpObj = smtplib.SMTP('mail.server.com') или что-то еще, в чем не так много @ . В противном случае, возможно, он подключается не к тому серверу, который вы считаете нужным.

Комментарии:

1. Большое спасибо, дело в том, что заголовок from не соответствовал адресу электронной почты, который я использовал для отправителя в sendmail()!!!