Compose an email with markdown and send it with a Python script

Sending emails with Python (2 Part Series)

1 How to send emails with Python? Simply explained for beginners
2 Compose an email with markdown and send it with a Python script

Recap

In the previous article of this series, we had written a simple script to send an email with Python.

Let’s recap the steps:

  • we first imported SMTP class from smptplib
  • we then defined the variables HOST,PORT,SENDER and PASSWORD
  • we then created an object of the SMTP class named server
  • Now call multiple server functions:
    1. connect
    2. ehlo
    3. starttls
    4. ehlo
    5. login
  • define the RECIPIENT and MESSAGE
  • send the email by calling server.sendmail

To see the code, read my previous article.

图片[1]-Compose an email with markdown and send it with a Python script - 拾光赋-拾光赋

How to send emails with Python? Simply explained for beginners

Aahnik Daw ・ Apr 7 ’21

#python #email #tutorial #discuss

Let’s Enhance

In this article, we will take further what we have learned in the previous article.

We will add some new features to our script:

  • rich-text via markdown.
  • setting a subject of the email.
  • using an alias name for the sender (you can set the sender’s display name to be anything, like “Mr. Bean”, irrespective of your actual email address).

Markdown

In the modern world, plain text looks boring. Professional emails have some logo, or title image, along with the richly formatted text.

Writing HTML is time-consuming, so we will use the markdown format, to compose beautiful emails.

If you are not familiar with the markdown formatting, then you should learn it because:

  • it is used to write posts in dev.to
  • it is commonly used to write the README file for your GitHub projects

To deal with markdown in python, we need the markdown package.

So install it via pip.

pip <span>install </span>Markdown
 pip <span>install </span>Markdown
pip install Markdown

Enter fullscreen mode Exit fullscreen mode

Write the code

Let’s say we will write our email in a file called compose.md. Our script should send the content of that file as an email to our recipient.

Delete the old send.py that we have written last day. Let’s refactor our code, to make it more mature and maintainable.

Let’s define all our variables in a file called settings.py

<span># settings.py </span>
<span>HOST</span> <span>=</span> <span>'</span><span>smtp.gmail.com</span><span>'</span>
<span>PORT</span> <span>=</span> <span>587</span>
<span>SENDER</span> <span>=</span> <span>'</span><span>youremail@gmail.com</span><span>'</span>
<span>PASSWORD</span> <span>=</span> <span>'</span><span>your12434(893**!@password</span><span>'</span>
<span>RECIPIENT</span> <span>=</span> <span>'</span><span>some@example.com</span><span>'</span>
<span>MESSAGE_FILE</span> <span>=</span> <span>'</span><span>compose.md</span><span>'</span>
<span>DISPLAY_NAME</span> <span>=</span> <span>'</span><span>Mr. Bean</span><span>'</span>
<span># settings.py </span>
<span>HOST</span> <span>=</span> <span>'</span><span>smtp.gmail.com</span><span>'</span>
<span>PORT</span> <span>=</span> <span>587</span>
<span>SENDER</span> <span>=</span> <span>'</span><span>youremail@gmail.com</span><span>'</span>
<span>PASSWORD</span> <span>=</span> <span>'</span><span>your12434(893**!@password</span><span>'</span>
<span>RECIPIENT</span> <span>=</span> <span>'</span><span>some@example.com</span><span>'</span>
<span>MESSAGE_FILE</span> <span>=</span> <span>'</span><span>compose.md</span><span>'</span>
<span>DISPLAY_NAME</span> <span>=</span> <span>'</span><span>Mr. Bean</span><span>'</span>
# settings.py HOST = 'smtp.gmail.com' PORT = 587 SENDER = 'youremail@gmail.com' PASSWORD = 'your12434(893**!@password' RECIPIENT = 'some@example.com' MESSAGE_FILE = 'compose.md' DISPLAY_NAME = 'Mr. Bean'

Enter fullscreen mode Exit fullscreen mode

Now let’s write down the send.py

