当前位置: 首页 > 面试题库 >

二进制文件电子邮件附件问题

单于飞鸣
2023-03-14
问题内容

使用Python 3.1.2,我在发送二进制附件文件(jpeg,pdf等)时遇到问题-MIMEText附件可以正常工作。有问题的代码如下…

for file in self.attachments:
   part = MIMEBase('application', "octet-stream")
   part.set_payload(open(file,"rb").read())
   encoders.encode_base64(part)
   part.add_header('Content-Disposition', 'attachment; filename="%s"' % file)
   msg.attach(part)   # msg is an instance of MIMEMultipart()

server = smtplib.SMTP(host, port)
server.login(username, password)
server.sendmail(from_addr, all_recipients, msg.as_string())

但是,在调用堆栈的最下方(请参见下面的回溯),看起来msg.as_string()已接收到一个附件,该附件创建了“字节”类型的有效负载而不是字符串。

有谁知道是什么原因引起的问题?任何帮助,将不胜感激。

艾伦

builtins.TypeError: string payload expected: <class 'bytes'>
File "c:\Dev\CommonPY\Scripts\email_send.py", line 147, in send
  server.sendmail(self.from_addr, all_recipients, msg.as_string())
File "c:\Program Files\Python31\Lib\email\message.py", line 136, in as_string
  g.flatten(self, unixfrom=unixfrom)
File "c:\Program Files\Python31\Lib\email\generator.py", line 76, in flatten
  self._write(msg)
File "c:\Program Files\Python31\Lib\email\generator.py", line 101, in _write
  self._dispatch(msg)
File "c:\Program Files\Python31\Lib\email\generator.py", line 127, in _dispatch
  meth(msg)
File "c:\Program Files\Python31\Lib\email\generator.py", line 181, in _handle_multipart
  g.flatten(part, unixfrom=False)
File "c:\Program Files\Python31\Lib\email\generator.py", line 76, in flatten
  self._write(msg)
File "c:\Program Files\Python31\Lib\email\generator.py", line 101, in _write
  self._dispatch(msg)
File "c:\Program Files\Python31\Lib\email\generator.py", line 127, in _dispatch
  meth(msg)
File "c:\Program Files\Python31\Lib\email\generator.py", line 155, in _handle_text
  raise TypeError('string payload expected: %s' % type(payload))

问题答案:

好的-经过无奈和网上搜索后,我发现问题是一个已知的错误,适用于Python
3.x,encoders.py,encode_base64函数,其内容应如下所示…

def encode_base64(msg):
    """Encode the message's payload in Base64.

    Also, add an appropriate Content-Transfer-Encoding header.
    """
    orig = msg.get_payload()
    encdata = _bencode(orig)

    # new line inserted to ensure all bytes characters are converted to ASCII
    encdata = str(encdata, "ASCII")

    msg.set_payload(encdata)
    msg['Content-Transfer-Encoding'] = 'base64'

该错误已作为问题#4768提出,并于2010-05-10升级为严重状态。希望它将在下一版本(3.1.3?)中修复。

问候,艾伦



 类似资料:
  • 问题内容: 我正在使用sendgrid发送电子邮件,并且使用以下代码可以正常工作,但没有附件。 但是我需要发送附件,因此我搜索了github源和Web文档API,由于某种原因,没有javadocs,但是有一个示例GitHub sendgrid, 所以我一直在尝试直到它起作用为止,我缩小了一些异常和响应代码,起初我是被禁止的未经授权,最好是响应202,表示有效且已排队(在此处检查),这是我的代码发送

  • 问题内容: 我想发送带有PDF附件的电子邮件。我创建了PDF文件,然后执行了以下操作,但我认为这是错误的: 在发送电子邮件之前,我可以看到附件,但是当我发送电子邮件时,它的发送没有附件,这是因为我没有正确附加文件。 问题答案: 您错了。使用代替。

  • 我试图发送一个附加的json文件到电子邮件,但是由于某种原因,在发送/创建电子邮件时,json文件没有被附加。注意:我不希望用户选择要附加的文件,我希望它被固定/自动设置。 我有以下权限在我的 还有密码 编辑1:在做了@piyushpk建议的建议更改后,我现在在选择电子邮件应用程序时会出现以下错误: 然而,根据我的打印声明,文件大小只有69KB。。。

  • 问题内容: 使用python发送电子邮件时如何添加文档附件?我收到了要发送的电子邮件(请忽略:我正在循环发送电子邮件,每5秒发送一次,仅用于测试目的,我希望每30分钟发送一次,只需将5更改为1800) 到目前为止,这是我的代码。我如何从计算机上附加文档? 问题答案: 这是对我有用的代码-使用python发送带有附件的电子邮件

  • 问题内容: 我在理解如何使用Python通过电子邮件发送附件时遇到问题。我已成功通过电子邮件将简单消息通过电子邮件发送。有人可以在电子邮件中说明如何发送附件。我知道在线上还有其他帖子,但是作为Python初学者,我很难理解它们。 问题答案: 这是另一个:

  • 我想用mailto标签发送电子邮件,附带一个pdf文件作为附件。mailto标记使用以下方法打开邮件窗口,其中包含传递的参数,如to和subject: 但是,附件作为一个参数不起作用。请建议如何在手机中发送pdf附件。 谢啦

  • 查看以下,详细了解如何处理与 iPhone 手机配对的 M600 上的电子邮件。 阅读您的 M600 上的电子邮件 如果您在手机上使用电子邮件通知,那么在您收到新邮件时会在您的 M600 看到通知。 阅读电子邮件 轻触通知。 利用您的 M600 回复电子邮件 您可以利用您的手腕表回复邮件。 回复电子邮件 轻触通知查看所有邮件 从屏幕底部向上滑动,查看您可以执行的操作。 轻触 Reply(回复),并

  • Email的历史比Web还要久远,直到现在,Email也是互联网上应用非常广泛的服务。 几乎所有的编程语言都支持发送和接收电子邮件,但是,先等等,在我们开始编写代码之前,有必要搞清楚电子邮件是如何在互联网上运作的。 我们来看看传统邮件是如何运作的。假设你现在在北京,要给一个香港的朋友发一封信,怎么做呢? 首先你得写好信,装进信封,写上地址,贴上邮票,然后就近找个邮局,把信仍进去。 信件会从就近的小