Cách Gửi Email bằng Python: Hướng Dẫn Gmail Toàn Diện

1. Giới thiệu

Gửi email bằng Python là một kỹ năng rất hữu ích cho cả ứng dụng cá nhân và hệ thống kinh doanh. Ví dụ, nó có thể được sử dụng để tự động gửi thông báo đến người dùng từ một ứng dụng hoặc gửi nhật ký lỗi hệ thống đến quản trị viên theo thời gian thực. Ngoài ra, bằng cách gửi email qua mã thay vì thủ công, bạn có thể xử lý việc gửi email một cách hiệu quả và đơn giản hóa đáng kể các nhiệm vụ hàng ngày. Python bao gồm “smtplib” trong thư viện chuẩn của nó, cho phép gửi email cơ bản mà không cần thêm mô-đun bên ngoài. Trong bài viết này, chúng tôi giải thích thiết lập cơ bản và các bước để gửi email bằng Python và giới thiệu các phương pháp thực tế sử dụng các ví dụ mã thực tế. Chúng tôi cũng bao quát các chủ đề nâng cao một cách chi tiết, chẳng hạn như email định dạng HTML, gửi email với tệp đính kèm, cài đặt bảo mật Gmail, gửi email bằng tiếng Nhật, và gửi hàng loạt đến nhiều người nhận. Đến cuối hướng dẫn này, bạn sẽ có thể gửi email bằng Python một cách dễ dàng và có kiến thức để áp dụng nó trong nhiều tình huống khác nhau.

2. Cách gửi email bằng Python

Để gửi email bằng Python, sử dụng thư viện chuẩn “smtplib”. Thư viện này cho phép bạn gửi email qua máy chủ SMTP chỉ bằng cách viết mã. Dưới đây chúng tôi cung cấp tổng quan chi tiết về mô-đun smtplib và các bước cơ bản để gửi email.

Giới thiệu về mô-đun smtplib

Mô-đun smtplib là một phần của thư viện chuẩn Python và hỗ trợ giao thức client SMTP. Sử dụng mô-đun này, bạn có thể kết nối trực tiếp đến máy chủ SMTP từ Python và gửi email.

Các tính năng chính của smtplib

  • Dễ dàng giao tiếp với các máy chủ SMTP.
  • Không yêu cầu mô-đun bên ngoài bổ sung; nó được bao gồm với Python, vì vậy không cần thiết lập thêm.
  • Hỗ trợ cài đặt bảo mật và xử lý lỗi.

Các bước cơ bản để gửi email

Bây giờ chúng ta sẽ đi qua các bước cơ bản để gửi email bằng Python. Bằng cách làm theo các bước dưới đây, bạn có thể gửi email một cách dễ dàng.

1. Cách kết nối đến máy chủ SMTP

Đầu tiên, bạn cần kết nối đến một máy chủ SMTP. Đây là điểm khởi đầu để gửi email. Thường thì, bạn sẽ sử dụng các máy chủ SMTP được cung cấp bởi các dịch vụ như Gmail, Yahoo Mail, hoặc Outlook, nhưng cũng có thể sử dụng máy chủ SMTP chuyên dụng của công ty.

import smtplib

# SMTP server settings
smtp_server = "smtp.example.com"  # Example: For Gmail, use "smtp.gmail.com"
smtp_port = 587  # Common port number. For Gmail, use 587

2. Thiết lập xác thực đăng nhập

Sau khi thiết lập kết nối đến máy chủ SMTP, đăng nhập bằng địa chỉ email và mật khẩu của người gửi. Khi sử dụng các dịch vụ như Gmail, có thể yêu cầu các cài đặt bảo mật bổ sung.

# Email account information
username = "your_email@example.com"
password = "your_password"

# Connect and log in to the SMTP server
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()  # Establish a secure connection
server.login(username, password)

3. Tạo và gửi email

Tiếp theo, tạo nội dung của email để gửi. Chỉ định địa chỉ người nhận, chủ đề và nội dung, và gửi nó qua máy chủ SMTP.

