#Python #Gmail #Python自動化 #SMTP #自動發信 #驗證碼
文章目錄
透過Gmail SMTP服務自動發送郵件
本篇部落格將會詳細介紹如何使用Gmail SMTP設定並透過Python自動化發送郵件。
SMTP代表簡單郵件傳輸協定(SMTP)。它是一種郵件協定,允許你從一個郵件帳戶發送郵件到一個或多個郵件地址。沒有SMTP,郵件通訊將無法正確發送、接受。為SMTP是用於在服務器之間通信,並確定哪些服務器接收或路由你的消息。
設定Gmail SMTP服務
一般來說Gmail SMTP有以下三種設定方式(參考官網)
- Gmail的SMTP服務器
- SMTP中繼服務(適用於Google Workspace)
- 限制的Gmail SMTP服務器
本文則著重於第一種發送方式,原因如下:
因為中繼服務僅適用於Google Workspace用戶(付費),用於發送大量郵件,如通訊,觸發/自動發送的郵件或系統郵件作為通知。限制的Gmail服務器則限制了向其他Google Workspace或Gmail郵件地址發送郵件。而Gmail SMTP服務器則沒有這些限制。
如何使用Gmail SMTP設定?
如果你在你的Google帳戶上啟用了雙因素驗證,則可以直接使用SMTP服務器。僅需要額外生成一個應用程序密碼作為存取憑證
***如果你尚未啟用2FA,請參考網路教學先進行啟動***
生成一個應用程序密碼:
- 在登錄到你的Google帳戶時,點我連結(轉到你的Google帳戶>安全>登錄到Google>應用程式密碼)
Google改版應用程式密碼的版面很難找,建議直接透過上方進行搜尋
接著可以輸入自訂的應用程式的名稱,我這邊採用Python-Gmail作為名稱。
設定完成後會跑出16碼的應用程式密碼,後續就要依靠該密碼憑證讓Python進行STMP的連結並且發送信件
透過Python進行自動發送郵件(Gmail)
可以參考以下的Python程式碼進行測試,以下程式碼主要是想透過Python藉由Gmail的SMTP進行註冊用戶的信箱認證。
主要更改的地方是自己的信箱以及應用程式密碼,信件內容則可以透過HTML格式進行客製化更改。
同時參考以下表格將對應的部分進行修改,如果不是採用Gmail請修改成服務商的對應資訊
以下是你需要輸入的Gmail SMTP設置:
- Gmail SMTP服務器地址:smtp.gmail.com
- Gmail SMTP名稱:你的全名
- Gmail SMTP用戶名:你的Gmail地址
- Gmail SMTP密碼:你的Gmail登錄密碼 or 應用程式密碼
- Gmail SMTP端口(TLS):587
- Gmail SMTP端口(SSL):465
- 是否需要SSL:是
- 是否需要TLS:是
- 是否需要/使用身份驗證:是
- 是否需要/使用安全連接:是
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
def send_verification_email(email: str, verification_link: str):
try:
sender_email = "your-email@example.com" # 這裡填入你的郵箱地址
receiver_email = email
password = "your-password" # 這裡填入你的郵箱密碼或應用密碼
message = MIMEMultipart("alternative")
message["Subject"] = "Verify Your Email Address"
message["From"] = sender_email
message["To"] = receiver_email
# 郵件的正文內容
html = f"""\
<html>
<body>
<p>Hi,<br>
Thank you for registering with us. Please click on the link below to verify your email address:<br>
<a href="{verification_link}">Verify Email</a>
</p>
</body>
</html>
"""
part = MIMEText(html, "html")
message.attach(part)
# 創建SMTP連接
with smtplib.SMTP_SSL('smtp.example.com', 465) as server: # 這裡的 SMTP 服務器地址需要替換成您的SMTP服務提供商的地址
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())
print("Verification email sent successfully!")
except Exception as e:
print(f"Failed to send verification email: {e}")
- 郵箱地址和密碼:這裡需要設定發送郵件的郵箱地址和密碼,通常密碼是指應用程序專用密碼
- 郵件主題和收件人:設定郵件的發送者、接收者和主題。
- HTML內容:這是郵件的正文部分,使用HTML格式便於添加格式化的文字和連結。
- SMTP連線:使用SMTP協議與郵件服務提供者的服務器建立安全的連線,通常使用SSL加密。
- 錯誤處理:加入了基本的錯誤處理機制,以在發送郵件過程中捕捉並報告錯誤。(Email發送非常容易出現例外錯誤)