CR0*_*V3R 6 python typeerror smtplib
好吧,伙计们,我已经在网上看了很多年,根本找不到答案.我尝试过很多建议,但似乎无法让它发挥作用.我正在尝试使用python(smtplib和电子邮件模块)和gmail服务发送电子邮件.这是我导入的包:
import time, math, urllib2, urllib, os, shutil, zipfile, smtplib, sys
from email.mime.text import MIMEText
Run Code Online (Sandbox Code Playgroud)
这是我发送电子邮件的def语句:
def sendmessage():
print('== You are now sending an email to Hoxie. Please write your username below. ==')
mcusername = str(raw_input('>> Username: '))
print('>> Now your message.')
message = str(raw_input('>> Message: '))
print('>> Attempting connection to email host...')
fromaddr = 'x@gmail.com'
toaddrs = 'xx@gmail.com'
username = 'x@gmail.com'
password = '1013513403'
server = smtplib.SMTP('smtp.gmail.com:587')
subject = 'Email from',mcusername
content = message
msg = MIMEText(content)
msg['From'] = fromaddr
msg['To'] = toaddrs
msg['Subject'] = subject
try:
server.ehlo()
server.starttls()
server.ehlo()
except:
print('!! Could not connect to email host! Check internet connection! !!')
os.system('pause')
main()
else:
print('>> Connected to email host! Attempting secure login via SMTP...')
try:
server.login(username,password)
except:
print('!! Could not secure connection! Stopping! !!')
os.system('pause')
main()
else:
print('>> Login succeeded! Attempting to send message...')
try:
server.sendmail(fromaddr, toaddrs, msg)
except TypeError as e:
print e
print('Error!:', sys.exc_info()[0])
print('!! Could not send message! Check internet connection! !!')
os.system('pause')
main()
else:
server.quit()
print('>> Message successfully sent! I will respond as soon as possible!')
os.system('pause')
main()
Run Code Online (Sandbox Code Playgroud)
我已经调试了广泛但我敢于得到这个:
>> Login succeeded! Attempting to send message...
TypeError: expected string or buffer
Run Code Online (Sandbox Code Playgroud)
这意味着它成功登录但在尝试发送消息时停止了.令我难以置信的一点是,它并没有指向何处.此外,我的编码可能不是那么好,所以没有网络欺凌.
任何帮助将不胜感激!谢谢.
崩溃的线是
server.sendmail(fromaddr, toaddrs, msg)
Run Code Online (Sandbox Code Playgroud)
你给它两个字符串和一个MIMEText实例; 它希望以字符串的形式发送消息.[我认为它也希望列表形式的地址,但它特殊情况下一个字符串.]例如,您可以查看文档中的示例:
s = smtplib.SMTP('localhost')
s.sendmail(me, [you], msg.as_string())
s.quit()
Run Code Online (Sandbox Code Playgroud)
您必须将MIMEText转换为字符串,以便sendmail感到高兴.修复了@jdi指出的主题错误(生成"AttributeError:'tuple'对象没有属性'lstrip'"消息)并将msg更改为msg.as_string()
,你的代码适合我.
我的猜测是罪魁祸首是这一行:
subject = 'Email from',mcusername
Run Code Online (Sandbox Code Playgroud)
如果您希望将主题创建为字符串,那么它实际上会被制作成元组,因为您传递了两个值。您可能想做的是:
subject = 'Email from %s' % mcusername
Run Code Online (Sandbox Code Playgroud)
另外,对于调试方面...包装所有异常并仅打印异常消息的方式会丢弃有用的回溯(如果有的话)。您是否尝试过在真正知道要处理的特定异常之前不包装所有内容?当出现语法错误时,像这样进行全面的异常处理会使调试变得更加困难。
归档时间: |
|
查看次数: |
8048 次 |
最近记录: |