# Email sending information
to_address = "recipient@example.com"
subject = "Test email"
body = "This email was sent from Python."

# Email format
message = f"Subject: {subject}

{body}"

# Send email
server.sendmail(username, to_address, message)
print("Email has been sent!")

4. Các điểm chính để xử lý lỗi

Kết nối đến máy chủ SMTP và gửi email có thể gây ra lỗi không mong muốn. Vì lý do đó, sử dụng khối try-except để bạn có thể xử lý lỗi một cách thích hợp.

try:
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()
    server.login(username, password)
    server.sendmail(username, to_address, message)
    print("The email was sent successfully!")
except Exception as e:
    print("Email send error:", e)
finally:
    server.quit()  # Close the connection

Tóm tắt

Điều này bao quát quy trình cơ bản để gửi email bằng Python. Một khi bạn học được quy trình này, bạn có thể tự động hóa email, gửi nhiều tin nhắn cùng lúc, và áp dụng nó theo nhiều cách khác nhau. Trong phần tiếp theo, chúng ta sẽ xem xét chi tiết về việc gửi email văn bản thuần, email HTML, và email với tệp đính kèm bằng các ví dụ mã thực tế.

侍エンジニア塾

3. Thực hành: Các Ví dụ Mã Gửi Email trong Python

Từ đây, chúng ta sẽ trình bày các ví dụ mã thực tế để gửi email bằng Python. Chúng ta sẽ giải thích từng bước cách gửi email văn bản thuần, email HTML, và email với đính kèm.

Gửi Email Văn Bản Thuần

Đầu tiên, đây là cách gửi dạng cơ bản nhất: một email văn bản thuần. Chúng ta sẽ sử dụng module smtplib để gửi một tin nhắn văn bản đơn giản.

Ví dụ Mã

import smtplib

# Email account information
smtp_server = "smtp.example.com"
smtp_port = 587
username = "your_email@example.com"
password = "your_password"

# Recipient and contents
to_address = "recipient@example.com"
subject = "Plain text email test"
body = "This is a plain text email sent from Python."

# Email format
message = f"Subject: {subject}

{body}"

try:
    # Connect to the server
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()
    server.login(username, password)
    server.sendmail(username, to_address, message)
    print("Plain text email sent!")
except Exception as e:
    print("Email send error:", e)
finally:
    server.quit()

Gửi Email HTML

Tiếp theo, chúng ta sẽ giải thích cách gửi email được định dạng HTML. Sử dụng email HTML cho phép bạn định kiểu nội dung và nhúng liên kết. Khi bao gồm mã HTML trong nội dung email, sử dụng module email.mime để xử lý HTML một cách chính xác.

Ví dụ Mã

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

# Email account information
smtp_server = "smtp.example.com"
smtp_port = 587
username = "your_email@example.com"
password = "your_password"

# Recipient and contents
to_address = "recipient@example.com"
subject = "HTML email test"
html_content = '''
<html>
  <body>
    <h1>Hello</h1>
    <p>This is an HTML-formatted email sent from <strong>Python</strong>.</p>
    <a href="https://example.com">Click here</a>
  </body>
</html>
'''

# Create the email
message = MIMEMultipart()
message["From"] = username
message["To"] = to_address
message["Subject"] = subject
message.attach(MIMEText(html_content, "html"))

try:
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()
    server.login(username, password)
    server.sendmail(username, to_address, message.as_string())
    print("HTML email sent!")
except Exception as e:
    print("Email send error:", e)
finally:
    server.quit()

Gửi Email Với Đính Kèm

Tiếp theo, chúng ta sẽ cho thấy cách gửi email với tệp đính kèm. Ví dụ, bạn có thể đính kèm PDF hoặc hình ảnh vào email của bạn. Điều này sử dụng lớp MIMEBase từ module email.mime.

Ví dụ Mã

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

# Email account information
smtp_server = "smtp.example.com"
smtp_port = 587
username = "your_email@example.com"
password = "your_password"

# Recipient and contents
to_address = "recipient@example.com"
subject = "Test email with attachment"
body = "I have attached a file. Please check it."

