在Iron Python中发送电子邮件永远

时间:2015-06-01 02:20:10

标签: python email smtplib

所以我试图在Iron Python 2.7中发送电子邮件,但没有任何对我有用。所以我结合了一堆不同的代码来尝试并解决我的问题。基本上,我需要在不使用localhost的情况下发送zip文件,因为我假设客户端计算机不会拥有localhost。

这是我的代码:

# Send an email
def sendEmail():

    # Set standard variables
    send_to = ["*******@live.com"]
    send_from = "********@outlook.com"
    subject   = "New Game Info"
    text      = "Some new info for you. This is an automated message."

    assert isinstance(send_to, list)

    msg = MIMEMultipart(
        From=send_from,
        To=COMMASPACE.join(send_to),
        Date=formatdate(localtime=True),
        Subject=subject
    )

    print "Created MIME..."

    msg.attach(MIMEText(text))

    print "Attached message..."

    with open("TempLog.zip", "rb") as fil:
        msg.attach(MIMEApplication(
            fil.read(),
            Content_Disposition='attachment; filename="%s"' % "TempLog.zip"
        ))

    print "Attached file..."

    server = smtplib.SMTP()
    server.connect("smtp-mail.outlook.com", 587)
    server.starttls()
    server.login("*********@outlook.com", "*****")
    server.sendmail("********@outlook.com", send_to, msg.as_string())
    server.close()

正如您所看到的,我已经将打印语句放在任何地方以找到问题。它可以达到"附加文件......,"但没有进一步。

感谢您对此问题的任何帮助。

2 个答案:

答案 0 :(得分:0)

我是yagmail的维护者,这个软件包试图让发送电子邮件变得非常简单。

也许你可以试试这个:

import yagmail
yag = yagmail.SMTP(send_from, password, host = 'smtp-mail.outlook.com')
yag.send(send_to, subject = subject, contents = [text, "TempLog.zip"])

这应该自动将“text”作为正文,当你给它TempLog.zip的位置时,它会自动检测到它是一个zip文件并附上它。

您可能需要安装它:

pip install yagmail  # Python 2
pip3 install yagmail # Python 3

如果某些内容不起作用(或确实如此),请告诉我!我一定会尝试提供更多帮助。

答案 1 :(得分:0)

我建议使用try/catch块来找出问题究竟是什么。

使用您当前的代码:

try:
    server = smtplib.SMTP()
    server.connect("smtp-mail.outlook.com", 587)
    server.starttls()
    server.login("*********@outlook.com", "*****")
    server.sendmail("********@outlook.com", send_to, msg.as_string())
    server.close()
except SMTPException, err:
   print "ERROR: Unable to send mail - %s" %(err)
except Exception, err:
   print "Some other error - %s" %(err)

有一个例子,我建议将主机选项放在SMTP初始化中,而不是在connect()中这样做。您可以根据需要修改此示例以使用starttls()

try:
  smtp = smtplib.SMTP(host, port)
  smtp.sendmail(sender, receivers, message)         
  print "Successfully sent email to '%s'" %(receivers)
except SMTPException, err:
  print "ERROR: Unable to send mail - %s" %(err)
except Exception, err:
   print "Some other error - %s" %(err)