Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python Gửi Email: Hướng Dẫn Chi Tiết

Cách Gửi Email Bằng Python

Python là ngôn ngữ nhiều tính năng. Nó dùng cho phân tích dữ liệu, phát triển web, và hơn thế nữa. Đó chưa phải tất cả, Python có tính năng ẩn: bạn có thể dùng nó gửi email. Điều này có nghĩa bạn có thể gửi email đặt lại mật khẩu, quên mật khẩu, thông báo người dùng, và bất kỳ email nào bạn muốn, từ chương trình Python.

Trong hướng dẫn này, chúng ta sẽ thảo luận cách gửi email dùng Python. Chúng ta sẽ đi qua thư viện email và smtplib, cách chúng hoạt động, và viết chương trình ví dụ gửi email.

Không nói thêm nữa, hãy bắt đầu!

Gửi Email Dùng Python

Khi bạn gửi email từ chương trình máy tính, chương trình sẽ gửi tin nhắn dùng giao thức Simple Mail Transfer Protocol (SMTP). Giao thức này dùng bởi dịch vụ và ứng dụng email khắp thế giới gửi tin nhắn.

Để gửi email từ chương trình máy tính, bạn cần máy chủ SMTP. Bạn tự thiết lập, nhưng không luôn phải. Dịch vụ như Gmail và Outlook cung cấp dịch vụ SMTP để bạn dùng tài khoản email hiện có gửi email.

Cho hướng dẫn này, chúng ta giả sử bạn gửi email từ máy chủ SMTP của Gmail. Bạn tìm hiểu thêm về máy chủ SMTP của họ trong tài liệu chính thức Gmail. Để biết nhà cung cấp email có hỗ trợ SMTP không, tìm trực tuyến '[tên nhà cung cấp] SMTP credentials'.

Chúng ta có ba bước gửi email:

  • Cấu hình kết nối SMTP
  • Tạo đối tượng tin nhắn
  • Gửi tin nhắn qua SMTP

Cấu Hình Kết Nối SMTP

Để bắt đầu, hãy thiết lập kết nối SMTP. Chúng ta làm bằng thư viện smtplib cung cấp tất cả mã cần quản lý kết nối. Nhờ thư viện này chỉ mất vài dòng mã gửi email.

Bắt đầu bằng nhập thư viện smtplib vào mã:

import smtplib

Chúng ta phải thiết lập biến lưu thông tin đăng nhập máy chủ SMTP. Lưu giá trị trong biến giúp duy trì dễ đọc mã. Đây là biến chúng ta dùng:

sender = 'test@careerkarma.com'
password = '123456'
server = 'smtp.gmail.com'
port = 465

Mã này chứa tất cả cấu hình cần tạo kết nối SMTP. Bây giờ chúng ta đã thiết lập, chúng ta đăng nhập máy chủ SMTP:

server = smtplib.SMTP_SSL(server, port)
server.login(sender, password)

Mã tạo kết nối SSL đến máy chủ SMTP. Nghĩa là dùng Secure Socket Layer (SSL) kết nối máy chủ. SSL an toàn hơn kết nối truyền thống và kết quả trở thành tiêu chuẩn trên máy chủ SMTP.

Kết nối SMTP của chúng ta giờ đã cấu hình!

Tạo Đối Tượng Tin Nhắn

Mã chưa làm nhiều: chắc chắn không gửi email. Đó là vì chưa tạo đối tượng tin nhắn. Hãy làm bằng thư viện email. Mặc dù bạn có thể dùng smtplib tạo đối tượng tin nhắn, thư viện email ngắn gọn hơn.

Bắt đầu bằng nhập gói email cần thiết:

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

Với thư viện đã nhập, tạo đối tượng tin nhắn:

message = MIMEMultipart()
body = 'Đây là email gửi từ Python!'
message['From'] = sender
message['To'] = 'test@careerkarma.com'
message['Subject'] = 'Đây là email kiểm tra'
message.attach(MIMEText(body, 'plain'))

Chúng ta khởi tạo đối tượng 'message'. Đối tượng này tham chiếu lớp MIMEMultipart từ thư viện email. Chúng ta chỉ định nội dung email và người gửi, người nhận, chủ đề.

Dòng mã cuối gắn nội dung tin nhắn vào email.

Gửi Tin Nhắn

Giờ chỉ còn gửi tin nhắn:

server.send_message(message)

Khi chạy toàn bộ mã, email được gửi! Email với tiêu đề 'Đây là email kiểm tra' gửi từ test@careerkarma.com đến test@careerkarma.com.

Đọc Mẫu Từ File

Nội dung email chỉ một dòng. Nghĩa là thực tế hơn viết nội dung email trong Python. Hầu hết email dài hơn, nên tốt hơn tạo mẫu lưu văn bản cho email cụ thể.

Chúng ta bắt đầu bằng tạo file email.txt dán nội dung sau:

Hello ${NAME},
This is a test email!
Thanks,
Career Karma

Mẫu này chứa biến "NAME", đặt trong ngoặc nhọn ({}) và đứng trước dấu dollar ($). Biến này sẽ thay bằng tên người nhận sau trong mã.

Chúng ta giờ phải đọc mẫu vào mã. Làm bằng tạo lớp read_email dùng phương thức open() đọc file.

Chúng ta nhập đối tượng Template từ thư viện string. Dùng đối tượng này tạo đối tượng đọc được bởi email. Dán dòng mã sau đầu chương trình Python:

from string import Template

Dưới tất cả câu lệnh import, dán mã này:

def read_email():
    with open('email.txt', 'r') as file:
        contents = file.read()
    return Template(contents)

Hàm này đọc file "email.txt" vào biến "contents". Giá trị chuyển thành đối tượng Template dùng phương thức Template từ thư viện "string". Tìm hiểu thêm đọc file trong hướng dẫn Python read file.

Thay dòng mã sau trong chương trình:

body = 'Đây là email gửi từ Python!'

Dùng mã này:

email_content = read_email()
body = email_content.substitute(NAME="Test")

Mã gọi hàm read_email() đọc nội dung file "email.txt". Sau đó, giá trị NAME trong mẫu email thay bằng giá trị "Test". Cùng nhau, mã trông như sau:

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

def read_email():
    with open('email.txt', 'r') as file:
        contents = file.read()
    return Template(contents)

sender = 'test@careerkarma.com'
password = '123456'
server = 'smtp.gmail.com'
port = 465

server = smtplib.SMTP_SSL(server, port)
server.login(sender, password)

message = MIMEMultipart()
email_content = read_email()
body = email_content.substitute(NAME="Test")
message['From'] = sender
message['To'] = 'test@careerkarma.com'
message['Subject'] = 'Đây là email kiểm tra'
message.attach(MIMEText(body, 'plain'))

server.send_message(message)

Khi chạy chương trình này, thay thông tin đăng nhập SMTP của bạn, email sẽ được gửi. Bạn vừa viết chương trình gửi email.

Kết Luận

Gửi email trong Python không phải khó. Không dùng mẫu, gửi email chỉ mất vài dòng mã. Module email và smtplib làm phần lớn việc nặng. Với đó, bạn có thể dùng module email mở rộng tạo mẫu email thay thế giá trị.

Bạn sẵn sàng thử thách? Thay đổi chương trình trên hỗ trợ gửi email đến nhiều người nhận. Gợi ý: bạn sẽ muốn dùng vòng lặp for gửi email.

Bây giờ bạn đã sẵn sàng gửi email trong Python như chuyên gia!