<span># send.py </span>
<span>from</span> <span>email.mime.multipart</span> <span>import</span> <span>MIMEMultipart</span>
<span>from</span> <span>email.mime.text</span> <span>import</span> <span>MIMEText</span>
<span>from</span> <span>smtplib</span> <span>import</span> <span>SMTP</span>
<span>import</span> <span>markdown</span>
<span>from</span> <span>settings</span> <span>import</span> <span>(</span><span>HOST</span><span>,</span> <span>PORT</span><span>,</span>
<span>SENDER</span><span>,</span> <span>DISPLAY_NAME</span><span>,</span> <span>PASSWORD</span><span>,</span>
<span>RECIPIENT</span><span>,</span> <span>MESSAGE_FILE</span><span>)</span>
<span>with</span> <span>open</span><span>(</span><span>MESSAGE_FILE</span><span>)</span> <span>as</span> <span>file</span><span>:</span>
<span>message</span> <span>=</span> <span>file</span><span>.</span><span>read</span><span>()</span>
<span>server</span> <span>=</span> <span>SMTP</span><span>(</span><span>host</span><span>=</span><span>HOST</span><span>,</span> <span>port</span><span>=</span><span>PORT</span><span>)</span>
<span>server</span><span>.</span><span>connect</span><span>(</span><span>host</span><span>=</span><span>HOST</span><span>,</span> <span>port</span><span>=</span><span>PORT</span><span>)</span>
<span>server</span><span>.</span><span>ehlo</span><span>()</span>
<span>server</span><span>.</span><span>starttls</span><span>()</span>
<span>server</span><span>.</span><span>ehlo</span><span>()</span>
<span>server</span><span>.</span><span>login</span><span>(</span><span>user</span><span>=</span><span>SENDER</span><span>,</span> <span>password</span><span>=</span><span>PASSWORD</span><span>)</span>
<span>multipart_msg</span> <span>=</span> <span>MIMEMultipart</span><span>(</span><span>"</span><span>alternative</span><span>"</span><span>)</span>
<span>multipart_msg</span><span>[</span><span>"</span><span>Subject</span><span>"</span><span>]</span> <span>=</span> <span>message</span><span>.</span><span>splitlines</span><span>()[</span><span>0</span><span>]</span>
<span>multipart_msg</span><span>[</span><span>"</span><span>From</span><span>"</span><span>]</span> <span>=</span> <span>DISPLAY_NAME</span> <span>+</span> <span>f</span><span>'</span><span> <</span><span>{</span><span>SENDER</span><span>}</span><span>></span><span>'</span>
<span>multipart_msg</span><span>[</span><span>"</span><span>To</span><span>"</span><span>]</span> <span>=</span> <span>RECIPIENT</span>
<span>text</span> <span>=</span> <span>message</span>
<span>html</span> <span>=</span> <span>markdown</span><span>.</span><span>markdown</span><span>(</span><span>text</span><span>)</span>
<span>part1</span> <span>=</span> <span>MIMEText</span><span>(</span><span>text</span><span>,</span> <span>"</span><span>plain</span><span>"</span><span>)</span>
<span>part2</span> <span>=</span> <span>MIMEText</span><span>(</span><span>html</span><span>,</span> <span>"</span><span>html</span><span>"</span><span>)</span>
<span>multipart_msg</span><span>.</span><span>attach</span><span>(</span><span>part1</span><span>)</span>
<span>multipart_msg</span><span>.</span><span>attach</span><span>(</span><span>part2</span><span>)</span>
<span>server</span><span>.</span><span>sendmail</span><span>(</span><span>SENDER</span><span>,</span> <span>RECIPIENT</span><span>,</span> <span>multipart_msg</span><span>.</span><span>as_string</span><span>())</span>
<span>print</span><span>(</span><span>'</span><span>Sent email successfully!</span><span>'</span><span>)</span>
<span># send.py </span>
<span>from</span> <span>email.mime.multipart</span> <span>import</span> <span>MIMEMultipart</span>
<span>from</span> <span>email.mime.text</span> <span>import</span> <span>MIMEText</span>

<span>from</span> <span>smtplib</span> <span>import</span> <span>SMTP</span>

<span>import</span> <span>markdown</span>

<span>from</span> <span>settings</span> <span>import</span> <span>(</span><span>HOST</span><span>,</span> <span>PORT</span><span>,</span>
                      <span>SENDER</span><span>,</span> <span>DISPLAY_NAME</span><span>,</span> <span>PASSWORD</span><span>,</span>
                      <span>RECIPIENT</span><span>,</span> <span>MESSAGE_FILE</span><span>)</span>


<span>with</span> <span>open</span><span>(</span><span>MESSAGE_FILE</span><span>)</span> <span>as</span> <span>file</span><span>:</span>
    <span>message</span> <span>=</span> <span>file</span><span>.</span><span>read</span><span>()</span>