# Create the email
message = MIMEMultipart()
message["From"] = username
message["To"] = to_address
message["Subject"] = subject
message.attach(MIMEText(body, "plain"))

# Attach file
filename = "example.pdf"  # Name of the file to attach
with open(filename, "rb") as attachment:
    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)

try:
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()
    server.login(username, password)
    server.sendmail(username, to_address, message.as_string())
    print("Email with attachment sent!")
except Exception as e:
    print("Email send error:", e)
finally:
    server.quit()

Tóm tắt

Bằng cách sử dụng các ví dụ mã ở trên, bạn có thể gửi các loại email khác nhau bằng Python. Tùy theo nhu cầu, bạn có thể chọn giữa văn bản thuần, HTML, email có tệp đính kèm. Trong phần tiếp theo, chúng ta sẽ sử dụng Gmail làm ví dụ để giải thích các cài đặt và lưu ý cụ thể khi sử dụng một máy chủ SMTP nhất định.

4. Gửi email bằng Gmail

Phần này giải thích chi tiết cách gửi email bằng Gmail sử dụng Python. Gmail được sử dụng rộng rãi và cung cấp một máy chủ SMTP mà các chương trình Python có thể dễ dàng truy cập. Tuy nhiên, việc gửi mail qua Gmail yêu cầu một số cài đặt bảo mật.

Cài đặt SMTP của Gmail

Để gửi mail bằng Gmail, sử dụng thông tin máy chủ SMTP sau:

  • Máy chủ SMTP : smtp.gmail.com
  • Cổng : 587 (sử dụng TLS) hoặc 465 (sử dụng SSL)
  • Xác thực : Bắt buộc

Ví dụ cài đặt cơ bản

import smtplib
from email.mime.text import MIMEText

# Gmail SMTP server settings
smtp_server = "smtp.gmail.com"
smtp_port = 587
username = "your_email@gmail.com"
password = "your_password"

# Recipient and content
to_address = "recipient@example.com"
subject = "Test email from Gmail"
body = "This email was sent through Gmail from Python."

# Create the email content
message = MIMEText(body)
message["From"] = username
message["To"] = to_address
message["Subject"] = subject

try:
    # Connect to the server and send the email
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()  # Use TLS to enhance security
    server.login(username, password)
    server.sendmail(username, to_address, message.as_string())
    print("The email was sent using Gmail!")
except Exception as e:
    print("Email sending error:", e)
finally:
    server.quit()

Các lưu ý bảo mật

Khi sử dụng tài khoản Gmail, bạn nên xem xét cài đặt bảo mật của mình. Gmail thường đặt hạn bảo đối với việc truy cập từ các ứng dụng bên thứ ba. Do đó, khi truy cập từ Python, các bước sau là cần thiết.

Lấy mật khẩu ứng dụng

  1. Bật xác thực hai yếu tố : Bật Xác minh 2 bước trong cài đặt tài khoản Gmail của bạn. Điều này sẽ cho phép tạo mật khẩu ứng dụng.
  2. Tạo mật khẩu ứng dụng : Từ Cài đặt tài khoản Gmail > Bảo mật > Mật khẩu ứng dụng, tạo một mật khẩu ứng dụng dành riêng cho chương trình Python của bạn. Mật khẩu này được sử dụng thay cho mật khẩu đăng nhập thường của bạn.

Ghi chú

  • Quản lý mật khẩu ứng dụng : Giữ mật khẩu ứng dụng hoàn toàn bí mật và an toàn.
  • Bảo mật tài khoản : Sử dụng mật khẩu ứng dụng được khuyến nghị để giúp ngăn ngừa truy cập trái phép vào tài khoản Gmail của bạn.

Ví dụ mã (sử dụng mật khẩu ứng dụng)

Khi sử dụng mật khẩu ứng dụng, mã sẽ trông như sau.

import smtplib
from email.mime.text import MIMEText

smtp_server = "smtp.gmail.com"
smtp_port = 587
username = "your_email@gmail.com"
app_password = "your_app_password"  # Use an app password instead of your regular password

