如何通过MIMEMultipart

时间:2015-11-18 09:16:23

标签: python email

我只是很想知道MIMEMultipart是否有任何属性,我可以通过我的电子邮件正文部分......只有我想出的部分是

msg = MIMEMultipart()
msg["From"] = emailfrom
msg["To"] = emailto
msg["Subject"] = "hi find the attached file"
msg.preamble = "please PFA"

有蚂蚁之类的东西吗

 msg["Body"] = i will add a string or a text file

我用Google搜索并找到了

body = MIMEMultipart('alternative')
body.attach(MIMEText(text))

但不适用于我的情况。 还有一件事是MIMEMultipart('替代')这个部分的工作原理或功能。

请建议。

3 个答案:

答案 0 :(得分:9)

多部分容器的目的是包含其他MIME部分。如果你只有一个部分,根据定义,它不是多部分。

当您在不同的渲染中具有相同的内容时,

multipart/alternative非常有用。一个常见的情况是在text/plain(没有字体,颜色,图像或其他"丰富的内容)和text/html中都有邮件正文。通常,用户将他的客户端配置为优先于另一个,因此它将显示用户喜欢的任何内容。不太常见的是,用户有一个可以显示一种类型而不是另一种类型的客户端,因此显示支持的版本是技术必要性而非用户偏好的问题。

当您有多个部分构成邮件时,

multipart/related非常有用。例如,text/html中的multipart/alternative部分可能需要提取作为"相关"提供的图像。部分。所以一个共同的结构实际上是

multipart/alternative
    +---- text/plain
    +---- multipart/related
              +---- text/html
              +---- image/png
              +---- image/png
如果有一个独立于multipart/related效果图的附件,则

或上面的其他multipart/alternative

对于您的具体示例,只需将身体部位声明为text/plain

msg = MIMEText(text)
msg["From"] = emailfrom
msg["To"] = emailto
msg["Subject"] = "hi find the attached file"

对于它的价值,您通常不需要弄乱MIME前导码,或者想象客户端会显示它。 (当有多个部分时,只会有一个序言。)

如果您确实要包含实际附件,请执行以下操作:

msg = MIMEMultipart()
msg["From"] = emailfrom
msg["To"] = emailto
msg["Subject"] = "hi find the attached file"
msg.attach(MIMEText(text))
attachment = MIMEBase('application', 'octet-stream')
attachment.set_payload(data)
msg.attach(attachment)

答案 1 :(得分:6)

这对我有用:

msg = MIMEMultipart()
msg['From'], msg['To'], msg['Subject'] = ... # specify your sender, receiver, subject attributes
body = 'This is the body of the email.'
body = MIMEText(body) # convert the body to a MIME compatible string
msg.attach(body) # attach it to your main message

您将body附加到msg,而您案例中的body应该是MIMEText对象。

答案 2 :(得分:2)

我建议只使用一些不会“打扰”你的电子邮件包,了解类型。

介绍yagmail(我是开发人员)。

它会自动执行您想要的操作(附件,图片,HTML代码,后退和许多其他功能)。

pip install yagmail

然后

import yagmail
yag = yagmail.SMTP('myemail', 'mypass')
mixed_contents = ['some text', '/path/to/local/img', '/path/to/mp3', 
                  '<h1>a big header text</h1>']
yag.send('toaddr@email.com', 'subject', mixed_contents)

您最终会得到一些文字,一些标题,内联图片和附件。