发送多封电子邮件,每封邮件都有不同的附件

问题描述 投票:0回答:0

我有一个由两个不同的函数生成的文本文件和 html 文件的列表。每个文件都标有 signal1.txt、signal2 等和 signal1.html、signal2.html 等。我需要发送包含每个文件对的电子邮件(signal1.txt 和 signal1.html、signal2.txt 和 signal.2。 html 等)。我尝试了几种不同的方法,但我一直只附加一对文件(最后一个文件编号,不管它是什么)。我发送一种文件类型没有问题,但是当我尝试使用两种不同的文件时它会变得混乱。

任何帮助表示赞赏。代码如下

from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import encoders
import smtplib, ssl
import os

dirname = r'C:\Path\To\Files'
ext = ('.txt','html')

for files in os.scandir(dirname):
    if files.path.endswith(ext):

        def sendmail():
            html_body = '''
            <html>
                <body>
                    <p style="font-size: 12;"> <strong>Alert</strong><br>{html}</p>
                </body>
            </html>
            '''.format(html=html)

            subject = f'Text file content'
            senders_email = '[email protected]'
            receiver_email = '[email protected]'

            # Create a multipart message and set headers
            message = MIMEMultipart('alternative')
            message['From'] = senders_email
            message['To'] = receiver_email
            message['Subject'] = subject

            #Attach email body
            message.attach(MIMEText(html_body, 'html'))

            # Name of the file to be attached
            filename = f'signal.html'

            # Open file in binary mode
            with open(filename, 'rb') as attachment:
                # Add file as application/octet-stream
                part = MIMEBase('application', 'octet-stream')
                part.set_payload(attachment.read())

            # Encodes file in ASCII characters to send via email
            encoders.encode_base64(part)

            # Add header as key/value pair to attachment part
            part.add_header(
                'Content-Disposition',
                f"attachment; filename= {filename}",

            )

            # Add attachment to message and convert message to string
            message.attach(part)
            text = message.as_string()

            # Log into server using secure connection
            context = ssl.create_default_context()
            with smtplib.SMTP("smtp.mail.com", 25) as server:
                # server.starttls(context=context)
                # server.login(senders_email, 'password')
                server.sendmail(senders_email, receiver_email, text)
            print("Email sent!")
        sendmail()
python
© www.soinside.com 2019 - 2024. All rights reserved.