在 python 脚本上附加 MIME 时出错

Posted

技术标签:

【中文标题】在 python 脚本上附加 MIME 时出错【英文标题】:Error when attaching MIME on python script 【发布时间】:2014-11-27 00:01:28 【问题描述】:

此脚本的目的是侦听串行端口并发送带有 IP 摄像头图片的电子邮件,该图片在触发时被检索。这是我目前遇到的错误。

` 导入时间 导入序列号 从 email.MIMEMultipart 导入 MIMEMultipart 从 email.MIMEText 导入 MIMEText 从 email.MIMEImage 导入 MIMEImage 导入 smtplib 导入日期时间 导入urllib

TO = '111111111@mms.att.net'
GMAIL_USER = 'email@gmail.com'
GMAIL_PASS = 'password'

SUBJECT = 'Intrusion= NODE 18'
TEXT = 'MOVEMENT'

ser = serial.Serial('/dev/tty.usbserial-DA00S0U6', 115200)

def send_email():
urllib.urlretrieve ("http://<IPADDRESS>/snapshot/view4.jpg","view4.jpg")
print("Sending Email")
print str(datetime.datetime.now())
smtpserver = smtplib.SMTP("smtp.gmail.com",587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo
smtpserver.login(GMAIL_USER, GMAIL_PASS)
header = 'To:' + TO + '\n' + 'From: ' + GMAIL_USER
header = header + '\n' + 'Subject:' + SUBJECT + '\n'
print header
msg = MIMEMultipart() + header + '\n' + TEXT + ' \n\n'
msg.attach(MIMEImage(file("view4.jpg").read()))
smtpserver.sendmail(GMAIL_USER, TO, msg)
smtpserver.close()



 while True:
 message = ser.readline()
 print(message)
 if "[18] MOTION" in message :
     send_email()

 time.sleep(0.5)`

错误:===

Traceback (most recent call last): File "motion3.py", line 58, in <module> send_email() File "motion3.py", line 32, in send_email msg = MIMEMultipart() + header + '\n' + TEXT + ' \n\n' TypeError: unsupported operand type(s) for +: 'instance' and 'str'

【问题讨论】:

【参考方案1】:

以后确保您发布的代码缩进正确!

您没有正确使用 MIMEMultipart 类。请参阅 Python 文档中的 email: Examples;第三个例子展示了MIMEMultipart的正确用法。

错误消息是说您正在尝试将一个新的类实例MIMEMultipart() 和一个字符串header 添加在一起,但您不能这样做!

您的代码中可能存在逻辑错误,但我没有仔细研究它 - 尝试阅读缩进严重的 Python 实在是太痛苦了。 :(

【讨论】:

以上是关于在 python 脚本上附加 MIME 时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 perl 在 MIME 中解码附件时出错

python MIME将多个附件附加到多部分消息

附加到python中的空列表时出错[重复]

如何将 msg 中的附件附加到 Mime 以在 Python 中作为电子邮件发送?

如何将.gpx文件附加到使用Google Apps脚本发送的邮件中?

Python:如何更改 smtp/MIME 脚本中的“to”字段而不是添加一个新字段?