在python 3中从gmail发送emal

时间:2016-05-31 09:36:48

标签: email python-3.x

我正在做我的第一个项目,正在阅读我的教科书并编写了这个程序,

import smtplib
password=input(str("Enter your password for example@gmail.com")
smtp0bj.ehlo()
smtp0bj.starttls()
smtp0bj.login('example@gmail.com',password)
smtp0bj.sendmail('example@gmail.com','example2@gmail.com','example3@hotmail.com','subject:Testmail\nTesting,testing,1,2,3,testing'
{}
smtp0bj.quit()

根据我的教科书,Al Sweigart的使用Python自动化无聊的东西,我是对的,但我不断收到错误消息。有什么我做错了吗?或者我错过了重要的一步?

1 个答案:

答案 0 :(得分:4)

你的一个问题似乎是在程序开始时出现语法错误:当你要求输入密码时,你打开两组括号input(str(,然后只关闭一组,所以添加一个额外的最后的括号应解决这个问题。

然而,您可以将input(str("text"))替换为input("text"),因为您要尝试将字符串转换为字符串,这只是浪费时间,您可能正在尝试但是要将输入作为字符串(str(input("text")))获取,在这种情况下这是不必要的,因为输入会在python中自动读取为字符串。

似乎你没有定义smtp0bj,我不知道你从哪里得到这个名字,所以也许是对教科书的另一种解读(我假设这个名字来自于教科书)会显示缺少一两行。

如果你的代码没有成功,这里有一个程序的副本,用于通过python在Gmail中发送电子邮件:

from smtplib import SMTP_SSL as SMTP
import logging, logging.handlers, sys
from email.mime.text import MIMEText

try:
    logger = logging.getLogger("__main__")
    logger.setLevel(logging.DEBUG)
    ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    ch.setFormatter(formatter)
    logger.addHandler(ch)
    to=""                       #Recipient's email address
    frm=""                      #Sender's email address
    pswd=""                     #Sender's password
    sub=""                      #Subject of email
    text=""                     #Message to send
    msg = MIMEText(text, 'plain')
    msg['Subject'] = sub
    msg['To'] = to
except Exception as err:
    pass

try:
    conn = SMTP("smtp.gmail.com")
    conn.set_debuglevel(True)
    conn.login(frm, pswd)
    try: conn.sendmail(frm, to, msg.as_string())
    finally: conn.close()
except Exception as exc:
    print(exc)
    logger.error("ERROR!!!")
    logger.critical(exc)
    sys.exit("Mail failed: {}".format(exc))

希望这有帮助。

修改

我在网上找到了您的图书(https://automatetheboringstuff.com/chapter16/),发现您错过了一个步骤,定义了smtp服务器。添加第smtpObj = smtplib.SMTP('smtp.gmail.com', 587)行可以让您从Gmail发送电子邮件。

import smtplib
smtpObj = smtplib.SMTP('smtp.gmail.com', 587)
smtpObj.ehlo()
smtpObj.starttls()
smtpObj.login('MyEmailAddress@gmail.com', 'MyEmailPassword')
smtpObj.sendmail('MyEmailAddress@gmail.com', 'RecipientEmailAddress@example.com', 'Subject: SubjectText.\nMessage Text')
smtpObj.quit()

另外:确保您的程序未被调用email.py,因为它是stmplib中使用的模块之一的名称,因此它将引发AtributeError