如何用 Python 寄送 HTML 郵件 ( Email )
YC JHUO 1/25/2021 PythonPandasSendmail
之前分享了三篇文章:
- 如何用 Python 寄送郵件 (opens new window)
- 用 Python 寄送客制化郵件 (opens new window)
- 如何在 Python 寄送郵件時加上不同副本收件人 (opens new window)
這三篇都是屬於寄信單純的文字信件(Plain)。
若要在信件中加入圖片,超連結等功能的話,就須將寄出郵件的格式改為 HTML 才可以,下面就來介紹如何寄出 HTML 的郵件。
# SMTP 相關設定
首先我們來設定 smtp 的郵件伺服器,port,與寄件人,收件人及副本收件人(CC)。
smtp_server = "XXXXX"
port = 25
server = smtplib.SMTP(smtp_server, port)
sender = "sender@XXX.com"
receiver = "receiver@XXX.com"
cc = ["cc@XXX.com"]
1
2
3
4
5
6
2
3
4
5
6
# MIME 相關設定
這部分就進入到 HTML 的相關連結:
先將要寄送的內容以 HTML 的方式寫出來 ( 包含 html 內的各種 tag )。若有要傳遞到內容中的變數的話,則用雙括號包起來。
最後在內容的字串外面,在用 .format
的形式將變數帶進去。
之後在 13 行,我們宣告 msg 並指定為 alternative 這個類型。
這裡的 MIMEMultipart 有三種類型,分別為:mixed, alternative, related,若要寄送附件的話,則要用 mixed,而這裡我們用的 alternative 則是可以在寄送 HTML 失敗時,改成寄送純文字。
再來加上信的主旨,且將寄信者等資訊也加入到 msg 裡面。
最後記得因為我們的內容都是 HTML 格式,所以最後在寄出時,要將 msg 轉為字串才能成功寄出。
message_text = """\
<html>
<head></head>
<body>
Today is {date}. This mail is sent by {name} <br/> <br/>
Welcome to my <a href="https://ycjhuo.gitlab.io">blog</a>. <br/><br/>
</body>
</html>
""".format(date = date, name = name)
msg = MIMEMultipart('alternative')
msg = MIMEText(message_text, 'html', 'UTF-8')
msg['Subject'] = "This is a subject"
msg['Form'] = sender
msg['To'] = receiver
msg['Cc'] = ','.join(cc)
toAddress = [receiver] + cc
server.sendmail(sender, toAddress, msg.as_string())
print("Sent to: " + ','.join(toAddress))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 成果
程式結束後,結果如下圖,
可以看到寄出的信裡面以成功附上的超連結,且一開始宣告的 date 跟 name 也都有成功被插入到內容中
若不想將信箱地址直接寫死在程式內的話,可參考這篇:如何讓 Python 讀取外部 ini 設定檔 (opens new window)
讓程式透過外部的 ini 檔案讀取相信箱地址
# Source Code
Source code 如下;
import datetime
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
### Email Server Settings
smtp_server = "XXXXX"
port = 25
server = smtplib.SMTP(smtp_server, port)
sender = "sender@XXX.com"
receiver = "receiver@XXX.com"
cc = ["cc@XXX.com"]
date = datetime.date.today()
name = "Leon"
message_text = """\
<html>
<head></head>
<body>
Today is {date}. This mail is sent by {name} <br/> <br/>
Welcome to my <a href="https://ycjhuo.gitlab.io">blog</a>. <br/><br/>
</body>
</html>
""".format(date = date, name = name)
msg = MIMEMultipart('alternative')
msg = MIMEText(message_text, 'html', 'UTF-8')
msg['Subject'] = "This is a subject"
msg['Form'] = sender
msg['To'] = receiver
msg['Cc'] = ','.join(cc)
toAddress = [receiver] + cc
server.sendmail(sender, toAddress, msg.as_string())
print("Sent to: " + ','.join(toAddress))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
歡迎點擊追蹤: