از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
اعتبار سنجی آدرس های ایمیل در پایتون با اعتبارسنجی ایمیل
سرفصلهای مطلب
معرفی
چه در حال ایجاد یک فرم ثبت نام برای وب سایت خود باشید و چه فقط باید تمام آدرس های ایمیل نامعتبر را از لیست پستی خود حذف کنید، نمی توانید این کار را انجام دهید. process از اعتبار سنجی ایمیل.
شما باید با بررسی اینکه آیا یک آدرس ایمیل با فرم مورد نیاز مطابقت دارد و می تواند پیام های ایمیل را دریافت کند، اعتبارسنجی کنید که آیا آدرس ایمیل واقعی است یا خیر. که باید به طور موثر و ایمن انجام شود.
آنجاست email-validator
این یک کتابخانه پایتون برای استفاده آسان و در عین حال قوی است که برای اعتبارسنجی آدرس های ایمیل استفاده می شود.
در این راهنما، به اصول اولیه این کتابخانه می پردازیم، کشف می کنیم که چه زمانی و چرا می توانید از آن استفاده کنید و همچنین چه زمانی نمی توانید از آن استفاده کنید. ما این موارد را با مثال های عملی مرور خواهیم کرد که به شما در درک روش استفاده کمک می کند email-validator
.
چیست اعتبار سنجی ایمیل?
همانطور که قبلاً بیان کردیم، email-validator
یک کتابخانه قوی پایتون است که آدرس های ایمیل را تأیید می کند. این دو نوع اعتبار سنجی را انجام می دهد – اعتبار سنجی نحوی و اعتبار سنجی تحویل. این مهم است زیرا آدرس ایمیل باید فرم مورد نیاز را داشته باشد و در همان زمان یک نام دامنه قابل حل داشته باشد تا معتبر در نظر گرفته شود.
اعتبار سنجی نحوی تضمین می کند که نمایش رشته ای از آدرس ایمیل به شکلی باشد، مانند (email protected)
.
اعتبار سنجی تحویل اطمینان حاصل می کند که آدرس ایمیل صحیح از نظر نحوی دارای نام دامنه (رشته بعد از @
امضا کردن – rasanegar.com
) که قابل حل است.
به زبان ساده، تضمین می کند که آدرس ایمیل معتبر می تواند پیام های ایمیل ارسال و دریافت کند.
علاوه بر آن، email-validator
اگر آدرس ایمیل معتبر باشد، یک جایزه کوچک برای ما دارد، email-validator
می تواند آن را برگرداند فرم نرمال شده، تا بتوانیم آن را به روشی مناسب در یک پایگاه داده ذخیره کنیم. از طرف دیگر، اگر آدرس ایمیل نامعتبر باشد، email-validator
به ما یک پیام خطای واضح و قابل خواندن برای انسان می دهد تا به ما کمک کند تا بفهمیم چرا آدرس ایمیل ارسال شده معتبر نیست.
در ساده ترین شکلش، عادی سازی آدرس ایمیل به معنی کوچک کردن دامنه یک آدرس ایمیل (دنباله بعد از @
علامت)، زیرا به حروف بزرگ و کوچک حساس نیست.
در موارد پیچیدهتر نرمالسازی، جایی که بخش دامنه شامل برخی از کاراکترهای یونیکد است، نرمالسازی انواع تبدیلهای بین کاراکترهای یونیکد و اسکی را پوشش میدهد. مشکل در این واقعیت نهفته است که رشتههای مختلف یونیکد میتوانند برای کاربر نهایی یکسان به نظر برسند و معنی مشابهی داشته باشند، بنابراین عادیسازی باید اطمینان حاصل کند که آن رشتهها به یک شکل ثبت میشوند، زیرا در واقع همان دامنه را نشان میدهند.
ذکر این نکته ضروری است که این کتابخانه برای کار با آدرس ایمیلی که مطابق با فرم نیست طراحی نشده است (email protected)
.
به عنوان مثال، آن را به درستی اعتبار سنجی نمی کند
To:
خط در یک پیام ایمیل (به عنوان مثال،To: Example Name <(email protected)>
).
اعتبار سنجی ایمیل در مقابل RegEx برای اعتبارسنجی ایمیل
ما معمولا از نوعی استفاده می کنیم بیان منظم (RegEx) برای تأیید فرم صحیح آدرسهای ایمیل و اگر فقط باید مطمئن شوید که برخی از آدرسهای ایمیل با فرم مورد نیاز مطابقت دارد، انتخاب خوبی است. این یک تکنیک شناخته شده است، نوشتن و نگهداری آن آسان است و قدرت محاسباتی زیادی برای اجرا مصرف نمی کند.
اگر میخواهید درباره اعتبارسنجی آدرسهای ایمیل با RegEx بیشتر بخوانید – Python ما را بخوانید: اعتبار آدرس ایمیل با عبارات منظم!
از سوی دیگر، اعتبارسنجی آدرس ایمیل گاهی اوقات می تواند بسیار پیچیده تر باشد. رشته ای که حاوی آدرس ایمیل است ممکن است با فرم مشخص شده یک آدرس ایمیل مطابقت داشته باشد، اما همچنان نمی تواند به عنوان آدرس ایمیل مناسب در نظر گرفته شود، زیرا دامنه حل نمی شود.
برای مثال،
(email protected)
با فرم مشخص شده یک آدرس ایمیل مطابقت دارد، اما معتبر نیست زیرا نام دامنه (ssstackabuse.com
) وجود ندارد، بنابراین حل نمی شود و آدرس ایمیل مثال نمی تواند پیام های ایمیل ارسال و دریافت کند.
از سوی دیگر، (email protected)
، هر دو الزامات یک آدرس ایمیل معتبر را برآورده می کند. فرم مورد نظر را برآورده می کند و نام دامنه حل می شود. بنابراین می توان آن را یک آدرس ایمیل معتبر در نظر گرفت.
در آن صورت، email-validator
یک راه حل برتر ارائه می دهد – هم اعتبار سنجی نحوی و هم قابلیت تحویل را با آن انجام می دهد یک فراخوانی تابع ساده، بنابراین نیازی به زحمت نیست که مطمئن شوید آدرس ایمیل واقعاً می تواند ایمیل ارسال و دریافت کند. کدگذاری هر دوی این تأییدها فقط با استفاده از عبارات منظم غیرممکن است.
توجه داشته باشید: تضمین دریافت یا عدم دریافت ایمیل بدون ارسال ایمیل و مشاهده نتیجه، در واقع غیرممکن است. با این حال، می توانید بررسی کنید که آیا آن را بررسی کنید میتوانست یک ایمیل به عنوان یک امکان طبقه بندی دریافت کنید.
این دو چیز به نفع آن است email-validator
در برابر عبارات منظم استفاده از آن آسان تر است و همچنان می تواند وظایف بیشتری را با کارایی بیشتری انجام دهد.
روش نصب اعتبار سنجی ایمیل?
را email-validator
کتابخانه موجود است روی PyPI، بنابراین نصب از طریق آن بسیار ساده است pip
یا pip3
:
$ pip install email-validator
$ pip3 install email-validator
و اکنون شما آن را دارید email-validator
آماده برای استفاده در اسکریپت پایتون
اعتبار آدرس ایمیل با اعتبار سنجی ایمیل?
هسته اصلی email-validator
کتابخانه آن است validate_email()
روش. یک نمایش رشته ای از آدرس ایمیل را به عنوان آرگومان می گیرد و اعتبار سنجی را انجام می دهد روی آن آدرس اگر آدرس ایمیل ارسال شده است معتبر validate_email()
روش باز خواهد گشت یک شی حاوی یک فرم عادی از آدرس ایمیل ارسال شده، اما در مورد یک بی اعتبار آدرس ایمیل، آن را افزایش می دهد EmailNotValidError
با یک پیام خطای واضح و قابل خواندن برای انسان که به ما کمک می کند تا بفهمیم چرا آدرس ایمیل ارسال شده معتبر نیست.
EmailNotValidError
در واقع فقط یک کلاس انتزاعی است که برای تشخیص خطا در اعتبارسنجی استفاده می شود process رخ داده است، از این رو، برای نشان دادن و توصیف خطاهای واقعی استفاده نمی شود.
برای این منظور، EmailNotValidError
کلاس دارای دو کلاس فرعی است که خطاهای واقعی رخ داده را توصیف می کند. اولی است EmailSynaxError
هنگامی که اعتبار سنجی نحوی با شکست مواجه می شود، افزایش می یابد، به این معنی که ایمیل ارسال شده فرم مورد نیاز یک آدرس ایمیل را برآورده نمی کند. دومی است EmailUndeliverableError
زمانی که اعتبار سنجی تحویل پذیری با شکست مواجه می شود، مطرح می شود، به این معنی که نام دامنه آدرس ایمیل ارسال شده وجود ندارد.
اکنون می توانیم در نهایت روش استفاده از آن را بررسی کنیم validate_email()
روش. البته اولین قدم این است که import آن را به اسکریپت خود وارد کرده و سپس آماده استفاده از آن هستیم:
from email_validator import validate_email
testEmail = "(email protected)"
emailObject = validate_email(testEmail)
print(emailObject.email)
از زمانی که گذشت testEmail
یک آدرس ایمیل معتبر است، کد قبلی فرم عادی آدرس ایمیل ذخیره شده در آن را خروجی می دهد testEmail
متغیر:
(email protected)
توجه داشته باشید: در مثال قبلی، خروجی همان آدرس اصلی است testEmail
زیرا در ابتدا عادی شده بود. اگر فرم غیر طبیعی یک ایمیل را به validate_email()
روش ، همانطور که انتظار می رود ، آدرس ایمیل برگشتی عادی می شود.
اگر اصل را عوض کنیم testEmail
به "(email protected)"
، کد قبلی هنوز همان خروجی را خواهد داشت ، زیرا عادی شده است:
(email protected)
از طرف دیگر ، اگر آدرس ایمیل نامعتبر را به validate_email()
روش ، کد قبلی ما را با پیام خطای مربوطه سوق می دهد. مثال زیر از testEmail
اعتبار سنج ssstackabuse.com
وجود ندارد:
testEmail = "(email protected)"
در این حالت ، کد قبلی خطای طولانی را در میان مواردی که وجود دارد ، به وجود می آورد:
>> ...
>> raise EmailUndeliverableError("The domain name %s does not exist." % domain_i18n)
email_validator.EmailUndeliverableError: The domain name ssstackabuse.com does not exist.
مستقر روی این سریع ، می توانیم نتیجه بگیریم که ایمیل منتقل شده نامعتبر است زیرا نام دامنه آن وجود ندارد. همچنین در مورد ایمیلهای نامعتبر از نظر نحوی، پیامهای مربوطه ارسال میشود تا بتوانیم به راحتی نتیجه بگیریم که آدرس ایمیل ارسال شده با فرم مورد نیاز یک آدرس ایمیل مطابقت ندارد.
شما می توانید به طور خودکار یک پیام خطای کاربر پسند تر و قابل خواندن انسانی را از این طریق استخراج کنید. برای استخراج فقط پیام خطا از سریع قبلی ، باید کد قبلی را به شرح زیر بازنویسی کنیم:
from email_validator import validate_email, EmailNotValidError
testEmail = "examplestackabuse.com"
try:
emailObject = validate_email(testEmail)
testEmail = emailObject.email
print(testEmail)
except EmailNotValidError as errorMsg:
print(str(errorMsg))
این کد فقط یک پیام خطای ساده استخراج شده از اعلان قبلی را وارد می کند:
The domain name ssstackabuse.com does not exist.
توجه داشته باشید: ما از آن بهره برده ایم EmailNotValidError
کلاس ما سعی کرده ایم اعتبار ایمیل را در try
مسدود شده و اطمینان حاصل کرد که خطا در آن گرفتار خواهد شد except
در صورت عدم اعتبارسنجی، مسدود کنید. نیازی به گرفتن نیست EmailSyntaxError
یا EmailUndeliverableError
به صورت جداگانه ، زیرا هر دو آنها زیر کلاس های گرفتار هستند EmailNotValidError
کلاس و نوع خطا را می توان به راحتی با پیام خطای چاپی تعیین کرد.
Validate_email () – استدلال های اختیاری
به طور پیش فرض، validate_email()
متد تنها یک آرگومان را می پذیرد – نمایش رشته ای از آدرس ایمیل که باید اعتبار سنجی شود، اما می تواند چند آرگومان کلمه کلیدی دیگر را بپذیرد:
- Allow_smtputf8 – مقدار پیش فرض است
True
، اگر تنظیم شده استFalse
راvalidate_email()
آدرسهای ایمیل بینالمللی شده را تأیید نمیکند، فقط آنهایی که نام دامنهای متشکل از نویسههای ASCII دارند (در این مورد هیچ کاراکتر UTF-8 در نام دامنه مجاز نیست). - چک_تحویل – مقدار پیش فرض است
True
، اگر روی تنظیم شودFalse
، هیچ اعتبار سنجی تحویلی انجام نشده است. - allow_empty_local – مقدار پیش فرض است
False
، اگر روی تنظیم شودTrue
، بخش محلی خالی یک آدرس ایمیل مجاز خواهد بود (به عنوان مثال@rasanegar.com
به عنوان آدرس ایمیل معتبر در نظر گرفته خواهد شد).
را ایمیل معتبر هدف – شی
احتمالاً متوجه شده اید که ما به شکل عادی آدرس ایمیل توسط emailObject.email
. به این دلیل است که validate_email()
متد را برمی گرداند ValidatedEmail
شی (در مثال های قبلی، در emailObject
متغیر) زمانی که یک آدرس ایمیل معتبر به عنوان آرگومان ارسال می شود.
را ValidatedEmail
شی شامل چندین ویژگی است که قسمت های مختلف آدرس ایمیل نرمال شده را توصیف می کند. را email
ویژگی حاوی فرم نرمال شده آدرس ایمیل معتبر است، بنابراین، ما باید با استفاده از آن به آن دسترسی داشته باشیم .
نشانه گذاری – emailObject.email
.
به طور کلی، ما میتوانیم به هر ویژگی از آن دسترسی داشته باشیم
ValidatedEmail
شی با استفاده ازvariableName.attributeName
(جایی کهvariableName
متغیری است که برای ذخیره سازی استفاده می شودValidatedEmail
هدف – شی).
به عنوان مثال، بیایید بگوییم که ما آن را تأیید کرده ایم (email protected)
با validate_email()
روش. نتیجه ValidatedEmail
شی شامل برخی از ویژگی های جالب و مفید است که در جدول زیر توضیح داده شده است:
نام مشخصه | مقدار نمونه | شرح |
---|---|---|
پست الکترونیک | (ایمیل محافظت شده) | فرم عادی یک آدرس ایمیل. |
ascii_email | (ایمیل محافظت شده) | ASCII تنها شکل از email صفت. اگر local_part شامل هر نوع کاراکتر بین المللی شده است، این ویژگی روی تنظیم می شود None . |
local_part | مثال | رشته قبل از @ به شکل عادی آدرس ایمیل وارد شوید. |
ascii_local_part | مثال | اگر هیچ کاراکتر بینالمللی وجود نداشته باشد، این ویژگی فقط به شکل ASCII تنظیم میشود local_part صفت. در غیر این صورت تنظیم شده است None . |
دامنه | rasanegar.com | رشته بعد از @ به شکل عادی آدرس ایمیل وارد شوید. اگر شامل کاراکترهای غیر ASCII باشد، smptutf8 ویژگی باید باشد True . |
ascii_domain | rasanegar.com | ASCII تنها شکل از domain صفت. |
smtputf8 | درست است، واقعی | یک مقدار بولی اگر allow_smtputf8=False آرگومان به validate_email() روش، این استدلال است False و True در غیر این صورت. |
توجه داشته باشید: انواع ASCII از ویژگی های ذکر شده با استفاده از پونی کد نحو رمزگذاری این یک نحو رمزگذاری است که برای تبدیل یک رشته یونیکد به یک رشته ASCII برای استفاده با نام های دامنه بین المللی در برنامه ها (IDNA).
نتیجه
در کل، email-validator
یک ابزار عالی برای اعتبارسنجی آدرس های ایمیل در پایتون است.
در این راهنما، تمام جنبه های مهم استفاده از این کتابخانه را بررسی کرده ایم تا دیدی جامع از آن داشته باشید. شما باید بتوانید درک کنید که چه زمانی و چگونه از آن استفاده کنید email-validator
و همچنین زمان انتخاب ابزار جایگزین.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-07 13:35:05