将数据合并为一封电子邮件:Python



我想合并数据,这样我只能发送一封电子邮件

for body in result:
msg = EmailMessage()
msg.set_content(body)
msg['From'] = email_address
msg['To'] = recipient_address
msg['Subject'] = subject_desc
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login("youremail@gmail.com", password)
print("login success")
server.send_message(msg)
print("This message has been sent")
server.quit()

这段代码实际上向我发送了十几封带有我从result获得的数据的电子邮件,因为它是循环的,但我想为这十几封数据获得一封电子邮件。我试过这样的东西:

def email(body):
data = []
for body in result:
data.append(body)
return data

但它仍然发送十几封电子邮件,而不是一封。我该怎么办?

提前感谢:(

如果您有一个包含多个字符串的列表,则创建一个字符串

body = "n".join(result)

并且在没有CCD_ 2-循环的情况下发送。

msg = EmailMessage()
body = "n".join(result)
#body = "n---n".join(result) # to separate result with line `---`
msg.set_content(body)
msg['From'] = email_address
msg['To'] = recipient_address
msg['Subject'] = subject_desc

如果您有带有文件名的列表,那么您可以使用for循环,但使用不同的缩进。

这是仅发送图像的示例。对于其他类型的文件,需要不同的maintypesubtype

filenames = ['images/lenna.jpg', 'images/cats.jpg']
# ... 
msg = EmailMessage()
for name in filenames:
msg.add_attachment(open(name, 'rb').read(), filename=name, maintype='text', subtype='jpg')
msg['From'] = email_address
msg['To'] = recipient_address
msg['Subject'] = subject_desc

或者你可以使用其他模块来猜测类型

import mimetypes
# ... code ...
for name in filenames:
ctype, encoding = mimetypes.guess_type(name)
print(name, ctype, encoding)
maintype, subtype = ctype.split('/')
msg.add_attachment(open(name, 'rb').read(), filename=name, maintype=maintype, subtype=subtype)

当然,您也可以在同一封邮件中使用set_content()add_attachment()
它可以用来发送带有图像的HTML,但我跳过这个例子。

最新更新