Python - 寄送電子郵件

大家好,有抱負的 Python 程式設計師們!今天,我們將進入使用 Python 寄送電子郵件的世界,展開一段激動人心的旅程。作為你親切友善的電腦老師,我非常高興能指導你們完成這個過程。相信我,在這篇教程結束時,你將能夠像專業人士一樣寄送電子郵件!

Python - Sending Email

在 Python 中寄送電子郵件

讓我們從基礎開始。在 Python 中寄送電子郵件就像成為一個數位郵差,不過我們不是挨家挨戶走訪,而是使用一個稱為 smtplib 的特殊 Python 函式庫。SMTP代表簡單郵件傳輸協定(Simple Mail Transfer Protocol),這只是「透過網際網路傳遞郵件規則」的一種花哨說法。

以下是一個簡單的例子來讓我們開始:

import smtplib

sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "your_password"
message = "Hello, this is a test email from Python!"

with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message)

讓我們來分解一下:

  1. 我們導入 smtplib 函式庫。
  2. 我們設定發件人電子郵件、收件人電子郵件和密碼。
  3. 我們創建一個簡單的信息。
  4. 我們連接到 Gmail 的 SMTP 伺服器(稍後會有更多介紹)。
  5. 我們啟用 TLS 以確保安全。
  6. 我們登錄到我們的電子郵件帳戶。
  7. 最後,我們寄送電子郵件!

Python smtplib.SMTP() 函數

SMTP() 函數是我們數位郵局的鑰匙。它建立到我們要使用的 SMTP 伺服器的連接。以下是一個更詳細的介紹:

import smtplib

server = smtplib.SMTP('smtp.gmail.com', 587)
print(server.ehlo())
server.starttls()
print(server.ehlo())

在這個例子中:

  • 我們為 Gmail 的伺服器創建了一個 SMTP 物件。
  • ehlo() 是在向伺服器說 "hello"。
  • starttls() 開啟 TLS 加密以確保安全。

Python smtpd 模組

smtplib 用於發送電子郵件時,smtpd 則用於接收電子郵件。這就像設立你自己的迷你電子郵件伺服器!以下是一個簡單的例子:

import asyncore
from smtpd import SMTPServer

class EmailServer(SMTPServer):
def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
print(f'Receiving message from: {peer}')
print(f'Message addressed from: {mailfrom}')
print(f'Message addressed to  : {rcpttos}')
print(f'Message length        : {len(data)}')

server = EmailServer(('localhost', 1025), None)
asyncore.loop()

這個例子設定了一個基本的電子郵件伺服器,會打印出關於收到的電子郵件的資訊。這就像擁有自己的私人郵件分拣室!

使用 Python 寄送 HTML 電子郵件

現在,讓我們用一些 HTML 讓我們的電子郵件變得花哨:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "your_password"

message = MIMEMultipart("alternative")
message["Subject"] = "multipart test"
message["From"] = sender_email
message["To"] = receiver_email

text = "Hi there! This is a plain text email."
html = """\
<html>
<body>
<p>Hi there!<br>
This is an <b>HTML</b> email.
</p>
</body>
</html>
"""

part1 = MIMEText(text, "plain")
part2 = MIMEText(html, "html")

message.attach(part1)
message.attach(part2)

with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())

這個例子會發送一個包含純文字和 HTML 版本的電子郵件。這就像發送一封帶有花哨信封的信件!

以電子郵件的形式發送附件

如果我們想隨著電子郵件一起發送一個文件呢?沒問題!以下就是方法:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "your_password"

message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = "Email with attachment"

body = "This is an email with an attachment."
message.attach(MIMEText(body, "plain"))

filename = "document.pdf"  # 替換為你的文件名
attachment = open(filename, "rb")

part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())

encoders.encode_base64(part)
part.add_header(
"Content-Disposition",
f"attachment; filename= {filename}",
)

message.attach(part)

with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())

這個腳本會將文件附加到你的電子郵件中。這就像在你的信件中添加一個包裹!

使用 Gmail 的 SMTP 伺服器發送電子郵件

在這篇教程中,我們一直在使用 Gmail 的 SMTP 伺服器。以下是一些常見 SMTP 伺服器的快速參考表格:

電子郵件提供商 SMTP 伺服器
Gmail smtp.gmail.com 587
Outlook smtp-mail.outlook.com 587
Yahoo Mail smtp.mail.yahoo.com 587

請記住,當使用 Gmail 時,你可能需要啟用 "較不安全的應用程式存取" 或使用 "應用程式密碼",如果你啟用了雙重身份驗證。

以上就是所有內容,各位!現在你已經具備了像 Python 專業人士一樣發送電子郵件的能力。請記住,能力越大,責任越大 - 請明智地使用你新學會的發送電子郵件技能!編程愉快,願你的電子郵件永遠能夠達到目的地!

Credits: Image by storyset