将word文档附加到电子邮件并发送,而不在python中本地保存

时间:2018-02-16 20:20:52

标签: python python-3.x python-2.7

我有一个创建word文档的应用程序,我需要将其发送出去而不在本地保存。换句话说,我需要发送一个对象。我知道下面的代码不起作用,因为我的文档是一个对象。有没有办法做到这一点?

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文档

有谁知道怎么做?这就是我所拥有的:

def document_writer():
document = Document()
document.add_heading('Sample Document', 0)
document.add_paragraph("fsfsa")

document.add_heading('Addresses', 2)


return document

def mailsend(send_from, send_to, subject, text, login, password, document, files=None,
          smtpserver='smtp.gmail.com:587'):

msg = MIMEMultipart()
msg['From'] = send_from
msg['To'] = send_to
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = subject
msg.attach(MIMEText(text))
part = MIMEBase('application', "octet-stream")
part.set_payload(open(document, "rb").read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="crap.docx"')
msg.attach(part)
server = smtplib.SMTP(smtpserver)
server.starttls()
#server.starttls()
server.login(login, password)
server.sendmail(send_from, send_to, msg.as_string())

server.close()

1 个答案:

答案 0 :(得分:0)

在您的代码中的某个时刻,函数需要string但得到Document类,而python则不知道如何转换为string

在您的函数document_writer中,您正在创建此类Document 因此,您应该检查使用此类创建的Document对象的位置。

然后解决这个问题可能有三种解决方案:

  1. Document类可以转换为字符串。然后你可以str(Document)
  2. 此文档类不能通过str()转换为字符串,但具有执行此操作的特殊功能。然后你可以document_variable.convert_to_str_function()
  3. 您可以将此Document类作为文件保存到磁盘。然后你应该看一下这些答案:Binary file email attachment problem通过电子邮件发送基于磁盘的文件