为什么我会收到此类型错误?类型错误:“instancemethod”类型的对象没有 len()

问题描述 投票:0回答:1

我正在尝试使用 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()

python python-2.7 email smtp smtplib
1个回答
0
投票

从未使用过任何这些模块,但请检查

msg.as_string
是否是一个函数,如果不是,你必须调用它。

编辑:为了添加更彻底的解释,您的

sendmail
正在尝试检查消息的长度,但由于您没有调用
msg.as_string
,所以它收到了
msg 的实例 
MIMEText
 的方法
,没有长度。

© www.soinside.com 2019 - 2024. All rights reserved.