我正在尝试使用 python 发送电子邮件,不知怎的,它说:“TypeError:‘instancemethod’类型的对象没有 len()”
我不明白为什么会发生这种情况,有人可以告诉我出了什么问题吗?
设备 = 树莓派
Python 版本 = 2.7.16
软件=树莓派
电子邮件服务器 = gmail
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
username = '[email protected]'
password = 'MyPassword'
def send_mail(text ='email body', subject ='subject' ,from_email = 'My Name <[email protected]>', recievers =None, html =None):
assert isinstance(recievers, list)
msg = MIMEMultipart('alternative')
msg['From'] = from_email
msg['To'] = recievers
msg['Subject'] = subject
txt_part = MIMEText(text, 'tekst')
msg.attach(txt_part)
if html != None:
html_part = MIMEText(html, 'html')
msg.attach(html_part)
msg_str = msg.as_string
# login to server
print('initialising.....')
server = smtplib.SMTP(host='smtp.gmail.com',port=587)
server.ehlo()
server.starttls()
print('logging in.....')
server.login(username, password)
# sending the email
print('sending.....')
server.sendmail(from_email, recievers, msg_str)
server.quit()
send_mail(recievers=['[email protected]'])
print('done')
File "/usr/lib/python2.7/smtplib.py", line 730, in sendmail
esmtp_opts.append("size=%d" % len(msg))
TypeError: object of type 'instancemethod' has no len()
从未使用过任何这些模块,但请检查
msg.as_string
是否是一个函数,如果不是,你必须调用它。
编辑:为了添加更彻底的解释,您的
sendmail
正在尝试检查消息的长度,但由于您没有调用 msg.as_string
,所以它收到了 msg
的实例
MIMEText
的方法,没有长度。