Xác nhận email trong python

Phương pháp đầu tiên chúng ta sẽ xem xét để xác thực địa chỉ email là sử dụng Regex. Chúng ta cũng sẽ nói về lý do tại sao bạn không nên sử dụng Biểu thức chính quy để xác thực địa chỉ email trong ứng dụng của mình

Sử dụng Regex trong Python

Để sử dụng Regex, chúng ta cần nhập mô-đun Python re. Tiếp theo, chúng ta sẽ sử dụng. match() từ mô-đun để khớp đầu vào chuỗi với biểu thức Regex của chúng tôi.  



import re
match = re.match(r"EMAIL_REGEX_STRING")print(match)

Đầu ra của việc chạy lại. match() sẽ giống như thế này




>>> <re.Match object; span=(0, 9), match='EMAIL_ADDRESS'>

Nếu chuỗi bạn chuyển đến lại. match() khớp với mẫu được cung cấp, tạo lại đối tượng Match với thông tin về kết quả tìm thấy. Chúng tôi không cần tất cả thông tin đó để thực hiện kiểm tra xác thực đơn giản, tuy nhiên, Match trả về null nếu không tìm thấy kết quả khớp, vì vậy chúng tôi có thể coi kết quả là boolean



if match:
   // do thing

 

Nếu chúng ta muốn một phản hồi boolean rõ ràng từ một hàm, chúng ta có thể chuyển kết quả thành một hàm boolean



print(bool(match))

 



>>> True

Xác thực email bằng biểu thức chính quy

Đoạn mã trên có thể được sử dụng trong kiểm tra email hợp lệ để kiểm tra xem địa chỉ email có tồn tại hay không khi máy chủ nhận được yêu cầu đăng nhập hoặc đăng ký từ giao diện người dùng của bạn. Kiểm tra email hợp lệ có thể trông giống như thế này



def is_valid_email_address(email_address):
   match = re.match(r"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$", email_address)
  
   return bool(match)

Sự khác biệt giữa đối sánh và tìm kiếm

Mô-đun regex Python chứa hai phương thức nguyên thủy để đánh giá một chuỗi. phù hợp và tìm kiếm. Chúng thực hiện các chức năng rất giống nhau và cả hai đều có thể được sử dụng để xác thực địa chỉ email trong Python. Sự khác biệt là tìm kiếm kiểm tra mẫu tìm kiếm khớp với bất kỳ vị trí nào trong chuỗi, trong khi khớp chỉ kiểm tra khớp ngay từ đầu

Tại sao bạn không nên xác thực email bằng Regex

Không nên sử dụng Biểu thức chính quy để xác thực địa chỉ email vì một số lý do

Hầu như không thể khớp với tất cả các địa chỉ email hợp lệ

Hầu hết mọi người không thực sự hiểu cách thức hoạt động của Regex. Thông thường, khi bạn tìm thấy Regex trong cơ sở mã, nó đã được sao chép và dán từ một nơi nào đó hoặc được xây dựng bằng sự trợ giúp của Trình trợ giúp Regex

Hầu hết các ví dụ bạn sẽ tìm thấy ở đó để khớp email với Regex sẽ không đầy đủ, quá hạn chế hoặc sẽ không khớp với tất cả các địa chỉ email hợp lệ, chẳng hạn như địa chỉ email được quốc tế hóa

Nó không kiểm tra tính hợp lệ của tên miền

Sử dụng Regex để kiểm tra xem một địa chỉ có tồn tại hay không sẽ không thực sự cho bạn biết địa chỉ đó có tồn tại hay không. Tất cả những gì nó sẽ cho bạn biết là liệu chuỗi địa chỉ email được cung cấp có được định dạng đúng và trông giống như một địa chỉ email hay không (và, như đã đề cập trong đoạn trước, đôi khi nó thậm chí không làm như vậy. )

Để bắt được một email không hợp lệ, bạn cần kiểm tra xem phần tên miền có tồn tại hay không, tài khoản người dùng có tồn tại hay không, liệu đó có phải là tài khoản thư rác đã biết hay không và toàn bộ những thứ khác

Nó không ngăn chặn các địa chỉ tạm thời đi qua

