[Python实战应用]Python寄送Gmail电子邮件实战教学

在这里插入图片描述

在现今大多数的网站,不管是注册成功、重新设定密码、优惠消息或新商品上架等,都会透过电子邮件来通知客户,是网站中不可或缺的传递消息方式。除此之外,也有开发人员在运行爬虫时,会将所爬取的信息透过电子邮件来通知。从以上的情境可以知道,电子邮件使用的频繁及对网站功能的重要性,所以本文将利用Visual Studio Code开发工具,介绍如何透过Python来寄送电子邮件,并且客制化邮件样版,重点包含:

基本电子邮件内容

取得Gmail应用程式密码

设定SMTP伺服器(SMTP Server)

电子邮件内容增加图片

客制化邮件样板(Templates)

一、基本电子邮件内容

首先,引用Python email标准函式库(Standard Library)中的MIMEMultipart类别,如下范例:

from email.mime.multipart import MIMEMultipart

在email套件(Package)下的mime(Multipurpose Internet Mail Extensions)子套件,为网际网络媒体类型,定义了在网络上传输电子邮件的格式标准,在其底下的multipart子套件中,MIMEMultipart类别能够让电子邮件的格式包含纯文字或HTML的内容。而一封基本的电子邮件,分别有标题、寄件者、收件者及内容,透过MIMEMultipart物件即可进行各栏位的资料设定,如下范例:

from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText



content = MIMEMultipart()  #建立MIMEMultipart物件

content["subject"] = "Learn Code With Mike"  #邮件标题

content["from"] = "pydemo123@gmail.com"  #寄件者

content["to"] = "example@gmail.com" #收件者

content.attach(MIMEText("Demo python send email"))  #邮件內容

范例中,邮件内容使用MIMEMultipart物件的attach方法(Method)进行设定,而内容需引用MIMEText类别来建立物件,第一个参数传入文字内容,第二个参数可指定纯文字或HTML,预设为纯文字。HTML的邮件内容,在本文第五节客制化邮件样版时,再来进行说明。

二、取得Gmail应用程式密码
在Python专案中,要透过Gmail的SMTP伺服器来寄送电子邮件的话,需取得应用程式的专属密码,因为Google认为Python的smtplib函式库是高风险的,所以用原Gmail密码是无法透过应用程式来寄送电子邮件。以下为取得应用程式密码的步骤:

步骤一:进入寄件者的Google帐户。

请点击输入图片描述(最多18字)

步骤二:点击左边栏的安全性页签,接着设定两步骤验证。

请点击输入图片描述(最多18字)

步骤三:两步骤设定完成后,会看到下方多了应用程序密码。

请点击输入图片描述(最多18字)

步骤四:在选取应用程序的地方选择其他。

请点击输入图片描述(最多18字)

步骤五:接着输入应用程序的名称,点击产生。

请点击输入图片描述(最多18字)

步骤六:最后即可取得应用程序的密码。

请点击输入图片描述(最多18字)

三、设定SMTP服务器(SMTP Server)
Python专案中的电子邮件内容完成后,接下来就要设定Gmail的SMTP完全来寄送,设定方式如下范例:

import smtplib
with smtplib.SMTP(host="smtp.gmail.com", port="587") as smtp:  # 設定SMTP伺服器
    try:
        smtp.ehlo()  # 驗證SMTP伺服器
        smtp.starttls()  # 建立加密傳輸
        smtp.login("pydemo123@gmail.com", "應用程式密碼")  # 登入寄件者gmail
        smtp.send_message(content)  # 寄送郵件
        print("Complete!")
    except Exception as e:
        print("Error message: ", e)

引用smtplib模组(Module),接着根据使用的SMTP完全,透过关键字参数(Keyword Argument)指定服务器位置及埠号。另外,这边利用Python的with陈述式,当邮件寄送完成后,自动释放资源。建立SMTP物件后,接下来利用ehlo()方法来验证SMTP服务器及埠号是否正确,下一步呼叫starttls()方法建立TLS (Transport Layer Security)传输,为一种网络传输安全协定,用来保护资料的安全及完整性。最后登入寄件者的Gmail帐户,并且寄出邮件。这边建议使用Python例外处理机制,因为在寄送电子邮件的过程中,非常有机会发生例外错误。 登入收件者的Gmail,即可看到刚刚所寄出的电子邮件,如下范例:

