Python:试图通过电子邮件发送附件〜字符串错误?

Posted

技术标签:

【中文标题】Python:试图通过电子邮件发送附件〜字符串错误?【英文标题】:Python: Trying to send attachments via email ~ string error? 【发布时间】:2017-10-07 21:52:18 【问题描述】:

我正在尝试使用 python 通过电子邮件发送附件,但出现此错误:

msg.attach(msgImage) AttributeError: 'str' 对象没有属性 'attach'

代码如下:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.mime.image import MIMEImage


def send_email():
    fromaddr = 'testevpsa1@gmail.com'
    toaddrs  = 'Toemail'
    global msg
    subject = 'RESPOSTA'
    message = 'Subject: %s\n\n%s' % (subject, msg)

    username = 'testevpsa1@gmail.com'
    password = 'xxxxxxxx'

    server = smtplib.SMTP('smtp.gmail.com:587')
    server.starttls()
    server.login(username,password)

    fp = open ('C:\Python27\Scripts\pares.txt', 'rb')
    msgImage = MIMEImage (fp.read(), _subtype='txt')
    fp.close()
    msg.attach(msgImage)

    server.sendmail(fromaddr, toaddrs, message,  msg.as_string())
    server.quit()

msg = 'Email test, please, see the attachments'
send_email()

谁有什么问题的提示?

【问题讨论】:

提示:msg 的类型是什么? msg 是一个字符串,但我还是不明白这个问题,当脚本读取txt文件时,它不能将内容“附加”为字符串吗? 【参考方案1】:

您的代码很奇怪且不正确。您开始使用高级概念,但没有语言、smtp 协议和电子邮件模块的基本知识。

您代码中的msg 变量具有str 类型。 str 是一个纯字符串 - 一个字符列表。它没有方法.attach

我猜你想使用 email.message 类的实例而不是字符串。此外,不需要使用全局变量。全局变量不好,在你的情况下完全没有必要使用全局变量。

【讨论】:

感谢您的回答,我正在使用全局变量,因为将来它可能会在另一个函数中使用。 如果你想写一个函数,稍后被另一个函数使用,那么全局变量是最差可能的参数传递方式。您需要使用普通函数参数,而不是全局变量。例如:def send_mail(msg):

以上是关于Python:试图通过电子邮件发送附件〜字符串错误?的主要内容,如果未能解决你的问题,请参考以下文章

使用python发送带有(docx)附件的邮件

无法通过电子邮件意图发送图像附件

Python:多部分 html 电子邮件通过嵌入式图像和附件发送

通过 python 发送时附件不显示在 Outlook 中

无法在python中使用MIME发送带有pdf附件的电子邮件

Python 2.7 smtplib 如何发送带有错误 13 权限的附件被拒绝?