因此,我正在使用reddit api,并且在此练习中,我只需要一个简单的脚本,该脚本可将某些子页面上的前10个帖子收集在一起,然后将标题和网址放在电子邮件中。只是。但由于某种原因,我无法在电子邮件正文中附加for
循环的结果
我目前将这10个热门帖子的值及其链接存储在称为“帖子”的列表中。
import praw
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
reddit = praw.Reddit(
client_id="ID",
client_secret="ID",
username="username",
password="password",
user_agent="agent",
)
subreddit = reddit.subreddit("worldnews")
hot_worldnews = subreddit.hot(limit=10)
posts = []
for post in hot_worldnews:
posts.append(post.title + "\n" + post.url + "\n")
# Once I have that, I compile the email:
message = MIMEMultipart("alternative")
message["Subject"] = "Today's headlines"
message["From"] = "News bot"
recipients = ["email1@email.com", "email2@email.com"]
message["To"] = ""
message["bcc"] = " ,".join(recipients)
# creating the content of the email, first the plain content then the html content
plain = """
Today's headlines:
""" + "\n".join(
posts
)
html = """
<h1><span style="color: #ff0000; background-color: #000000;"><strong>Today's headlines!</strong></span></h1>
""" + "\n".join(
posts
)
# now we compile both parts to prepare them to send
part1 = MIMEText(plain, "plain")
part2 = MIMEText(html, "html")
message.attach(part1)
message.attach(part2)
# Now send the email
gmail_user = "user"
gmail_pwd = "pass"
server = smtplib.SMTP("smtp.gmail.com", 587)
server.ehlo()
server.starttls()
server.login(gmail_user, gmail_pwd)
server.sendmail(message["From"], recipients, message.as_string())
这给了我很多头条新闻和链接,但所有这些在一起。
我一直在这里寻找不同的解决方案,很显然,我不能在电子邮件正文中包含for循环,但是'\n'.join(posts)
公式似乎也不起作用,因为所有帖子都来了一个接一个,但我无法正确格式化。输出的电子邮件是一堆文字和链接
有见识吗?
答案 0 :(得分:1)
在您的HTML邮件中,您将需要使用HTML换行符<br>
来连接字符串,因为\n
换行符在HTML中呈现为空格。
我也添加了\n
来简化调试,但是如上所述,您的浏览器/邮件客户端将基本上忽略它。 (我还优化了HTML样式:-))
plain = """
Today's headlines:
""" + '\n'.join(posts)
html = """
<h1 style="color: #f00; background: #000; font-weight: bold">Today's headlines!</h1>
""" + '<br />\n'.join(posts)
答案 1 :(得分:0)
好的,所以没有用,但是现在让我说以另一种方式,将这段hmtml代码附加到我的电子邮件中:
<h1>Today's headlines:</h1>
<p>{}</p>
<hr />
<p>The weather is going to be {} in {} with a max temperature of {}</p>
<hr />
<p> </p>.format(posts, weather, location, temp)
我现在想做的是:我有一大堆带有很多'{}'的html(很抱歉,我不知道如何正确地称呼它们)。 html之后,我可以一一称呼它们。问题是在上一个练习中,我可以在最后的html行中添加'+'并包含'<br />\n'.join(posts)
来执行此操作。但是在另一个示例中,我无法做到这一点。
在这种情况下,现在这样做的方式是什么?我尝试用变量替换'<br />\n'.join(posts)
,但显然不起作用。
希望我已经正确地解释了自己。