使用 smtplib 通过电子邮件发送以缩进格式设置的字典列表作为字符串?
Send a list of dictionaries, formatted with indents, as a string through email using smtplib?
我正在尝试将带有缩进格式的词典列表发送到我的电子邮件。目前,这是我根据我的代码收到的结果电子邮件:
[{
'post_id': '3524',
'text': '\n.\n▪️10/3 9 PM\n 9:00 ~ 11:45 Special host\n \n.\n▪️\n ~\n.\n▪️10/5 8PM More\n',
'time': datetime.datetime(2019, 6, 13, 18, 31, 36),
'image': ‘’,
'link': 'https://bit.ly/'
}, { {
'post_id': '3524',
'text': '\n.\n▪️10/3 9 PM\n 9:00 ~ 11:45 Special host\n \n.\n▪️\n ~\n.\n▪️10/5 8PM More\n',
'time': datetime.datetime(2019, 6, 13, 18, 31, 36),
'image': ‘’,
'link': None
}
]
我的代码将电子邮件作为单行发送,其中“\n”显示为字母且未格式化且带有制表符。
我需要保留表情符号、特殊字符(不同语言),同时包括换行符。我如何实现这一目标?
当前代码:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
print(type(posts)) # <class 'list'>
print(posts) # [{'post_id': '3524', 'text': '\n.\n▪️10/3 9 PM\n 9:00 ~ 11:45 Special host\n \n.\n▪️\n ~\n.\n▪️10/5 8PM More\n', 'time': datetime.datetime(2019, 6, 13, 18, 31, 36), 'image': ‘’, 'link': 'https://bit.ly/'}, {{'post_id': '3524', 'text': '\n.\n▪️10/3 9 PM\n 9:00 ~ 11:45 Special host\n \n.\n▪️\n ~\n.\n▪️10/5 8PM More\n', 'time': datetime.datetime(2019, 6, 13, 18, 31, 36), 'image': ‘’, 'link': None}]
posts = str(posts) # otherwise error: msg.attach(MIMEText(message_content)) File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/email/mime/text.py", line 34, in __init__ _text.encode('us-ascii') AttributeError: 'list' object has no attribute 'encode'
recipients = ["recipient_id@yahoo.com"]
sender = "sender_id@gmail.com"
subject = "report reminder"
body = posts
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = ", ".join(recipients)
msg.attach(MIMEText(body, 'plain'))
# sending
session = smtplib.SMTP('smtp.gmail.com', 587)
session.starttls()
session.login(sender, 'my password')
send_it = session.sendmail(sender, recipients, msg.as_string())
session.quit()
为了澄清,我想将整个字典列表作为字符串、括号和所有格式发送(活动 tabs/newlines)。
如果你想在电子邮件中格式化 JSON 那么你需要在正文数据中使用 json.dumps()
。为此,您需要在函数中提供 indent
参数。查看代码
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import json
posts = [{"latlng":[77.7355421,12.985924],"name":"International Tech Park Bangalore 2.5 km","type":"work","icon":"suitcase"},{"latlng":[77.7515038,12.9829723],"name":"H M Tech Park 2.3 km","type":"work","icon":"suitcase"},{"latlng":[77.721544,12.981423],"name":"Prestige Featherlite Techapark 4.7km","type":"work","icon":"suitcase"}]
recipients = ["reciever@demo.com"]
sender = "sender@demo.com"
subject = "report reminder"
body = json.dumps(posts, indent=4) #changed code line
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = ", ".join(recipients)
msg.attach(MIMEText(body, 'plain'))
# sending
session = smtplib.SMTP('smtp.office365.com', 587)
session.starttls()
session.login(sender, 'your password')
send_it = session.sendmail(sender, recipients, msg.as_string())
session.quit()
电子邮件内容如下:
[
{
"latlng": [
77.7355421,
12.985924
],
"name": "International Tech Park Bangalore 2.5 km",
"type": "work",
"icon": "suitcase"
},
{
"latlng": [
77.7515038,
12.9829723
],
"name": "H M Tech Park 2.3 km",
"type": "work",
"icon": "suitcase"
},
{
"latlng": [
77.721544,
12.981423
],
"name": "Prestige Featherlite Techapark 4.7km",
"type": "work",
"icon": "suitcase"
}
]
我正在尝试将带有缩进格式的词典列表发送到我的电子邮件。目前,这是我根据我的代码收到的结果电子邮件:
[{
'post_id': '3524',
'text': '\n.\n▪️10/3 9 PM\n 9:00 ~ 11:45 Special host\n \n.\n▪️\n ~\n.\n▪️10/5 8PM More\n',
'time': datetime.datetime(2019, 6, 13, 18, 31, 36),
'image': ‘’,
'link': 'https://bit.ly/'
}, { {
'post_id': '3524',
'text': '\n.\n▪️10/3 9 PM\n 9:00 ~ 11:45 Special host\n \n.\n▪️\n ~\n.\n▪️10/5 8PM More\n',
'time': datetime.datetime(2019, 6, 13, 18, 31, 36),
'image': ‘’,
'link': None
}
]
我的代码将电子邮件作为单行发送,其中“\n”显示为字母且未格式化且带有制表符。
我需要保留表情符号、特殊字符(不同语言),同时包括换行符。我如何实现这一目标?
当前代码:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
print(type(posts)) # <class 'list'>
print(posts) # [{'post_id': '3524', 'text': '\n.\n▪️10/3 9 PM\n 9:00 ~ 11:45 Special host\n \n.\n▪️\n ~\n.\n▪️10/5 8PM More\n', 'time': datetime.datetime(2019, 6, 13, 18, 31, 36), 'image': ‘’, 'link': 'https://bit.ly/'}, {{'post_id': '3524', 'text': '\n.\n▪️10/3 9 PM\n 9:00 ~ 11:45 Special host\n \n.\n▪️\n ~\n.\n▪️10/5 8PM More\n', 'time': datetime.datetime(2019, 6, 13, 18, 31, 36), 'image': ‘’, 'link': None}]
posts = str(posts) # otherwise error: msg.attach(MIMEText(message_content)) File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/email/mime/text.py", line 34, in __init__ _text.encode('us-ascii') AttributeError: 'list' object has no attribute 'encode'
recipients = ["recipient_id@yahoo.com"]
sender = "sender_id@gmail.com"
subject = "report reminder"
body = posts
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = ", ".join(recipients)
msg.attach(MIMEText(body, 'plain'))
# sending
session = smtplib.SMTP('smtp.gmail.com', 587)
session.starttls()
session.login(sender, 'my password')
send_it = session.sendmail(sender, recipients, msg.as_string())
session.quit()
为了澄清,我想将整个字典列表作为字符串、括号和所有格式发送(活动 tabs/newlines)。
如果你想在电子邮件中格式化 JSON 那么你需要在正文数据中使用 json.dumps()
。为此,您需要在函数中提供 indent
参数。查看代码
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import json
posts = [{"latlng":[77.7355421,12.985924],"name":"International Tech Park Bangalore 2.5 km","type":"work","icon":"suitcase"},{"latlng":[77.7515038,12.9829723],"name":"H M Tech Park 2.3 km","type":"work","icon":"suitcase"},{"latlng":[77.721544,12.981423],"name":"Prestige Featherlite Techapark 4.7km","type":"work","icon":"suitcase"}]
recipients = ["reciever@demo.com"]
sender = "sender@demo.com"
subject = "report reminder"
body = json.dumps(posts, indent=4) #changed code line
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = ", ".join(recipients)
msg.attach(MIMEText(body, 'plain'))
# sending
session = smtplib.SMTP('smtp.office365.com', 587)
session.starttls()
session.login(sender, 'your password')
send_it = session.sendmail(sender, recipients, msg.as_string())
session.quit()
电子邮件内容如下:
[
{
"latlng": [
77.7355421,
12.985924
],
"name": "International Tech Park Bangalore 2.5 km",
"type": "work",
"icon": "suitcase"
},
{
"latlng": [
77.7515038,
12.9829723
],
"name": "H M Tech Park 2.3 km",
"type": "work",
"icon": "suitcase"
},
{
"latlng": [
77.721544,
12.981423
],
"name": "Prestige Featherlite Techapark 4.7km",
"type": "work",
"icon": "suitcase"
}
]