我正在做我的第一个项目,正在阅读我的教科书并编写了这个程序,
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自动化无聊的东西,我是对的,但我不断收到错误消息。有什么我做错了吗?或者我错过了重要的一步?
答案 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
。