请点击输入图片描述(最多18字)

四、电子邮件内容增加图片
如果想要在电子邮件中加入图片,则需在Python专案中引用MIMEImage类别,并且引用pathlib函式库来读取图片,如下范例:

from email.mime.image import MIMEImage
from pathlib import Path

在专案中加入一张图片,本文以无尾熊koala.jpg来做示范,接着在设定邮件内容的地方,建立MIMEImage物件,传入图片的二进位码,可透过Path物件的read_bytes()方法来进行读取,如下范例:

content = MIMEMultipart()  # 建立MIMEMultipart物件
content["subject"] = "Learn Code With Mike"  # 郵件標題
content["from"] = "pydemo123@gmail.com"  # 寄件者
content["to"] = "example@gmail.com"  # 收件者
content.attach(MIMEText("Demo python send email"))  # 郵件純文字內容
content.attach(MIMEImage(Path("koala.jpg").read_bytes()))  # 郵件圖片內容

寄送完成后,登入收件者的Gmail,就可以看到电子邮件的内容成功增加了图片,如下范例:

请点击输入图片描述(最多18字)

五、客制化邮件样板(Templates)
实务上,除了纯文字的邮件外,通常有机会需要依情况客制化邮件内容的格式,举例来说,有些文字需要加上颜色、粗体及超连结等,这时候就可以使用HTML来依不同的需求分别客制化邮件样板。在Python专案中,新增一个名为success_template.html的档案,假设当使用者注册成功,您想要使用这个电子邮件样版来进行通知。在开始设计样邮件版前,这边教大家一个小技巧,开启success_template.html档案后,在Visual Studio Code的右下角,可以看到语言模式,如下范例:

请点击输入图片描述(最多18字)

如果已经是HTML,无需变动,如果显示其他语言则点选红框处,在搜寻的地方输入HTML,选择即可。接下来在success_template.html档案中的第一行输入!符号,按下Tab键,就会自动产生基本的HTML代码,如下范例:

请点击输入图片描述(最多18字)

由于电子邮件样版不需要标签中的内容,所以可以进行删除,接着在标签的区域中输入邮件的格式化内容,如下范例:

请点击输入图片描述(最多18字)

此邮件样版中,设定了一个user变数,前面加了$符号,用来表示此参数为Python程式码动态传入,并且显示粗体字型。而下方的Google字串则增加了超连结。回到Python主程式,引用string模组(Module)的Template类别,用来替换邮件样版中的参数值。如下范例:

from string import Template

接着,建立Template物件,传入邮件样版内容,可以透过Path物件的read_text()方法来达成。最后呼叫Template物件的substitute()方法来设定邮件样版中的参数值,其参数可传入Python的字典(Dictionary)或关键字参数(Keyword Argument),如下范例:

template = Template(Path("success_template.html").read_text())
body = template.substitute({ "user": "Mike" })

在MIMEMultipart物件的指定邮件内容地方传入body ,并且设定为HTML的格式,如下范例第10行:

content = MIMEMultipart()  # 建立MIMEMultipart物件
content["subject"] = "Learn Code With Mike"  # 郵件標題
content["from"] = "pydemo123@gmail.com"  # 寄件者
content["to"] = "example@gmail.com"  # 收件者
template = Template(Path("success_template.html").read_text())
body = template.substitute({ "user": "Mike" })
content.attach(MIMEText(body, "html"))  # HTML郵件內容

登入收件者的Gmail,即可看到客制化邮件样版的结果,如下范例:

请点击输入图片描述(最多18字)

六、小结
希望看完本文能够了解如何透过Python来寄送电子邮件,并且有能力客制化所需的邮件样版,往后即可应用在各自的专案上。如果在练习的过程中有遇到任何问题,欢迎留言分享。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mikes zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值