0

我编写了一个 Python 脚本来通过中继服务器发送电子邮件。我已经通过使用 Telnet 发送电子邮件测试了适当的电子邮件地址等是否已获得许可等。我的 Python 脚本在设置为通过我的旧中继服务器发送时也可以工作。

因此,我对为什么收到以下错误消息感到困惑:

 (552, '5.6.0 Submission denied Sender does not match originator <myEmailAddress>)

我查看了 SMTP 错误 552,它是由超出邮件大小引起的,但我只发送一封包含几行 html 的电子邮件,其大小只有几 kb,所以我假设我可以安全地统治这个问题出来了。

关于可能是什么问题的任何其他想法?

编辑:这是生成错误的 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('%s\n' % str(err))
 42 sendMail()
4

1 回答 1

0

我不能保证其中任何一个都是错误的实际原因,但是:

  1. 认为您收到的消息可能是说您的消息中的标题与您在呼叫From:中用于发件人的电子邮件地址不匹配。sendmail()确保您从文件 a) 中读取的消息具有有效的 SMTP 标头(至少FromTo、 和Subject、 并且MIME-Version不会Content-Type受到伤害),更具体地说 b) 具有From: hi@sender.com标头。

  2. SMTP 对象的实例化采用服务器地址,而不是电子邮件地址。你应该使用smtpObj = smtplib.SMTP('mail.server.com')或其他没有这么多@的东西。否则,它可能无法连接到您认为的服务器。

于 2010-10-12T16:38:02.740 回答