to_address = "recipient@example.com"
subject = "Test email from Gmail using an app password"
body = "This email was sent from Gmail using an app password."

message = MIMEText(body)
message["From"] = username
message["To"] = to_address
message["Subject"] = subject

try:
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()
    server.login(username, app_password)
    server.sendmail(username, to_address, message.as_string())
    print("The email was sent using Gmail!")
except Exception as e:
    print("Email sending error:", e)
finally:
    server.quit()

Tóm tắt

Khi gửi email từ Python qua Gmail, cài đặt bảo mật tài khoản của bạn rất quan trọng. Sử dụng mật khẩu ứng dụng cho phép bạn gửi email một cách an toàn hơn. Phần tiếp theo sẽ giới thiệu các kỹ thuật gửi email nâng cao trong Python, bao gồm gửi tới nhiều người nhận, gửi tự động theo lịch trình, và cách gửi email bằng tiếng Nhật.

5. Ứng dụng nâng cao: Kỹ thuật gửi email

Từ đây, chúng ta sẽ đề cập đến các kỹ thuật gửi email nâng cao trong Python. Phần này giải thích các phương pháp thực tế như gửi hàng loạt tới nhiều người nhận, tự động hoá email theo lịch trình, và gửi email bằng tiếng Nhật.

Gửi tới Nhiều Người Nhận

Với Python, bạn có thể gửi một tin nhắn tới nhiều người nhận cùng một lúc. Bằng cách thiết lập đúng các trường “To”, “Cc” và “Bcc” của email và quản lý danh sách người nhận, việc gửi hàng loạt trở nên đơn giản.

Ví dụ mã

Dưới đây là một ví dụ mã chỉ định nhiều người nhận trong trường “To”.

import smtplib
from email.mime.text import MIMEText

# SMTP server info
smtp_server = "smtp.gmail.com"
smtp_port = 587
username = "your_email@gmail.com"
password = "your_app_password"

# Recipient list
to_addresses = ["recipient1@example.com", "recipient2@example.com"]
subject = "Test email to multiple recipients"
body = "This email was sent to multiple recipients at once."

# Create the email
message = MIMEText(body)
message["From"] = username
message["To"] = ", ".join(to_addresses)  # Separate multiple recipients with commas
message["Subject"] = subject

try:
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()
    server.login(username, password)
    server.sendmail(username, to_addresses, message.as_string())
    print("The email to multiple recipients has been sent!")
except Exception as e:
    print("Email sending error:", e)
finally:
    server.quit()

Tự động hoá Gửi Email Theo Lịch Trình

Để gửi email định kỳ, việc thiết lập lịch trình rất hữu ích. Python có các thư viện như “schedule” và mô-đun “time” để thực hiện các tác vụ lặp lại dựa trên khoảng thời gian. Ví dụ, bạn có thể tạo một script để tự động gửi email vào một thời điểm cụ thể.

Ví dụ mã (Gửi theo lịch trình sử dụng schedule)

import smtplib
from email.mime.text import MIMEText
import schedule
import time

def send_email():
    smtp_server = "smtp.gmail.com"
    smtp_port = 587
    username = "your_email@gmail.com"
    password = "your_app_password"
    to_address = "recipient@example.com"
    subject = "Scheduled email"
    body = "This is an email sent on a regular schedule."

    message = MIMEText(body)
    message["From"] = username
    message["To"] = to_address
    message["Subject"] = subject

    try:
        server = smtplib.SMTP(smtp_server, smtp_port)
        server.starttls()
        server.login(username, password)
        server.sendmail(username, to_address, message.as_string())
        print("Email has been sent!")
    except Exception as e:
        print("Email sending error:", e)
    finally:
        server.quit()

# Send the email every day at 9:00 AM
schedule.every().day.at("09:00").do(send_email)

while True:
    schedule.run_pending()
    time.sleep(1)

Kịch bản này sẽ tự động gửi email mỗi ngày vào thời gian đã chỉ định (ở đây là 9:00 sáng).

Gửi Email bằng Tiếng Nhật