Ngay cả khi một địa chỉ email có thể được chứng minh là đến từ một miền và tài khoản người dùng hợp lệ, thì đó vẫn có thể là một email không hợp lệ vì những lý do khác. Nhà cung cấp hộp thư tạm thời cho phép người dùng tạo địa chỉ email hợp lệ chỉ tồn tại trong 10-15 phút trước khi hết hạn. Nếu bạn đang thu thập email của người dùng cho một bản tin hoặc một số chiến dịch tiếp thị khác, điều đó có nghĩa là bạn có thể dễ dàng nhận được rất nhiều địa chỉ email vô dụng trong danh sách gửi thư của mình

Xác nhận email trong python

Xác thực địa chỉ email bằng thư viện Python

Một cách khác để kiểm tra tính hợp lệ của email là sử dụng gói hoặc thư viện dành riêng cho tác vụ. Một thư viện như vậy là thư viện trình xác nhận email. Thư viện này không chỉ xác thực cú pháp của một địa chỉ nhất định mà còn kiểm tra khả năng gửi

Thư viện cung cấp các thông báo lỗi thân thiện với người dùng khi không đáp ứng các yêu cầu xác thực, hỗ trợ các địa chỉ email và tên miền được quốc tế hóa, chuyển đổi email thành định dạng chuẩn hóa và chặn các ký tự không an toàn. Nó từ chối các email có bản ghi MX rỗng

Để sử dụng thư viện, hãy cài đặt nó bằng Pip hoặc Pip3



pip install email-validator

Gói xuất một số phương thức mà bạn có thể nhập vào các mô-đun của mình, cùng với các thông báo lỗi. Ví dụ: để sử dụng gói để xác thực email đến để đăng ký, bạn có thể thực hiện như sau



from email_validator import validate_email, EmailNotValidError

email = "[email protected]"

try:
  email = validate_email(email).email
except EmailNotValidError as e:
  print(str(e))

Điều này xác thực email và trả về định dạng chuẩn hóa. Các thông báo lỗi khác do gói xuất ra bao gồm EmailUndeliverableError và EmailSyntaxError, cả hai đều là lớp con của EmailNotValidError

Đây chắc chắn là một bước tiến so với việc sử dụng Regex cơ bản để xác thực email. Hạn chế duy nhất của việc sử dụng thư viện này là nó không xử lý các địa chỉ lỗi thời (đối với điều đó, hãy sử dụng PlysEmail) và nó không nhằm mục đích xác thực trường "Tới" của email (đối với điều đó, hãy sử dụng Flanker. )

Xác thực địa chỉ email bằng AbstractAPI

Có thể cho rằng phương pháp tốt nhất và mạnh mẽ nhất để xác thực email trong Python là sử dụng API của bên thứ ba chuyên dụng. API chẳng hạn như API xác thực email miễn phí của AbstractAPI cung cấp điểm cuối REST an toàn chấp nhận chuỗi địa chỉ email và trả về phản hồi JSON chứa thông tin về tính hợp lệ của địa chỉ

Điểm cuối AbstractAPI được duy trì tích cực, khiến nó trở nên đáng tin cậy hơn so với thư viện, thường có thể đã lỗi thời. Nó kiểm tra cú pháp, tính hợp lệ của tên miền, bản ghi MX và xác minh máy chủ SMTP. Ngoài ra, nó cũng có thể cho bạn biết địa chỉ email là email miễn phí, email tạm thời hay email vai trò (i. e. nhân viên@miền. com. )

API cũng có thể xác thực email hàng loạt. Chỉ cần tải lên tệp CSV chứa danh sách email và API sẽ gửi báo cáo qua email cho bạn về tính hợp lệ của từng email trong danh sách. Điều này là tuyệt vời để kiểm tra một danh sách gửi thư

Nhận khóa API

Điều hướng đến trang Bắt đầu API. Bạn sẽ thấy một ví dụ về đối tượng phản hồi JSON của API và nút “Bắt đầu” màu xanh lam ở bên phải. Nhấp vào “Bắt đầu. ”

Xác nhận email trong python

Nếu bạn chưa từng sử dụng AbstractAPI trước đây, Bạn sẽ cần nhập email của mình và tạo mật khẩu. Nếu bạn đã sử dụng Tóm tắt trước đây, bạn có thể cần phải đăng nhập

Xác nhận email trong python

Khi bạn đã đăng nhập, bạn sẽ đến trang chủ của API. Bạn sẽ thấy các tùy chọn về tài liệu, giá cả và hỗ trợ, đồng thời bạn sẽ thấy khóa API của mình. Tất cả các API Tóm tắt đều có các khóa duy nhất, vì vậy ngay cả khi bạn đã sử dụng API trước đây, khóa này sẽ là khóa mới

Sử dụng Khóa API của bạn để gửi yêu cầu tới API

