我想合并数据,这样我只能发送一封电子邮件
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
循环,但使用不同的缩进。
这是仅发送图像的示例。对于其他类型的文件,需要不同的maintype
、subtype
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,但我跳过这个例子。