Sru*_*thi 6 smtp html-email python-3.x
我正在尝试将图像显示为使用 Python 发送的邮件的一部分。Python 文档上有一个不起作用的示例。
from datetime import datetime
import sys
import smtplib
from email.message import EmailMessage
from email.headerregistry import Address
from email.utils import make_msgid
from email.mime.image import MIMEImage
attachment = '/user/file/test.png'
import email.policy
msg = EmailMessage()
msg['To'] = Address("Srujan", 'myemail@example.com')
msg['From'] = Address("Srujan", 'myemail@example.com')
msg['Subject'] = "Nice message goes with it "+str(datetime.now())
id = make_msgid()
msg.set_type('text/html')
msg.set_content(" This is the Data Message that we want to send")
html_msg = "<br> <b><u> This is the Text .... </u></b><br> <img src='cid:{image_id}' />".format(image_id=id[1:-1])
msg.add_alternative(html_msg, subtype="html")
image_data = open(attachment, "rb")
image_mime = MIMEImage(image_data.read())
image_data.close()
msg.add_attachment(image_mime, cid=id, filename = "myown.png" ,)
try:
with smtplib.SMTP('example.com') as s:
s.ehlo()
s.starttls()
s.ehlo()
s.send_message(msg)
s.close()
print("Email sent!")
except:
print("Unable to send the email. Error: ", sys.exc_info()[0])
raise
Run Code Online (Sandbox Code Playgroud)
我注意到最后一部分是 a message/rfc822,然后包含image/png.
Run Code Online (Sandbox Code Playgroud)from datetime import datetime import sys import smtplib from email.message import EmailMessage from email.headerregistry import Address from email.utils import make_msgid from email.mime.image import MIMEImage attachment = '/user/file/test.png' import email.policy msg = EmailMessage() msg['To'] = Address("Srujan", 'myemail@example.com') msg['From'] = Address("Srujan", 'myemail@example.com') msg['Subject'] = "Nice message goes with it "+str(datetime.now()) id = make_msgid() msg.set_type('text/html') msg.set_content(" This is the Data Message that we want to send") html_msg = "<br> <b><u> This is the Text .... </u></b><br> <img src='cid:{image_id}' />".format(image_id=id[1:-1]) msg.add_alternative(html_msg, subtype="html") image_data = open(attachment, "rb") image_mime = MIMEImage(image_data.read()) image_data.close() msg.add_attachment(image_mime, cid=id, filename = "myown.png" ,) try: with smtplib.SMTP('example.com') as s: s.ehlo() s.starttls() s.ehlo() s.send_message(msg) s.close() print("Email sent!") except: print("Unable to send the email. Error: ", sys.exc_info()[0]) raise
现在附加的消息有两个内容类型值。电子邮件只有文本,没有图像。
我已经在MultiPart课堂上成功地做到了,但希望通过EmailMessage.
lle*_*ekn 11
很遗憾,关于这个主题的 Python 文档不完整/错误。我想做同样的事情并遇到同样的问题(附件有两种内容类型)
通过使用attach()方法而不是add_attachment()在EmailMessage对象上解决了问题。唯一需要注意的是,您必须在执行此操作之前将EmailMessagetomultipart/mixed类型转换。一个例子:
from smtplib import SMTP
from email.message import EmailMessage
from email.mime.text import MIMEText
from email.headerregistry import Address
from ssl import SSLContext, PROTOCOL_TLSv1_2
# Creating and populating email data:
msg = EmailMessage()
msg['From'] = Address(display_name='Recipient', addr_spec='rcpt@example.org')
msg['To'] = Address(display_name='Sender', addr_spec='sender@example.org')
msg['Subject'] = 'An email for you'
msg.set_content('This should be in the email body')
# It is possible to use msg.add_alternative() to add HTML content too
# Attaching content:
att = MIMEText('This should be in an attached file') # Or use MIMEImage, etc
# The following line is to control the filename of the attached file
att.add_header('Content-Disposition', 'attachment', filename='attachment.txt')
msg.make_mixed() # This converts the message to multipart/mixed
msg.attach(att) # Don't forget to convert the message to multipart first!
# Sending the email:
with SMTP(host='smtp.example.org', port=587) as smtp_server:
try:
# You can choose SSL/TLS encryption protocol to use as shown
# or just call starttls() without parameters
smtp_server.starttls(context=SSLContext(PROTOCOL_TLSv1_2))
smtp_server.login(user='user@smtp.example.org', password='password')
smtp_server.send_message(msg)
except Exception as e:
print('Error sending email. Details: {} - {}'.format(e.__class__, e))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9784 次 |
| 最近记录: |