如何将 HTML 代码集成到 Python 脚本中?
How do I integrate a HTML code in a Python Script?
我有一个 Python 代码,可以为来自 Reddit 的数据框创建报告,并将其转换为简单的 HTML,然后通过电子邮件将其发送出去。下面是代码:
#Clean all the Dataframes
test_clean = clean(test_test_df)
brand_clean = clean(brands_df)
competitor_clean = clean(competitors_df)
#Convert to HTML
test_html = test_clean.render()
brand_html = brand_clean.render()
competitor_html = competitor_clean.render()
# In[27]:
brand_clean
# # Email Integration
# #### Import Libraries for Email
# In[ ]:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from datetime import date
# #### Send Email If No Data is Available
# In[ ]:
if test_test_df.empty:
today = str(date.today())
fromaddr = "email@email.com"
toaddr = "email@email.com"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Daily Reddit Monitor " + today
message = "There are no relevant posts above the 100 score threshold today!"
#email = df_complete.render()
part1 = MIMEText(message, 'plain')
msg.attach(part1)
#msg.attach(part2)
server = smtplib.SMTP('smtp.postmarkapp.com', 587)
server.starttls()
server.login('API-KEY”, “API-KEY')
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
IpyExit
收到的邮件格式非常简单。我希望该电子邮件看起来不错,因此使用 HTML 内联表格 CSS 编写了带有 header 图像徽标等的 HTML 代码,简而言之 HTML 新闻代码信。现在我希望 Python 脚本在发送电子邮件时使用我的 HTML 代码,以便在收件箱中收到的电子邮件看起来像一封新闻信。有什么建议或解决方案可以实现吗?
下面是我的 HTML 代码。
<table width="689" border="0" cellspacing="0" cellpadding="1" align="center" bgcolor="#353A71">
<tr>
<td valign="middle" align="center">
<table width="689" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF" align="center">
<tr align="left">
<td valign="top" colspan="2">
<table width="100%" border="0" cellpadding="3" cellspacing="0" bgcolor="#FFFFFF">
<tr>
<td width="0%"> </td>
<td valign="top" width="100%">
<center><h1 style="font-family:helvetica;">Top Reddit Posts</h1></center>
<td width="0%"> </td>
</tr>
<tr>
<td width="0%"> </td>
<td> </td>
<td width="0%"> </td>
</tr>
<tr>
<td width="0%" bgcolor="#FFFFFF"> </td>
<td align="center" class="profileCaptionWhiteBold" width="100%" valign="top" bgcolor="#FFFFFF">
</td>
<td width="0%" bgcolor="#FFFFFF"> </td>
</tr>
</table>
所以我希望脚本的输出遵循:
Reddit 热门帖子
假设你在别处生成的HTML包含在字符串messageHTML
中,那么你只需要添加:
msg.attach(MIMEText(messageHTML, 'html'))
也保留纯文本,所以这两行看起来像
msg.attach(MIMEText(messagePlain, 'plain'))
msg.attach(MIMEText(messageHTML, 'html'))
要设置 HTML,请创建一个变量 messageHTML
。
然后你可以像这样创建 table(假设你想要 1 行,2 列,data_1
和 data_2
):
messagePlain = data_1 + " " + data_2
messageHTML = '<table><tr><td>' + data_1 + '</td><td>' + data_2 + '</td></tr></table>'
msg.attach(MIMEText(messagePlain, 'plain'))
msg.attach(MIMEText(messageHTML, 'html'))
我建议从一个简单的 table 开始,甚至可能不使用动态获取的数据,以确保 HTML 在您发送时正确呈现,然后扩展HTML到以后想要的内容和样式。
您可以像这样创建 HTML-formatted 电子邮件(在 windows 上):
import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.HtmlBody = html_string
mail.To = ''
mail.Subject = ''
等等
您的示例代码不是很清楚,但我认为您只是想将现有的 HTML 片段(来自 Reddit 的数据框的报告)嵌入到更大的 HTML 页面中很好地展示了它。
为此,您只需使用包含在 multi-line 字符串中的模板,然后将值替换为其中的地标 {}
:
# Placeholder for current html report from dataframe (replace with your code)
df = pd.DataFrame([{'Title': 'Story 1 title', 'Description': 'Story 1 description'}])
redditHTML = df.to_html()
# HTML news letter template
template='''
<table width="689" border="0" cellspacing="0" cellpadding="1" align="center" bgcolor="#353A71">
<tr>
<td valign="middle" align="center">
<table width="689" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF" align="center">
<tr align="left">
<td valign="top" colspan="2">
<table width="100%" border="0" cellpadding="3" cellspacing="0" bgcolor="#FFFFFF">
<tr>
<td width="0%"> </td>
<td valign="top" width="100%">
<center><h1 style="font-family:helvetica;">Top Reddit Posts</h1></center>
{}
</td>
<td width="0%"> </td>
</tr>
<tr>
<td width="0%"> </td>
<td> </td>
<td width="0%"> </td>
</tr>
<tr>
<td width="0%" bgcolor="#FFFFFF"> </td>
<td align="center" class="profileCaptionWhiteBold" width="100%" valign="top" bgcolor="#FFFFFF"></td>
<td width="0%" bgcolor="#FFFFFF"> </td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
'''
completeHTML = template.format(redditHTML)
msg.attach(MIMEText(completeHTML, 'html'))
请注意,您的 HTML 代码示例缺少 </td>
以关闭包含热门 Reddit 帖子的部分,并且缺少尾随 </td> </tr> </table>
以完成新闻信函
我有一个 Python 代码,可以为来自 Reddit 的数据框创建报告,并将其转换为简单的 HTML,然后通过电子邮件将其发送出去。下面是代码:
#Clean all the Dataframes
test_clean = clean(test_test_df)
brand_clean = clean(brands_df)
competitor_clean = clean(competitors_df)
#Convert to HTML
test_html = test_clean.render()
brand_html = brand_clean.render()
competitor_html = competitor_clean.render()
# In[27]:
brand_clean
# # Email Integration
# #### Import Libraries for Email
# In[ ]:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from datetime import date
# #### Send Email If No Data is Available
# In[ ]:
if test_test_df.empty:
today = str(date.today())
fromaddr = "email@email.com"
toaddr = "email@email.com"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Daily Reddit Monitor " + today
message = "There are no relevant posts above the 100 score threshold today!"
#email = df_complete.render()
part1 = MIMEText(message, 'plain')
msg.attach(part1)
#msg.attach(part2)
server = smtplib.SMTP('smtp.postmarkapp.com', 587)
server.starttls()
server.login('API-KEY”, “API-KEY')
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
IpyExit
收到的邮件格式非常简单。我希望该电子邮件看起来不错,因此使用 HTML 内联表格 CSS 编写了带有 header 图像徽标等的 HTML 代码,简而言之 HTML 新闻代码信。现在我希望 Python 脚本在发送电子邮件时使用我的 HTML 代码,以便在收件箱中收到的电子邮件看起来像一封新闻信。有什么建议或解决方案可以实现吗?
下面是我的 HTML 代码。
<table width="689" border="0" cellspacing="0" cellpadding="1" align="center" bgcolor="#353A71">
<tr>
<td valign="middle" align="center">
<table width="689" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF" align="center">
<tr align="left">
<td valign="top" colspan="2">
<table width="100%" border="0" cellpadding="3" cellspacing="0" bgcolor="#FFFFFF">
<tr>
<td width="0%"> </td>
<td valign="top" width="100%">
<center><h1 style="font-family:helvetica;">Top Reddit Posts</h1></center>
<td width="0%"> </td>
</tr>
<tr>
<td width="0%"> </td>
<td> </td>
<td width="0%"> </td>
</tr>
<tr>
<td width="0%" bgcolor="#FFFFFF"> </td>
<td align="center" class="profileCaptionWhiteBold" width="100%" valign="top" bgcolor="#FFFFFF">
</td>
<td width="0%" bgcolor="#FFFFFF"> </td>
</tr>
</table>
所以我希望脚本的输出遵循:
Reddit 热门帖子
假设你在别处生成的HTML包含在字符串messageHTML
中,那么你只需要添加:
msg.attach(MIMEText(messageHTML, 'html'))
也保留纯文本,所以这两行看起来像
msg.attach(MIMEText(messagePlain, 'plain'))
msg.attach(MIMEText(messageHTML, 'html'))
要设置 HTML,请创建一个变量 messageHTML
。
然后你可以像这样创建 table(假设你想要 1 行,2 列,data_1
和 data_2
):
messagePlain = data_1 + " " + data_2
messageHTML = '<table><tr><td>' + data_1 + '</td><td>' + data_2 + '</td></tr></table>'
msg.attach(MIMEText(messagePlain, 'plain'))
msg.attach(MIMEText(messageHTML, 'html'))
我建议从一个简单的 table 开始,甚至可能不使用动态获取的数据,以确保 HTML 在您发送时正确呈现,然后扩展HTML到以后想要的内容和样式。
您可以像这样创建 HTML-formatted 电子邮件(在 windows 上):
import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.HtmlBody = html_string
mail.To = ''
mail.Subject = ''
等等
您的示例代码不是很清楚,但我认为您只是想将现有的 HTML 片段(来自 Reddit 的数据框的报告)嵌入到更大的 HTML 页面中很好地展示了它。
为此,您只需使用包含在 multi-line 字符串中的模板,然后将值替换为其中的地标 {}
:
# Placeholder for current html report from dataframe (replace with your code)
df = pd.DataFrame([{'Title': 'Story 1 title', 'Description': 'Story 1 description'}])
redditHTML = df.to_html()
# HTML news letter template
template='''
<table width="689" border="0" cellspacing="0" cellpadding="1" align="center" bgcolor="#353A71">
<tr>
<td valign="middle" align="center">
<table width="689" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF" align="center">
<tr align="left">
<td valign="top" colspan="2">
<table width="100%" border="0" cellpadding="3" cellspacing="0" bgcolor="#FFFFFF">
<tr>
<td width="0%"> </td>
<td valign="top" width="100%">
<center><h1 style="font-family:helvetica;">Top Reddit Posts</h1></center>
{}
</td>
<td width="0%"> </td>
</tr>
<tr>
<td width="0%"> </td>
<td> </td>
<td width="0%"> </td>
</tr>
<tr>
<td width="0%" bgcolor="#FFFFFF"> </td>
<td align="center" class="profileCaptionWhiteBold" width="100%" valign="top" bgcolor="#FFFFFF"></td>
<td width="0%" bgcolor="#FFFFFF"> </td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
'''
completeHTML = template.format(redditHTML)
msg.attach(MIMEText(completeHTML, 'html'))
请注意,您的 HTML 代码示例缺少 </td>
以关闭包含热门 Reddit 帖子的部分,并且缺少尾随 </td> </tr> </table>
以完成新闻信函