Hướng dẫn cách gửi file python
Bài viết này giới thiệu tới bạn một giải pháp hiệu quả khi xử lý đống email của mình. Ngôn ngữ lập trình Python hỗ trợ cho bạn các thư viện giúp bạn tối ưu hóa thời gian khi thực hiện những công vụ liên quan đến email. Show Bạn có thể lập trình để gửi email đến nhiều người hay nhận thông báo email một cách có hệ thống. Bạn còn có thể gửi email xác nhận cho người dùng khi họ tạo tài khoản hoặc giữ email cho các thành viên trong tổ chức của bạn để nhắc nhở họ, chẳng hạn như việc đóng các khoản phí. Thông thường gửi email là một công việc tốn thời gian, dễ bị lỗi nhưng nó sẽ trở nên dễ dàng hơn bao giờ hết khi được tự động hóa với Python. Trong bài viết này bạn sẽ học được cách:
Bắt tay vào tìm hiểu nào!Python xây dựng thư viện Đầu tiên, hãy thiết lập một tài khoản Gmail hoặc thiết lập máy chủ SMTP debugging có thể xóa email bạn gửi và in chúng sử dụng command prompt. Có 2 phương pháp được nêu bên dưới. Một máy chủ local SMTP debugging có thể sửa bất kỳ lỗi email nào và đảm bảo rằng các hàm email của bạn sẽ được sửa trước khi gửi. Cách 1: Thiết lập một tài khoản Gmail mớiNếu bạn quyết định sử dụng tài khoản Gmail để gửi email, mình khuyên bạn nên thiết lập một tài khoản mới mà bạn không dùng đến phục vụ mục đích code. Bởi vì bạn sẽ phải thay đổi bảo mật của tài khoản Gmail để cho phép code python truy cập vào và bạn còn có thể bị lộ thông tin đăng nhập của mình. Ngoài ra, hộp thư đến của bạn sẽ mau chóng bị đầy. Do đó cần thiết lập một email mới phục vụ nghiên cứu. Một tính năng xịn xò của Gmail là bạn có thể sử dụng dấu + ngay trước dấu @ để thêm những thay đổi đối với email của bạn. Ví dụ: thư được gửi đến [email protected] và [email protected] đều sẽ đến [email protected]. Bạn có thể mô phỏng nhiều địa chỉ mà tất cả được gửi đến cùng một hộp thư, có cùng địa chỉ đến. Để thiết lập địa chỉ Gmail giúp kiểm tra code của bạn, hãy làm như sau:
Nếu bạn không muốn giảm mức độ bảo mật tài khoản Gmail, hãy kiểm tra Google làm thể nào để lấy thông tin đăng nhập sử dụng code python, sử dụng nền tảng ủy quyền OAuth2. Cách 2: Thiết lập Máy chủ SMTP cục bộBạn có thể kiểm tra chức năng email bằng cách chạy máy chủ SMTP debugging cục bộ, sử dụng thư viện Bạn có thể bật máy chủ local SMTP debugging lên bằng cách gõ lệnh sau trên Command Prompt:
Trên Linux, chúng ta sử dụng sudo ở phía trước. Bất kỳ email nào được gửi qua máy chủ này sẽ bị loại bỏ và hiển thị nội dung trên cửa sổ dưới dạng byte:
Giả sử bạn đang sử dụng một tài khoản
Gmail, nếu bạn đang sử dụng một máy chủ local debugging, bạn chỉ cần sử dụng 1. Gửi một email văn bản đơn giảnTrước khi đi sâu vào việc gửi email với Bắt đầu một kết nối SMTP an toànKhi bạn gửi email thông qua Python, bạn nên đảm bảo rằng kết nối SMTP của bạn được mã hóa, để thông tin đăng nhập và thông tin đăng nhập của bạn không dễ dàng bị người khác truy cập. SSL (Secure Sockets Layer Lớp cổng bảo mật) và TLS (Transport Layer Security Bảo mật lớp vận chuyển) là hai giao thức có thể được sử dụng để mã hóa kết nối SMTP. Nó không cần thiết phải sử dụng một trong hai thứ này khi sử dụng máy chủ local debugging. Có hai cách để bắt đầu kết nối an toàn với máy chủ email của bạn:
Trong cả hai trường hợp, Gmail sẽ mã hóa email bằng TLS, vì đây là sự
kế thừa an toàn hơn của SSL. Trong các cân nhắc về bảo mật Python, bạn nên sử dụng
Trước tiên mình sẽ chỉ cho bạn cách sử dụng Cách 1: Sử dụng SMTP_SSL() Ví dụ mã bên dưới tạo kết nối an toàn với máy chủ SMTP của Gmail, sử dụng SMTP_SSL () của smtplib để bắt đầu kết nối được mã hóa TLS. Tình huống mặc định của ssl xác nhận tên máy chủ, xác nhận của nó và tối ưu hóa bảo mật của kết nối. Hãy chắc chắn điền vào địa chỉ email của riêng bạn thay vì
Sử dụng với smtplib.SMTP_SSL () làm máy chủ: đảm bảo rằng kết nối được tự động đóng ở cuối đoạn code được thụt lề vào. Nếu cổng bằng 0 hoặc không được chỉ định, .SMTP_SSL () sẽ sử dụng cổng tiêu chuẩn cho SMTP qua SSL (cổng 465). Việc lưu giữ mật khẩu email trong code của bạn là không an toàn, đặc biệt nếu bạn có ý định chia sẻ nó với người khác. Thay vào đó, sử dụng input () để cho phép người dùng nhập mật khẩu của họ khi chạy tập lệnh, như trong ví dụ trên. Nếu bạn không muốn mật khẩu hiển thị trên màn hình khi bạn nhập mật khẩu, bạn có thể thêm thư viện getpass và sử dụng .getpass () thay vì phải nhập mật khẩu mà bạn không nhìn thấy. Cách 2: Sử dụng .starttls() Thay vì sử dụng .SMTP_SSL() để tạo kết nối an toàn ngay từ đầu, bạn có thể tạo kết nối SMTP không bảo mật và mã hóa bằng cách sử dụng .starttls(). Để làm điều này, thêm thư viện smtplib.SMTP, bao gồm kết nối với SMTP và cho phép bạn truy cập vào các phương thức của nó. Tôi khuyên bạn nên xác định máy chủ và cổng SMTP của bạn ở đầu tập lệnh để cấu hình chúng một cách dễ dàng. Đoạn code dưới đây sử dụng máy chủ xây dựng = SMTP(), thay vì định dạng with SMTP() as server: mà chúng tôi đã sử dụng trong ví dụ trước. Để chắc chắn rằng code của bạn không gặp sự cố khi có lỗi, hãy đặt code chính của bạn vào khối try và để một khối except in bất kỳ thông báo lỗi nào stdout:
Để nhận dạng chính mình với máy chủ, nên gọi hàm .helo() (SMTP) hoặc .ehlo() (ESMTP) sau khi tạo .SMTP() và một lần nữa sau .starttls(). Hàm này được gọi ngầm định bởi .starttls () và .sendmail () nếu cần, vì vậy trừ khi bạn muốn kiểm tra các phần mở rộng dịch vụ SMTP của máy chủ, không nhất thiết phải sử dụng .helo() hoặc .ehlo() một cách rõ ràng. Gửi email văn bản của bạnSau khi bắt đầu kết nối SMTP an toàn bằng một trong các phương pháp trên, bạn có thể gửi email của mình bằng cách sử dụng .sendmail ():
Lời khuyên cho bạn là nên xác định địa chỉ email và nội dung thư ở đầu tập lệnh của mình, sau khi nhập, để bạn có thể thay đổi dễ dàng:
Chuỗi message bắt đầu bằng "Subject: Hi there" theo sau là hai dòng mới (\ n). Điều này đảm bảo Hi there hiển thị là chủ đề của email và văn bản phía sau dòng mới sẽ được coi là nội dung thư. Ví dụ code bên dưới gửi email văn bản đơn giản bằng cách sử dụng SMTP_SSL():
Để so sánh, đây là một ví dụ code gửi email văn bản đơn giản qua kết nối SMTP được bảo mật bằng .starttls(). Các dòng server.ehlo() có thể được bỏ qua, vì chúng được gọi ngầm định bởi .starttls() và .sendmail(), nếu được yêu cầu:
2. Gửi những email đặc biệtThư viện Chứa nội dung HTMLNếu bạn muốn định dạng văn bản trong email của mình (in đậm, in nghiêng, v.v.) hoặc nếu bạn muốn thêm bất kỳ hình ảnh, các link hoặc nội dung phản hồi nào, thì HTML rất tiện dụng. Ngày nay, loại email phổ biến nhất là MIME(Multipurpose Internet Mail Extensions Tiện ích mở rộng thư Internet đa năng) loại email có nhiều
phần, kết hợp HTML và văn bản thuần túy. Các thông báo MIME được xử lý bởi thư viện Vì không phải tất cả các ứng dụng email đều hiển thị mã HTML theo mặc định và một số người chỉ chọn nhận email thuần văn bản vì lý do bảo mật, việc thay thế email thuần văn bản bằng tin nhắn HTML khá quan trọng. Vì ứng dụng email sẽ hiển thị tệp đính kèm cuối cùng mà có nhiều phần trước tiên nên hãy đảm bảo thêm thông báo
HTML sau phiên bản văn bản thuần túy. Trong ví dụ bên dưới, các đối tượng MIMEText() của chúng tôi sẽ chứa các phiên bản HTML, đoạn văn bản thường hay gọi hàm
Trong ví dụ này, trước tiên, bạn định dạng tin nhắn thuần văn bản và HTML dưới dạng chuỗi ký tự, sau đó lưu trữ chúng dưới dạng đối tượng plain/htmlMIMEText. Những thứ này sau đó có thể được thêm vào theo thứ tự này vào tin nhắn MIMEMultipart ("alternative") và được gửi qua lớp bảo mật của bạn kết nối với máy chủ email. Hãy nhớ thêm mã HTML sau văn bản thay thế vì ứng dụng email sẽ cố gắng hiện thị phần phụ cuối cùng trước. Thêm tệp đính kèm bằng gói emailĐể gửi tệp nhị phân đến máy chủ email được thiết kế để hoạt động với dữ liệu văn bản, chúng cần được mã hóa trước khi vận chuyển. Điều này thường được thực hiện bằng cách sử dụng base64, mã hóa dữ liệu nhị phân thành các ký tự ASCII có thể in được. Ví dụ mã dưới đây cho thấy cách gửi email với tệp PDF dưới dạng tệp đính kèm:
Thông báo Xem thêm tài liệu về mô-đun 3. Gửi nhiều email cá nhânHãy tưởng tượng bạn muốn gửi email đến mọi người trong công ty của mình để nhắc nhở họ đóng tiền. Hoặc bạn muốn gửi đến các sinh viên trong lớp của bạn tới các email cá nhân của từng người về điểm số bài tập của họ. Python thực hiện rất tốt những nhiệm vụ này. Tạo một tệp CSV với thông tin cá nhân cần thiếtĐầu tiên để gửi nhiều email cá nhân thì chúng ta phải tạo file CSV(các thành phần cách nhau bởi dấu phẩy) có chứa tất cả thông tin cá nhân cần thiết. (Đảm bảo rằng không chia sẻ thông tin cá nhân khác của mọi người) Một tệp CSV là một bảng tính đơn giản, trong đó dòng đầu tiên thường chứa các tiêu đề cột. Dưới đây là nội dung của tệp contact_file.csv mà tôi đã lưu trong cùng thư mục với code Python của mình. Nó chứa tên, địa chỉ và điểm cho một nhóm người hư cấu. Tôi đã sử dụng cấu trúc [email protected] để đảm bảo tất cả các email được gửi đến hộp thư đến của riêng tôi, trong ví dụ này là [email protected]: Dưới đây là nội dung của tệp contact_file.csv được lưu trữ cùng thư mục với code Python của chúng tôi. Nó gồm tên, địa chỉ và điểm cho một nhóm người. Chúng tôi sử dụng cấu trúc
Khi tạo tệp CSV, đảm bảo tách các giá trị của bạn bằng dấu phẩy, không có bất kỳ khoảng trắng xung quanh nào. Duyệt qua các hàng để gửi nhiều emailVí dụ đoạn code dưới đây cho bạn thấy cách mở tệp CSV và lặp qua các dòng nội dung của nó (bỏ qua hàng tiêu đề). Để đảm bảo rằng code hoạt động chính xác trước khi bạn gửi email đến tất cả các địa chỉ liên hệ của bạn, tôi đã in Sending email to ... cho mỗi liên hệ, sau này chúng tôi có thể thay thế bằng chức năng gửi email thực sự:
Trong ví dụ trên, sử dụng với open (filename) as file: đảm bảo rằng tệp của bạn đóng ở cuối khối code. csv.reader () giúp bạn dễ dàng đọc từng dòng tệp CSV và trích xuất các giá trị của nó. Dòng next (reader) bỏ qua hàng tiêu đề sao cho dòng sau đây for name, email, grade in reader: chia các hàng tiếp theo bằng dấu phẩy và lưu các giá trị kết quả trong chuỗi name, email và grade cho liên hệ hiện tại. Nếu các giá trị trong tệp CSV của bạn chứa khoảng trắng ở một hoặc cả hai bên, bạn có thể xóa chúng bằng hàm .strip(). Nội dung được cá nhân hóaBạn có thể đặt nội dung được cá nhân hóa vào một tin nhắn bằng cách sử dụng str.format () để điền vào chỗ dành cho dấu ngoặc nhọn. Ví dụ, “hi {name}, you {result} your asignment”.formart (name=”John ", result="passed") sẽ trả cho bạn kết quả “hi John, you passed your assignment" Kể từ Python 3.6, định dạng chuỗi có thể được thực hiện một cách thanh lịch hơn bằng cách sử dụng f-strings, nhưng chúng yêu cầu các chỗ dành sẵn phải được xác định trước chính f-string. Để xác định thông báo email ở đầu tập lệnh và điền vào chỗ dành sẵn cho mỗi liên hệ khi duyệt qua các dòng trong tệp CSV, hàm .format () cũ hơn được sử dụng. Với suy nghĩ này, bạn có thể thiết lập một nội dung thư chung, với các chỗ dành sẵn có thể được điều chỉnh cho các cá nhân. Ví dụ CodeVí dụ mã sau đây cho phép bạn gửi email cá nhân đến nhiều địa chỉ liên hệ. Nó lặp lại một tệp CSV có name, email, grade cho mỗi liên hệ, như trong ví dụ trên. Thông báo chung được xác định ở phần đầu của tập lệnh và đối với mỗi liên hệ trong tệp CSV, các phần giữ chỗ {name} và {grade} của nó được điền vào và một email được cá nhân được gửi qua kết nối an toàn với máy chủ Gmail, như bạn thấy ở dưới đây:
4. YagmailCó nhiều thư viện được thiết kế để giúp gửi email dễ dàng hơn, chẳng hạn như Envelopes, Flanker và Yagmail. Yagmail được thiết kế để hoạt động cụ thể với Gmail và nó đơn giản hóa đáng kể quá trình gửi email thông qua API, như bạn có thể thấy trong ví dụ code dưới đây:
Ví dụ đoạn code này gửi một email có tệp đính kèm PDF mà không sử dụng thư viện email và smtplib. Khi thiết lập Yagmail, bạn có thể thêm xác thực Gmail của mình vào bộ khóa của hệ điều hành xem trong tài liệu. Nếu bạn không làm điều này, Yagmail sẽ nhắc bạn nhập mật khẩu của bạn khi được yêu cầu và tự động lưu nó vào bộ khóa. 5. Dịch vụ gửi emailNếu bạn có kế hoạch gửi một khối lượng lớn email, muốn xem số liệu thống kê email và muốn đảm bảo gửi thư đáng tin cậy, bạn nên xem xét các dịch vụ gửi email. Mặc dù tất cả các dịch vụ sau đây đều có gói trả phí để gửi số lượng lớn email, nhưng chúng cũng đi kèm với gói miễn phí để bạn có thể dùng thử. Một số gói miễn phí này có hiệu lực vô thời hạn và có thể đủ cho nhu cầu email của bạn. Dưới đây là tổng quan về các gói miễn phí cho một số dịch vụ email giao dịch chính.
Bạn có thể tìm kiếm trên Google để xem nhà cung cấp nào phù hợp nhất với nhu cầu của bạn hoặc chỉ cần thử một vài gói miễn phí để xem API nào bạn thích làm việc nhất. 6. Ví dụ với thư viện SendgridVí dụ sau sử dụng thư viện sendgird để gửi email:
Để chạy code này, trước tiên bạn phải:
Để hiểu thêm về cách thiết lập Sendgrid cho Mac và Windows tham khảo trên Github. Kết luậnBây giờ bạn có thể bắt đầu kết nối SMTP một cách an toàn và gửi nhiều email cá nhân cho những người trong danh sách liên hệ của bạn! Bạn đã học được cách gửi email có nội dung HTML bằng một văn bản thay thế đơn giản và đính kèm tệp vào email của bạn. Thư viện Yagmail giúp đơn giản hóa tất cả các tác vụ này khi bạn sử dụng tài khoản Gmail. Nếu bạn có kế hoạch gửi khối lượng lớn email, bạn có thể xem thêm các dịch vụ trao đổi email. Thử trải nghiệm việc quản lý email bằng Python nhé! |