Chúng tôi sẽ sử dụng mô-đun yêu cầu để gửi yêu cầu GET đến điểm cuối AbstractAPI, vì vậy hãy cài đặt yêu cầu đó trước

________số 8_______

Tiếp theo, chúng ta sẽ viết một hàm gọi là sendEmailValidationRequest để gửi yêu cầu tới API và kiểm tra kết quả JSON



import requests
def send_email_validation_request(email_address):
   try:
       response = requests.get(
      "https://emailvalidation.abstractapi.com/v1/?api_key=YOUR_API_KEY&email_address={validated_ip_address}")
       print(response.content)
   except requests.exceptions.RequestException as api_error:
       print(f"There was an error contacting the Email Validation API: {api_error}")
       raise SystemExit(api_error)

Dữ liệu phản hồi sẽ trông giống như thế này



>>> <re.Match object; span=(0, 9), match='EMAIL_ADDRESS'>

0

Cách tốt nhất để xác định rằng địa chỉ email hợp lệ, được định dạng tốt và có thể gửi được là tạo một hàm trợ giúp để kiểm tra tất cả các trường đó và sẽ chỉ trả về True nếu tất cả các yêu cầu về tính hợp lệ được đáp ứng



>>> <re.Match object; span=(0, 9), match='EMAIL_ADDRESS'>

1

Hàm này sẽ kiểm tra mọi giá trị trong đối tượng JSON và trả về Sai nếu bất kỳ giá trị nào cho biết đó là một email không hợp lệ

Phần kết luận

Trong hướng dẫn này, chúng tôi đã xem xét ba phương pháp để xác định xem địa chỉ email có tồn tại trong Python hay không. regex, thư viện Python và API xác thực chuyên dụng. Phương pháp bạn chọn cho ứng dụng Python của mình sẽ tùy thuộc vào nhu cầu riêng của bạn và quy mô ứng dụng của bạn

Đối với ứng dụng thử nghiệm, ứng dụng sẽ không được sử dụng rộng rãi hoặc ứng dụng biết và có thể kiểm soát các tham số email, sử dụng Regex có thể là một tùy chọn khả thi. Tuy nhiên, đối với bất kỳ điều gì khác, chúng tôi khuyên bạn nên chọn một trong các gói Python xuất sắc hoặc sử dụng API chuyên dụng

câu hỏi thường gặp

Làm thế nào để bạn viết một Regex để xác thực email bằng Python?

Mặc dù có các mẫu Regex email có mục đích chung có thể được sử dụng để xác thực định dạng địa chỉ email trong Python, nhưng không nên sử dụng Regex làm trình xác thực email trong sản xuất. Ngoài việc chỉ xác thực cú pháp của chuỗi địa chỉ, bạn cũng phải xác minh rằng miền email tồn tại, đó không phải là miền spam, bản ghi MX là hiện tại và địa chỉ đó không phải là tạm thời hoặc tài khoản email dựa trên vai trò. Regex không thể cho bạn biết bất kỳ điều gì trong số này

Nếu bạn phải sử dụng cụm từ thông dụng để xác thực địa chỉ email, bạn nên sử dụng mẫu được RFC5322 phê duyệt cho địa chỉ email. Trông như thế này



>>> <re.Match object; span=(0, 9), match='EMAIL_ADDRESS'>

2

Làm cách nào để tôi biết nếu một Email Python là có thật?

Có một số cách để xác định xem một địa chỉ email có hợp lệ trong Python hay không. Để bắt đầu, bạn có thể sử dụng Regex để xác thực cú pháp của chuỗi (mặc dù điều này không được khuyến nghị vì nó dễ xảy ra lỗi và không cung cấp hình ảnh xác thực hoàn chỉnh. )

Bạn cũng có thể sử dụng một số thư viện xác thực email Python như thư viện trình xác thực email, PlysEmail hoặc Flanker

Biểu thức chính quy đơn giản nhất để xác thực email là gì?

Các biểu thức chính quy đơn giản nhất để xác thực email tìm kiếm sự hiện diện của tên người dùng và tên miền, được phân tách bằng ký hiệu '@' và theo sau là '. com' hoặc một số phần mở rộng tên miền khác. Việc kiểm tra cơ bản nhất sẽ như sau

^(. +)@(. +)$

Bạn không nên sử dụng biểu thức chính quy cơ bản như thế này để xác thực email trong ứng dụng của mình vì nó không bắt được mọi loại địa chỉ email