Đối với phiên bản Python 3.4 trở lên
Câu trả lời được chấp nhận là tuyệt vời, nhưng cũ. Tôi nghĩ rằng nó cần một bản cập nhật.
Đây là cách bạn có thể làm điều đó trong các phiên bản mới hơn Python (3.4 trở lên):
from email.message import EmailMessage
from email.utils import make_msgid
import mimetypes
msg = EmailMessage()
# generic email headers
msg['Subject'] = 'Hello there'
msg['From'] = 'ABCD <[email protected]>'
msg['To'] = 'PQRS <[email protected]>'
# set the plain text body
msg.set_content('This is a plain text body.')
# now create a Content-ID for the image
image_cid = make_msgid(domain='xyz.com')
# if `domain` argument isn't provided, it will
# use your computer's name
# set an alternative html body
msg.add_alternative("""\
<html>
<body>
<p>This is an HTML body.<br>
It also has an image.
</p>
<img src="cid:{image_cid}">
</body>
</html>
""".format(image_cid=image_cid[1:-1]), subtype='html')
# image_cid looks like <[email protected]>
# to use it as the img src, we don't need `<` or `>`
# so we use [1:-1] to strip them off
# now open the image and attach it to the email
with open('path/to/image.jpg', 'rb') as img:
# know the Content-Type of the image
maintype, subtype = mimetypes.guess_type(img.name)[0].split('/')
# attach it
msg.get_payload()[1].add_related(img.read(),
maintype=maintype,
subtype=subtype,
cid=image_cid)
# the message is ready now
# you can write it to a file
# or send it using smtplib
Phần lớn cảm ơn, tôi đã cố gắng rất nhiều giải pháp, Đây là một trong những hoạt động hoàn hảo! – wukong
@Andrew Hare: Có hai chế độ xem nhiều phần (hai phiên bản msgText). Tôi không thấy loại nội dung được chỉ định cho từng loại nội dung. Làm thế nào để hệ thống nhận biết được kết xuất cho Html? –
Tôi đã thêm msgText.replace_header ('Content-Type', 'text/html') cho phiên bản msgText thứ hai. –