SMTP(簡單郵件傳輸協定) 是網際網路電子郵件傳送的基礎協定,負責處理電子郵件的發送與接收。在這篇文章中,我們會使用 Gmail 的 SMTP 伺服器來發送電子郵件。
當我們發送電子郵件時,SMTP 伺服器會充當中介,幫助我們將郵件從寄件者傳送到收件者的郵件伺服器。
TLS(Transport Layer Security) 是一種加密協定,專為在網路上提供通信安全性而設計。當我們發送電子郵件時,啟用 TLS 可以加密郵件的內容,確保在郵件傳送過程中,資料不會被攔截或洩露。
在這篇文章的程式碼中,我們會使用 starttls() 方法來啟用 TLS 加密。這是目前 Gmail SMTP 伺服器所要求的安全措施,確保我們的郵件在發送過程中是安全的。
在 Gmail 的安全性設置中,Google 不再允許直接使用帳戶密碼進行 SMTP 認證。如果你想要讓應用程式(如我們的 Python 程式)能夠使用 Gmail 發送郵件,你需要生成一個應用程式專用密碼。
兩步驟驗證
應用程式密碼
生成應用程式密碼(此密碼為後續使用)
現在,我們有了 SMTP 伺服器資訊、TLS 安全性認證的知識,以及 Gmail 應用程式密碼,接下來我們將使用 Python 撰寫程式,透過 Gmail 發送電子郵件。
def send_email(sender_email, receiver_email, password, subject, body):
"""
寄送電子郵件的函式
參數:
- sender_email: 寄件者的 Email
- receiver_email: 收件者的 Email
- password: 寄件者 Gmail 的應用程式密碼
- subject: 郵件主題
- body: 郵件內容
"""
# 建立 MIMEMultipart 物件
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = subject
這段程式碼使用 MIMEMultipart 建立一個多部分的電子郵件物件,這樣可以方便地附加主題、收件者和寄件者等資訊。
# 將郵件內容附加到郵件中
message.attach(MIMEText(body, "plain"))
# 使用 Gmail 的 SMTP 伺服器
smtp_server = "smtp.gmail.com"
port = 587 # Gmail 的 SMTP 伺服器端口
try:
# 連線到 Gmail 的 SMTP 伺服器
server = smtplib.SMTP(smtp_server, port)
server.starttls() # 啟用安全連線 (TLS)
# 登入 Gmail 帳戶
server.login(sender_email, password)
# 寄送郵件
server.sendmail(sender_email, receiver_email, message.as_string())
print("郵件已成功發送")
except Exception as e:
print(f"發送郵件時發生錯誤: {e}")
finally:
# 關閉連線
server.quit()
在 try-except 結構中,若有任何錯誤發生,將捕獲並打印出錯誤訊息,最後確保無論如何都會關閉與 SMTP 伺服器的連線。
# 範例用法
sender = "您的寄件電子郵件@gmail.com"
receiver = "您的接收電子郵件@gmail.com"
password = "應用程式密碼"
subject = "有關於你的程式碼"
body = """
您好,
這是一封簡單的純文字郵件,感謝您對我們的支持。
祝好,
發件者姓名
"""
send_email(sender, receiver, password, subject, body)
透過 Gmail 帳號寄送一封簡單的電子郵件。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
def send_email(sender_email, receiver_email, password, subject, body):
"""
寄送電子郵件的函式
參數:
- sender_email: 寄件者的 Email
- receiver_email: 收件者的 Email
- password: 寄件者 Gmail 的應用程式密碼
- subject: 郵件主題
- body: 郵件內容
"""
# 建立 MIMEMultipart 物件
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = subject
# 將郵件內容附加到郵件中
message.attach(MIMEText(body, "plain"))
# 使用 Gmail 的 SMTP 伺服器
smtp_server = "smtp.gmail.com"
port = 587 # Gmail 的 SMTP 伺服器端口
try:
# 連線到 Gmail 的 SMTP 伺服器
server = smtplib.SMTP(smtp_server, port)
server.starttls() # 啟用安全連線 (TLS)
# 登入 Gmail 帳戶
server.login(sender_email, password)
# 寄送郵件
server.sendmail(sender_email, receiver_email, message.as_string())
print("郵件已成功發送")
except Exception as e:
print(f"發送郵件時發生錯誤: {e}")
finally:
# 關閉連線
server.quit()
# 範例用法
sender = "your_email@gmail.com"
receiver = "recipient_email@gmail.com"
password = "your_application_password"
subject = "測試郵件"
body = """
您好,
這是一封由 Python 程式發送的測試郵件。
祝好,
發件者姓名
"""
send_email(sender, receiver, password, subject, body)