Python - 寄送電子郵件
大家好,有抱負的 Python 程式設計師們!今天,我們將進入使用 Python 寄送電子郵件的世界,展開一段激動人心的旅程。作為你親切友善的電腦老師,我非常高興能指導你們完成這個過程。相信我,在這篇教程結束時,你將能夠像專業人士一樣寄送電子郵件!
在 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)
讓我們來分解一下:
- 我們導入
smtplib
函式庫。 - 我們設定發件人電子郵件、收件人電子郵件和密碼。
- 我們創建一個簡單的信息。
- 我們連接到 Gmail 的 SMTP 伺服器(稍後會有更多介紹)。
- 我們啟用 TLS 以確保安全。
- 我們登錄到我們的電子郵件帳戶。
- 最後,我們寄送電子郵件!
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