将数据合并为一封电子邮件:Python
merge data into single one for an email : 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)
并在没有 for
循环的情况下发送。
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
-loop 但缩进不同。
仅发送图片示例。对于其他类型的文件,它需要不同的 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 图像 - 但我跳过这个例子。
我想合并数据,这样我只能发送一封电子邮件
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)
并在没有 for
循环的情况下发送。
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
-loop 但缩进不同。
仅发送图片示例。对于其他类型的文件,它需要不同的 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 图像 - 但我跳过这个例子。