<span>server</span> <span>=</span> <span>SMTP</span><span>(</span><span>host</span><span>=</span><span>HOST</span><span>,</span> <span>port</span><span>=</span><span>PORT</span><span>)</span>
<span>server</span><span>.</span><span>connect</span><span>(</span><span>host</span><span>=</span><span>HOST</span><span>,</span> <span>port</span><span>=</span><span>PORT</span><span>)</span>
<span>server</span><span>.</span><span>ehlo</span><span>()</span>
<span>server</span><span>.</span><span>starttls</span><span>()</span>
<span>server</span><span>.</span><span>ehlo</span><span>()</span>
<span>server</span><span>.</span><span>login</span><span>(</span><span>user</span><span>=</span><span>SENDER</span><span>,</span> <span>password</span><span>=</span><span>PASSWORD</span><span>)</span>

<span>multipart_msg</span> <span>=</span> <span>MIMEMultipart</span><span>(</span><span>"</span><span>alternative</span><span>"</span><span>)</span>

<span>multipart_msg</span><span>[</span><span>"</span><span>Subject</span><span>"</span><span>]</span> <span>=</span> <span>message</span><span>.</span><span>splitlines</span><span>()[</span><span>0</span><span>]</span>
<span>multipart_msg</span><span>[</span><span>"</span><span>From</span><span>"</span><span>]</span> <span>=</span> <span>DISPLAY_NAME</span> <span>+</span> <span>f</span><span>'</span><span> <</span><span>{</span><span>SENDER</span><span>}</span><span>></span><span>'</span>
<span>multipart_msg</span><span>[</span><span>"</span><span>To</span><span>"</span><span>]</span> <span>=</span> <span>RECIPIENT</span>

<span>text</span> <span>=</span> <span>message</span>
<span>html</span> <span>=</span> <span>markdown</span><span>.</span><span>markdown</span><span>(</span><span>text</span><span>)</span>

<span>part1</span> <span>=</span> <span>MIMEText</span><span>(</span><span>text</span><span>,</span> <span>"</span><span>plain</span><span>"</span><span>)</span>
<span>part2</span> <span>=</span> <span>MIMEText</span><span>(</span><span>html</span><span>,</span> <span>"</span><span>html</span><span>"</span><span>)</span>

<span>multipart_msg</span><span>.</span><span>attach</span><span>(</span><span>part1</span><span>)</span>
<span>multipart_msg</span><span>.</span><span>attach</span><span>(</span><span>part2</span><span>)</span>


<span>server</span><span>.</span><span>sendmail</span><span>(</span><span>SENDER</span><span>,</span> <span>RECIPIENT</span><span>,</span> <span>multipart_msg</span><span>.</span><span>as_string</span><span>())</span>

<span>print</span><span>(</span><span>'</span><span>Sent email successfully!</span><span>'</span><span>)</span>
# send.py from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from smtplib import SMTP import markdown from settings import (HOST, PORT, SENDER, DISPLAY_NAME, PASSWORD, RECIPIENT, MESSAGE_FILE) with open(MESSAGE_FILE) as file: message = file.read() server = SMTP(host=HOST, port=PORT) server.connect(host=HOST, port=PORT) server.ehlo() server.starttls() server.ehlo() server.login(user=SENDER, password=PASSWORD) multipart_msg = MIMEMultipart("alternative") multipart_msg["Subject"] = message.splitlines()[0] multipart_msg["From"] = DISPLAY_NAME + f' <{SENDER}>' multipart_msg["To"] = RECIPIENT text = message html = markdown.markdown(text) part1 = MIMEText(text, "plain") part2 = MIMEText(html, "html") multipart_msg.attach(part1) multipart_msg.attach(part2) server.sendmail(SENDER, RECIPIENT, multipart_msg.as_string()) print('Sent email successfully!')

Enter fullscreen mode Exit fullscreen mode

That’s it. Coding is over. Now let’s run the script send.py.

python send.py
Sent email successfully!
 python send.py
Sent email successfully!
python send.py Sent email successfully!

Enter fullscreen mode Exit fullscreen mode

Your output will look like this if you did everything alright. The email will be sitting right in the recipient’s inbox.


I am Aahnik Daw and you can follow me on GitHub and dev.to to stay updated with my latest repos and articles.

Sending emails with Python (2 Part Series)

1 How to send emails with Python? Simply explained for beginners
2 Compose an email with markdown and send it with a Python script

原文链接:Compose an email with markdown and send it with a Python script

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
Don’t let a bad day make you feel lke you have a bad lfe.
不要让糟糕的一天让你误以为有个糟糕的人生
评论 抢沙发

请登录后发表评论

    暂无评论内容