Khi gửi email bằng tiếng Nhật bằng Python, bạn cần chú ý đến mã hoá. Đặc biệt đối với tiêu đề và nội dung có chứa tiếng Nhật, hãy cấu hình tin nhắn của bạn sử dụng mã hoá UTF-8 để đảm bảo truyền tải đúng.

Ví dụ mã (hỗ trợ tiếng Nhật)

import smtplib
from email.mime.text import MIMEText
from email.header import Header

smtp_server = "smtp.gmail.com"
smtp_port = 587
username = "your_email@gmail.com"
password = "your_app_password"
to_address = "recipient@example.com"

# Japanese subject and body
subject = Header("Test email in Japanese", "utf-8")
body = "This is an email sent in Japanese from Python."

message = MIMEText(body, "plain", "utf-8")
message["From"] = username
message["To"] = to_address
message["Subject"] = subject

try:
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()
    server.login(username, password)
    server.sendmail(username, to_address, message.as_string())
    print("The Japanese email has been sent!")
except Exception as e:
    print("Email sending error:", e)
finally:
    server.quit()

Tóm tắt

Trong phần này, chúng tôi đã trình bày các kỹ thuật gửi email nâng cao trong Python. Sử dụng các tính năng như gửi tới nhiều người nhận, tự động hoá email theo lịch trình, và hỗ trợ tiếng Nhật giúp việc gửi email của bạn thực tiễn hơn. Phần tiếp theo sẽ tóm tắt bài viết và xem lại các điểm chính.

6. Tổng kết

Bài viết này đã hướng dẫn cách gửi email bằng Python, từ cơ bản đến các kỹ thuật nâng cao. Bằng cách sử dụng thư viện chuẩn của “smtplib”, việc gửi email trở nên đơn giản và có thể áp dụng vào các công việc và ứng dụng hàng ngày.
Dưới đây là bản tóm tắt các điểm chính đã học trong mỗi phần.

  1. Các bước cơ bản để gửi email
  • Bạn đã học cách sử dụng mô-đun “smtplib” của Python để gửi email qua máy chủ SMTP.
  • Chúng tôi cũng đã trình bày quy trình từ soạn thảo đến gửi email và tầm quan trọng của việc xử lý lỗi.
  1. Các ví dụ mã thực tế về gửi email
  • Chúng tôi đã giới thiệu cách gửi email dạng văn bản thuần, email HTML, và email có tệp đính kèm, kèm theo các ví dụ mã.
  • Điều này cho phép bạn điều chỉnh mã cho các định dạng email khác nhau để đáp ứng nhu cầu đa dạng.
  1. Gửi email bằng Gmail
  • Chúng tôi đã giải thích các cài đặt máy chủ SMTP của Gmail và các biện pháp bảo mật bằng mật khẩu ứng dụng.
  • Chúng tôi nhấn mạnh rằng khi sử dụng tài khoản Gmail, bạn cần bật xác thực hai bước và tạo mật khẩu ứng dụng.
  1. Các kỹ thuật gửi email nâng cao
  • Chúng tôi đã đề cập đến việc gửi tới nhiều người nhận, tự động hoá email theo lịch trình, và các kỹ thuật xử lý nội dung tiếng Nhật.
  • Đặc biệt, chúng tôi nhấn mạnh rằng việc thiết lập mã hoá đúng là quan trọng khi gửi email có tiêu đề hoặc nội dung bằng tiếng Nhật.

Cách sử dụng hướng dẫn này

Bằng cách làm theo hướng dẫn này, bạn có thể xây dựng các công cụ gửi email tự động, hệ thống thông báo theo lịch trình, hoặc các ứng dụng thông báo bằng Python. Như một kỹ năng thực tiễn, bạn có thể áp dụng nó cho hỗ trợ khách hàng, quản lý vận hành, hoặc như một phần của dịch vụ thông báo.
Việc gửi email bằng Python thể được áp dụng trong nhiều nhiệm vụ và trường hợp sử dụng, và tính tiện lợi cũng như linh hoạt của nó có thể mang lại lợi ích lớn cho doanh nghiệp. Hãy thử và tích hợp nó vào các dự án của bạn.