I am sending bulk emails with the help of pandas library, There is a problem which I am facing, I want to parse the body text as HTML as there are some HTML tags which I want to use. Following is the code for the same.
message = """\
Dear Student,
Following are your login details,
Email {0}
Password {1}
You may log in via URL mail.sample.com
Do not copy/paste the password.
Regards,
Admin
""".format(student_email,student_password)
full_email = ("From: {0} <{1}>\n"
"To: {2}\n"
"Subject: {3}\n\n"
"{4}"
.format(self_name, self_email, email, subject, message))
I couldn't find any other code with having the same library which I am using currently and if possible I would like to use only these libraries i.e. pandas
and smtplib
.
Apologies if the redundant question
TL;DR I want to parse text to HTML while sending the email
The problem is if I append tags in message
variable it will literally show tags instead of parsing. For ex:
<b>Email : </b>sample@sample.com
So after a couple of days of brainstorming, I hacked a way to do this, I had to use a couple of more libs. but that did that the job. Initially, I was not flexible to do so but had to.
Along with pandas
and smtplib
below are the libraries I have used.
from email.mime.text import MIMEText
from jinja2 import Environment
Here a tradeoff was done, I completely removed the full_email
variable, instead of it, the following was done.
message = """\
<p>Dear Student,<p>
<span>Following are your login details,</span><br/><br/>
<b>Email</b> {0} <br/>
<b>Password</b> {1} </br><br/>
You may login via URL sample.mail.com<br/>
Do not copy/paste the password.<br/>
<br/><br/>
Regards,<br/>
""".format(student_email,student_password)
msg = MIMEText(
Environment().from_string(message).render(
title='Hello World!'
), "html"
)
msg['Subject'] = subject
msg['From'] = from
msg['To'] = email
and in order to send it.
server.sendmail(email,[email],msg.as_string())
Thanks to this answer, I was able to achieve it.