Gmail不接受电子邮件程序中的登录信息

tda*_*tda 2 python python-2.7

除了处理使用Gmail登录时,此程序运行良好.我不太确定这是特定于Gmail的问题,还是我的程序有问题.康卡斯特,美国在线和雅虎!工作得很好.

import socket
import smtplib

email_provider = raw_input('Gmail, AOL, Yahoo! or Comcast? ').title()
email_user = raw_input('Type in your full email username. ')

email_pwd = raw_input('Type in your email password. ')

if email_provider == 'Gmail' or 'Google': 
    smtpserver = smtplib.SMTP("smtp.gmail.com",587)
if email_provider == 'Aol' or 'AOL': 
    smtpserver = smtplib.SMTP("smtp.aol.com",587)
if email_provider == 'Yahoo' or 'Yahoo!': 
    smtpserver = smtplib.SMTP("smtp.mail.yahoo.com",587)
if email_provider == 'Comcast' or 'Xfinity': 
    smtpserver = smtplib.SMTP("smtp.comcast.net",587)

smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo
smtpserver.login(email_user, email_pwd)

sendto = raw_input('Email address to send message to: ')
to = sendto
CC = sendto

subj = raw_input('Subject: ')

header = 'To: ' + to + '\n' + 'From: ' + email_user + '\n' + 'Subject:' + subj +'\n'
print '\nMessage Details:' 
print (header)
assignment=raw_input('Enter your message: ')
msg = header + assignment + '\n'
smtpserver.sendmail(email_user, to, msg)
print ('Your message has been sent!')
smtpserver.close()
Run Code Online (Sandbox Code Playgroud)

Mak*_*oto 5

这是个问题:

if email_provider == 'Gmail' or 'Google': 
Run Code Online (Sandbox Code Playgroud)

Python适用于truthy值.任何不是False,None,0或一个空的集合/映射会True.

从它的外观来看,执行链将一直处于下降状态,直到它将您的SMTP连接凭据设置为Comcast的服务器.

所以,实际上,你的第一个声明就是这样说:

if email_provider == 'Gmail' or True
Run Code Online (Sandbox Code Playgroud)

您可能希望将其更改为:

if email_provider in ('Gmail', 'Google')
Run Code Online (Sandbox Code Playgroud)

然后,实际上,这些可以被重写为elif- 在任何给定时间,这些陈述中只有一个是真实的.