Python - Gửi Email

Xin chào các bạn nhà lập trình Python đầy kích thích! Hôm nay, chúng ta sẽ bắt đầu hành trình thú vị vào thế giới gửi email bằng Python. Là người dạy máy tính hàng xóm bạn, tôi rất vui được hướng dẫn các bạn qua quá trình này. Hãy tin tôi, bằng khi kết thúc hướng dẫn này, các bạn sẽ gửi email như một chuyên gia!

Python - Sending Email

Gửi Email bằng Python

Hãy bắt đầu với những khái niệm cơ bản. Việc gửi email bằng Python như là một邮递员 số, nhưng thay vì đi từ nhà này đến nhà kia, chúng ta sử dụng thư viện đặc biệt của Python có tên là smtplib. SMTP đại diện cho Simple Mail Transfer Protocol, điều đó chỉ là cách nói "quy tắc gửi thư qua internet".

Dưới đây là một ví dụ đơn giản để bắt đầu:

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)

Hãy phân tích một số:

  1. Chúng ta nhập thư viện smtplib.
  2. Chúng ta thiết lập email người gửi, người nhận và mật khẩu.
  3. Chúng ta tạo một thông điệp đơn giản.
  4. Chúng ta kết nối với máy chủ SMTP của Gmail (sẽ nói thêm về điều này sau).
  5. Chúng ta bắt đầu TLS để bảo mật.
  6. Chúng ta đăng nhập vào tài khoản email của mình.
  7. Cuối cùng, chúng ta gửi email!

Hàm Python smtplib.SMTP()

Hàm SMTP() như là chìa khóa vào bưu điện số của chúng ta. Nó thiết lập kết nối với máy chủ SMTP mà chúng ta muốn sử dụng. Dưới đây là một cái nhìn chi tiết hơn:

import smtplib

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

Trong ví dụ này:

  • Chúng ta tạo một đối tượng SMTP cho máy chủ Gmail.
  • ehlo() như là nói "xin chào" với máy chủ.
  • starttls() bắt đầu mã hóa TLS để bảo mật.

Mô-đun Python smtpd

Trong khi smtplib được sử dụng để gửi email, smtpd được sử dụng để nhận chúng. Nó như là thiết lập một máy chủ email mini của riêng bạn! Dưới đây là một ví dụ đơn giản:

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()

Điều này thiết lập một máy chủ email cơ bản mà in ra thông tin về các email đã nhận. Nó như có một phòng sắp xếp thư cá nhân!

Gửi Email HTML bằng Python

Bây giờ, hãy làm cho các email của chúng ta trông sang trọng với một chút 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())

Ví dụ này gửi một email với cả phiên bản văn bản thuần túy và HTML. Nó như gửi một thư với một chiếcvelope sang trọng!

Gửi Tệp Đính Kèm Thông Qàn Email

Điều gì nếu chúng ta muốn gửi một tệp cùng với email của mình? Không vấn đề! Dưới đây là cách để làm điều đó:

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"  # Thay thế bằng tên tệp của bạn
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())

Văn lệnh này gắn một tệp vào email của bạn. Nó như thêm một gói hàng vào thư của bạn!

Gửi Email Bằng Máy Chủ SMTP của Gmail

Trong suốt hướng dẫn này, chúng ta đã sử dụng máy chủ SMTP của Gmail. Dưới đây là bảng tham khảo nhanh cho các máy chủ SMTP phổ biến:

Nhà cung cấp Email Máy chủ SMTP Cổng
Gmail smtp.gmail.com 587
Outlook smtp-mail.outlook.com 587
Yahoo Mail smtp.mail.yahoo.com 587

Nhớ rồi, khi sử dụng Gmail, bạn có thể cần kích hoạt "Less secure app access" hoặc sử dụng "App Password" nếu bạn đã bật 2-Factor Authentication.

Và thế là xong, các bạn! Bây giờ bạn đã có kiến thức để gửi email như một chuyên gia Python. Nhớ rồi, quyền lớn đến đích là trách nhiệm lớn - hãy sử dụng kỹ năng gửi email mới của bạn một cách khôn ngoan! Chúc các bạn mãi mãi có thể gửi email đến nơi! Happy coding!

Credits: Image by storyset