在电子邮件正文中发送循环结果
Send loop result within email body
我正在尝试在电子邮件内容(示例 2)中显示 "print" 结果(示例 1)。
我使用的数据:
{
"@odata.context": "XXX",
"value": [
{
"Customer_Name": "ABC inc",
"Customer_No": "002",
"Date_of_Export": "2020-01-10T05:36:55.3Z",
"Error_Message": "error message 1.",
"Type_of_Export": "E-Mail"
},
{
"Customer_Name": "CBA inc",
"Customer_No": "001",
"Date_of_Export": "2020-01-10T05:39:13.137Z",
"Error_Message": "Error message 2",
"Type_of_Export": "E-Mail"
}
]}
示例 1(打印):
当我使用下面的代码时,我得到了想要的结果:
r = requests.get("http://www.example.com/test.json")
r_dict = json.loads(r.text)
if len(r_dict["value"])==0:
print("No errors")
else:
print("List of errors:\n")
for item in r_dict["value"]:
print('"Customer":', '(' + item['Customer_No'] + ')' + item['Customer_Name'] + ', "Typ":', item['Type_of_Export'] + ', "Error": ', item['Error_Message'])
我得到:
List of errors:
"Customer": (002)ABC inc, "Typ": E-Mail, "Error": error message 1.
"Customer": (001)CBA inc, "Typ": E-Mail, "Error": Error message 2
示例 2(邮件):
但我无法获得在电子邮件正文中发送相同结果的权利,因为只包含最后一行
List of errors:
"Customer": (001)CBA inc, "Typ": E-Mail, "Error": Error message 2
我使用的代码:
import json
import requests
import smtplib
from requests_ntlm import HttpNtlmAuth
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
html_top = """<html><body>"""
html_end = """</body></html> """
r = requests.get("http://www.example.com/test.json")
r_dict = json.loads(r.text)
if len(r_dict["value"])==0:
print("No errors")
else:
html_body_top = "<p>List of errors:<br></p>"
for item in r_dict["value"]:
html_body = '"Customer":' + '(' + item['Customer_No'] + ')' + item['Customer_Name'] + ', "Typ":' + item['Type_of_Export'] + ', "Error": ' + item['Error_Message']
mail_html = MIMEText(html_top + html_body_top + html_body + html_end, "html")
message.attach(mail_html)
with smtplib.SMTP("000.000.000.000", xx) as server:
server.sendmail(sender_email, receiver_email, message.as_string())
我想发送包含所有 2 行的电子邮件,就像示例 1 中一样。
在 for
循环之前,声明 html_body
并使用 +=
添加值:
html_body = ""
for item in r_dict["value"]:
html_body += '"Customer":' + '(' + item['Customer_No'] + ')' + item['Customer_Name'] + ', "Typ":' + item['Type_of_Export'] + ', "Error": ' + item['Error_Message'] + '\n'
我在末尾添加了 \n
到 "print" 分界线。
您的问题是,每次循环迭代时,您都会覆盖 html_body
的先前值
for item in r_dict["value"]:
html_body = '"Customer":' + '(' + item['Customer_No'] + ')' + item['Customer_Name'] + ', "Typ":' + item['Type_of_Export'] + ', "Error": ' + item['Error_Message']
一个快速的解决方案是改为使用 +=
运算符并在末尾添加一个换行符。
html_body = ''
for item in r_dict["value"]:
html_body += '"Customer":' + '(' + item['Customer_No'] + ')' + item['Customer_Name'] + ', "Typ":' + item['Type_of_Export'] + ', "Error": ' + item['Error_Message'] + '\n'
我正在尝试在电子邮件内容(示例 2)中显示 "print" 结果(示例 1)。
我使用的数据:
{
"@odata.context": "XXX",
"value": [
{
"Customer_Name": "ABC inc",
"Customer_No": "002",
"Date_of_Export": "2020-01-10T05:36:55.3Z",
"Error_Message": "error message 1.",
"Type_of_Export": "E-Mail"
},
{
"Customer_Name": "CBA inc",
"Customer_No": "001",
"Date_of_Export": "2020-01-10T05:39:13.137Z",
"Error_Message": "Error message 2",
"Type_of_Export": "E-Mail"
}
]}
示例 1(打印):
当我使用下面的代码时,我得到了想要的结果:
r = requests.get("http://www.example.com/test.json")
r_dict = json.loads(r.text)
if len(r_dict["value"])==0:
print("No errors")
else:
print("List of errors:\n")
for item in r_dict["value"]:
print('"Customer":', '(' + item['Customer_No'] + ')' + item['Customer_Name'] + ', "Typ":', item['Type_of_Export'] + ', "Error": ', item['Error_Message'])
我得到:
List of errors:
"Customer": (002)ABC inc, "Typ": E-Mail, "Error": error message 1.
"Customer": (001)CBA inc, "Typ": E-Mail, "Error": Error message 2
示例 2(邮件):
但我无法获得在电子邮件正文中发送相同结果的权利,因为只包含最后一行
List of errors:
"Customer": (001)CBA inc, "Typ": E-Mail, "Error": Error message 2
我使用的代码:
import json
import requests
import smtplib
from requests_ntlm import HttpNtlmAuth
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
html_top = """<html><body>"""
html_end = """</body></html> """
r = requests.get("http://www.example.com/test.json")
r_dict = json.loads(r.text)
if len(r_dict["value"])==0:
print("No errors")
else:
html_body_top = "<p>List of errors:<br></p>"
for item in r_dict["value"]:
html_body = '"Customer":' + '(' + item['Customer_No'] + ')' + item['Customer_Name'] + ', "Typ":' + item['Type_of_Export'] + ', "Error": ' + item['Error_Message']
mail_html = MIMEText(html_top + html_body_top + html_body + html_end, "html")
message.attach(mail_html)
with smtplib.SMTP("000.000.000.000", xx) as server:
server.sendmail(sender_email, receiver_email, message.as_string())
我想发送包含所有 2 行的电子邮件,就像示例 1 中一样。
在 for
循环之前,声明 html_body
并使用 +=
添加值:
html_body = ""
for item in r_dict["value"]:
html_body += '"Customer":' + '(' + item['Customer_No'] + ')' + item['Customer_Name'] + ', "Typ":' + item['Type_of_Export'] + ', "Error": ' + item['Error_Message'] + '\n'
我在末尾添加了 \n
到 "print" 分界线。
您的问题是,每次循环迭代时,您都会覆盖 html_body
for item in r_dict["value"]:
html_body = '"Customer":' + '(' + item['Customer_No'] + ')' + item['Customer_Name'] + ', "Typ":' + item['Type_of_Export'] + ', "Error": ' + item['Error_Message']
一个快速的解决方案是改为使用 +=
运算符并在末尾添加一个换行符。
html_body = ''
for item in r_dict["value"]:
html_body += '"Customer":' + '(' + item['Customer_No'] + ')' + item['Customer_Name'] + ', "Typ":' + item['Type_of_Export'] + ', "Error": ' + item['Error_Message'] + '\n'