Python:带图片的 Mime 消息

Posted

技术标签:

【中文标题】Python:带图片的 Mime 消息【英文标题】:Python: Mime message with Pictures 【发布时间】:2015-06-14 10:06:44 【问题描述】:

我正在尝试使用我的邮件和 python 发送 png 图像。 这是我找到的一个脚本:

# Import smtplib for the actual sending function
import smtplib

# Here are the email package modules we'll need
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

COMMASPACE = ', '

# Create the container (outer) email message.
msg = MIMEMultipart()
msg['Subject'] = 'Our family reunion'
# me == the sender's email address
# family = the list of all recipients' email addresses
msg['From'] = me
msg['To'] = COMMASPACE.join(family)
msg.preamble = 'Our family reunion'

# Assume we know that the image files are all in PNG format
for file in pngfiles:
    # Open the files in binary mode.  Let the MIMEImage class automatically
    # guess the specific image type.
    with open(file, 'rb') as fp:
        img = MIMEImage(fp.read())
    msg.attach(img)

# Send the email via our own SMTP server.
s = smtplib.SMTP('localhost')
s.send_message(msg)
s.quit()

来源:https://docs.python.org/3/library/email-examples.html

我的问题是,当我想要精确的 pngfiles 路径时,我会写如下内容:

pngfiles="/Desktop/Test2"

只返回这样的错误信息

Traceback (most recent call last):
  File "C:\Python27\work\Picture.py", line 46, in <module>
    fp = open(file, 'rb')
IOError: [Errno 13] Permission denied: '/'

这确实是一个愚蠢的问题,但不知道如何正确编写它...有什么帮助吗? :)

谢谢!

【问题讨论】:

尝试从路径中删除前导斜杠:pngfiles = "Desktop/Test2" 尝试但重新输入以下错误:IOError: [Errno 2] No such file or directory: 'D' 我想我尝试未经许可读取文件,不知道如何修复此错误!顺便说一句,Ty 寻求帮助 【参考方案1】:

你的文件路径:

"/Desktop/Test2"

和你的 python 路径:

"C:\Python27\work\Picture.py"

存在冲突(Unix 中的第一个,Windows 中的第二个)。

首先是使用真实的 Windows 路径。

pngfiles_folder = "C:\\Python27\\work\\"

但您还需要一种方法来识别要附加的文件(在本例中为 png)。为此,您可以使用 glob 包创建要附加的文件列表:

import glob
for file in glob.glob("C:\\Python27\\work\\*.png"):
    ....

【讨论】:

以上是关于Python:带图片的 Mime 消息的主要内容,如果未能解决你的问题,请参考以下文章

Python SMTP/MIME 消息正文

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

MIME消息结构解析与分析

在 Python 3 中为 HTTP 请求创建带有二进制组件的多部分 MIME 消息

在 MIME 多部分消息中显式指定边界?

如何在 C# 中将非 mime 消息转换为 mime 邮件消息