Как отправить вложенные файлы изображений и одно и то же изображение, вложенное в текст сообщения электронной почты в формате html, с помощью python smtplib? - PullRequest
1 голос
/ 07 апреля 2019

Я пытаюсь отправить электронное письмо с вложенными файлами изображений и внедренными файлами изображений внутри тела письма, используя шаблон HTML, пока я могу только прикреплять файлы изображений, но файлы встроенных изображений не отображаются в письме. Это говорит, что изображение ссылки не может быть отображено, файл может быть удален, удален или переименован. проверьте точку ссылки, чтобы исправить файл изображения и местоположение, а также вложенные файлы имеют одинаковый размер. ниже приведен код, который я использовал

import datetime
from requests_toolbelt import MultipartEncoder
import requests
import glob, os
import argparse
import smtplib
import base64
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.mime.image import MIMEImage
from os.path import basename
import os
import shutil
import socket
import ntpath
from jinja2 import Template

def send_mail(send_from: str, subject: str, text: str,send_to: list, files= None):

    send_to= default_address if not send_to else send_to
    main = Template('''
    <html><body>
    {% for image in pictures %}<img src="cid:{{image}}">{% endfor %}
    </body></html>''')  
    msg = MIMEMultipart()
    html = main.render(pictures=files)
    part2 = MIMEText(html, 'html')
    msg.attach(part2)
    msg['From'] = send_from
    msg['To'] = ', '.join(send_to)
    msg['Subject'] = subject
    for f in files or []:
        with open(f, "rb") as fil:
            msgImage = MIMEImage(fil.read())
            ext = f.split('.')[-1:]
            attachedfile = MIMEApplication(fil.read(), _subtype = ext)
            fil.close()
            msgImage.add_header('Content-ID', '<{}>'.format(f))
            msgImage.add_header('content-Disposition','inline',filename=f)
            msg.attach(msgImage)
            attachedfile.add_header(
                'content-disposition', 'attachment', filename=basename(f) )
        msg.attach(msgImage)
        msg.attach(attachedfile)
    smtp = smtplib.SMTP(host="smtp-mail.outlook.com", port= 25)
    smtp.starttls()
    smtp.login(usr,pwd)
    smtp.sendmail(send_from, send_to, msg.as_string())
    smtp.close()
send_mail(send_from= frommail,
subject="Daily backup Testing",
text='files added: ',
send_to= tomail,
files= files_list)

Я получаю почту как это image. Файлы пути к изображениям верны. когда я печатаю, я получаю это files ['check123\\Screenshot (161).png', 'check123\\Screenshot (163).png', 'check123\\Screenshot (164).png'] Я не знаю, где я делаю неправильно, если путь к файлу неверен, он должен был выдать ошибку при чтении самого файла fil.read (). Кто-нибудь может указать мне на ошибку в моем коде? спасибо

...