email.utils: ابزارهای متفرقه¶
کد منبع: Lib/email/utils.py
در ماژول email.utils چند ابزار مفید ارائه شده است:
-
email.utils.localtime(dt=None)¶
زمان محلی را بهصورت یک شیء datetime آگاه برمیگرداند. اگر بدون آرگومان فراخوانی شود، زمان جاری را برمیگرداند. در غیر این صورت، آرگومان dt باید یک نمونه از datetime باشد، و این نمونه به منطقه زمانی محلی بر اساس پایگاه داده منطقه زمانی سیستم تبدیل میشود. اگر dt ساده (naive) باشد (یعنی dt.tzinfo برابر None است)، فرض میشود که در زمان محلی قرار دارد.
منسوخ شده از نسخهی 3.12، در نسخهی 3.14 حذف شده است: پارامتر isdst.
-
email.utils.make_msgid(idstring=None, domain=None)¶
رشتهای مناسب برای سرآیند Message-ID منطبق با RFC 2822 برمیگرداند. اگر idstring اختیاری داده شود، رشتهای است که برای تقویت یکتایی شناسهی پیام استفاده میشود. اگر domain اختیاری داده شود، بخش پس از '@' در msgid را فراهم میکند. مقدار پیشفرض، نام میزبان محلی است. معمولاً نیازی به تغییر این پیشفرض نیست، اما ممکن است در موارد خاصی مفید باشد، مانند ساخت یک سیستم توزیعشده که از یک نام دامنهی ثابت در چندین میزبان استفاده میکند.
تغییر یافته در نسخهی 3.2: کلیدواژهی domain افزوده شد.
توابع باقیمانده بخشی از API ایمیل قدیمی (Compat32) هستند. نیازی به استفادهی مستقیم از اینها با API جدید نیست، زیرا تجزیه و قالببندی ارائهشده توسط آنها بهطور خودکار توسط سازوکار تجزیهی سرآیند در API جدید انجام میشود.
-
email.utils.quote(str)¶
یک رشته جدید برمیگرداند که در آن بکاسلشهای موجود در str با دو بکاسلش، و علامتهای نقلقول دوتایی با بکاسلش-علامت نقلقول دوتایی جایگزین شدهاند.
-
email.utils.unquote(str)¶
یک رشته جدید برمیگرداند که نسخهی بدون علامت نقلقول از str است. اگر str با علامت نقلقول دوتایی شروع و تمام شود، آنها حذف میشوند. به همین ترتیب، اگر str با علامتهای زاویهای شروع و تمام شود، آنها حذف میشوند.
-
email.utils.parseaddr(address, *, strict=True)¶
نشانی را تجزیه میکند -- که باید مقدار یک فیلد حاوی نشانی مانند To یا Cc باشد -- به اجزای تشکیلدهندهی آن، یعنی نام واقعی و نشانی ایمیل. یک تاپل از آن اطلاعات برمیگرداند، مگر اینکه تجزیه ناموفق باشد، که در این صورت یک تاپل دوتایی از ('', '') برگردانده میشود.
اگر strict درست باشد، از یک پارسر سختگیر استفاده میشود که ورودیهای بدشکل را رد میکند.
تغییر یافته در نسخهی 3.13: افزودن پارامتر اختیاری strict و رد کردن ورودیهای بدشکل بهصورت پیشفرض.
-
email.utils.formataddr(pair, charset='utf-8')¶
این تابع معکوس parseaddr() است و یک تاپل دوتایی به شکل (realname, email_address) دریافت میکند و مقدار رشتهای مناسب برای سرآیند To یا Cc را بازمیگرداند. اگر عنصر اول pair نادرست باشد، عنصر دوم بدون تغییر بازگردانده میشود.
charset اختیاری، مجموعه نویسهای است که در کدگذاری RFC 2047 برای realname استفاده خواهد شد، اگر realname حاوی نویسههای غیر ASCII باشد. میتواند نمونهای از str یا Charset باشد. مقدار پیشفرض آن utf-8 است.
تغییر یافته در نسخهی 3.3: گزینهی charset افزوده شد.
-
email.utils.getaddresses(fieldvalues, *, strict=True)¶
این متد فهرستی از تاپلهای دوتایی با قالبی که توسط parseaddr() برگردانده میشود را برمیگرداند. fieldvalues دنبالهای از مقادیر فیلد سرآیند است که ممکن است توسط Message.get_all برگردانده شود.
اگر strict درست باشد، از یک پارسر سختگیر استفاده میشود که ورودیهای بدشکل را رد میکند.
در اینجا یک مثال ساده آمده است که تمام گیرندگان یک پیام را به دست میآورد:
from email.utils import getaddresses
tos = msg.get_all('to', [])
ccs = msg.get_all('cc', [])
resent_tos = msg.get_all('resent-to', [])
resent_ccs = msg.get_all('resent-cc', [])
all_recipients = getaddresses(tos + ccs + resent_tos + resent_ccs)
تغییر یافته در نسخهی 3.13: افزودن پارامتر اختیاری strict و رد کردن ورودیهای بدشکل بهصورت پیشفرض.
-
email.utils.parsedate(date)¶
تلاش میکند یک تاریخ را طبق قواعد RFC 2822 تجزیه کند. با این حال، برخی برنامههای ایمیل آن قالب را همانطور که مشخص شده است دنبال نمیکنند، بنابراین parsedate() سعی میکند در این موارد بهدرستی حدس بزند. date رشتهای حاوی یک تاریخ RFC 2822 است، مانند "Mon, 20 Nov 1995 19:12:08 -0500". اگر در تجزیه تاریخ موفق شود، parsedate() یک تاپل ۹تایی برمیگرداند که میتوان آن را مستقیماً به time.mktime() ارسال کرد؛ در غیر این صورت None برگردانده میشود. توجه داشته باشید که اندیسهای ۶، ۷ و ۸ تاپل نتیجه قابل استفاده نیستند.
-
email.utils.parsedate_tz(date)¶
همان عملکرد parsedate() را انجام میدهد، اما یا None یا یک تاپل ۱۰تایی بازمیگرداند؛ ۹ عنصر اول، تاپلی را تشکیل میدهند که میتوان آن را مستقیماً به time.mktime() ارسال کرد، و عنصر دهم، اختلاف منطقه زمانی تاریخ نسبت به UTC (که اصطلاح رسمی برای زمان میانگین گرینویچ است) [1] است. اگر رشته ورودی منطقه زمانی نداشته باشد، آخرین عنصر تاپل برگرداندهشده 0 است که نشاندهنده UTC است. توجه داشته باشید که اندیسهای ۶، ۷ و ۸ تاپل نتیجه قابل استفاده نیستند.
-
email.utils.parsedate_to_datetime(date)¶
معکوس format_datetime(). همان کارکرد parsedate() را دارد، اما در صورت موفقیت یک datetime برمیگرداند؛ در غیر این صورت، اگر date حاوی مقدار نامعتبری باشد، مانند ساعتی بزرگتر از ۲۳ یا آفست منطقه زمانی خارج از بازهی -۲۴ تا ۲۴ ساعت، ValueError پرتاب میشود. اگر تاریخ ورودی دارای منطقه زمانی -0000 باشد، datetime یک datetime ساده خواهد بود، و اگر تاریخ مطابق RFCها باشد، نشاندهندهی زمانی در UTC خواهد بود، اما بدون هیچ نشانهای از منطقه زمانی واقعی مبدأ پیامی که تاریخ از آن آمده است. اگر تاریخ ورودی دارای هر آفست منطقه زمانی معتبر دیگری باشد، datetime یک datetime آگاه همراه با یک timezone tzinfo متناظر خواهد بود.
-
email.utils.mktime_tz(tuple)¶
یک تاپل ۱۰تایی را که توسط parsedate_tz() برگردانده میشود، به یک برچسب زمانی UTC (ثانیههای سپریشده از Epoch) تبدیل میکند. اگر آیتم منطقهی زمانی در تاپل None باشد، زمان محلی فرض میشود.
-
email.utils.formatdate(timeval=None, localtime=False, usegmt=False)¶
یک رشتهی تاریخ را مطابق با RFC 2822 برمیگرداند، برای نمونه:
Fri, 09 Nov 2001 01:08:47 -0000
timeval اختیاری، در صورت ارائه، یک مقدار زمان ممیز شناور است که time.gmtime() و time.localtime() آن را میپذیرند؛ در غیر این صورت از زمان جاری استفاده میشود.
localtime پرچمی اختیاری است که وقتی True باشد، timeval را تفسیر میکند و تاریخی بر اساس منطقهی زمانی محلی بهجای UTC برمیگرداند و ساعت تابستانی را بهدرستی در نظر میگیرد. مقدار پیشفرض False است، به این معنا که از UTC استفاده میشود.
usegmt اختیاری، پرچمی است که وقتی True باشد، یک رشتهی تاریخ را با منطقهی زمانی بهصورت رشتهی ASCII GMT خروجی میدهد، نه بهصورت عددی -0000. این برای برخی پروتکلها (مانند HTTP) لازم است. این فقط زمانی اعمال میشود که localtime برابر False باشد. مقدار پیشفرض False است.
-
email.utils.format_datetime(dt, usegmt=False)¶
مانند formatdate، اما ورودی یک نمونه datetime است. اگر یک datetime ساده باشد، فرض میشود «UTC بدون اطلاعات درباره منطقهی زمانی مبدأ» است و برای منطقهی زمانی از -0000 قراردادی استفاده میشود. اگر یک datetime آگاه باشد، از آفست عددی منطقهی زمانی استفاده میشود. اگر یک منطقهی زمانی آگاه با آفست صفر باشد، میتوان usegmt را روی True تنظیم کرد، که در این صورت رشتهی GMT بهجای آفست عددی منطقهی زمانی استفاده میشود. این راهی برای تولید سرآیندهای تاریخ HTTP مطابق با استانداردها فراهم میکند.
-
email.utils.decode_rfc2231(s)¶
رشتهی s را مطابق RFC 2231 کدگشایی کنید.
-
email.utils.encode_rfc2231(s, charset=None, language=None)¶
رشتهی s را مطابق RFC 2231 کدگذاری میکند. آرگومانهای اختیاری charset و language، در صورت داده شدن، به ترتیب نام مجموعهنویسه و نام زبان مورد استفاده هستند. اگر هیچکدام داده نشود، s همانطور که هست برگردانده میشود. اگر charset داده شود اما language داده نشود، رشته با استفاده از رشتهی خالی برای language کدگذاری میشود.
-
email.utils.collapse_rfc2231_value(value, errors='replace', fallback_charset='us-ascii')¶
وقتی یک پارامتر سرآیند در قالب RFC 2231 کدگذاری شده باشد، Message.get_param ممکن است یک ۳-تایی برگرداند که شامل مجموعه نویسه، زبان، و مقدار است. collapse_rfc2231_value() این را به یک رشته تبدیل میکند. آرگومان اختیاری errors به آرگومان errors متد encode() کلاس str پاس داده میشود؛ پیشفرض آن 'replace' است. آرگومان اختیاری fallback_charset مجموعه نویسهای را مشخص میکند که اگر آن در سرآیند RFC 2231 توسط پایتون شناخته نشود، استفاده میشود؛ پیشفرض آن 'us-ascii' است.
برای سهولت، اگر value ارسالشده به collapse_rfc2231_value() یک تاپل نباشد، باید یک رشته باشد و بدون علامت نقلقول برگردانده میشود.
-
email.utils.decode_params(params)¶
کدگشایی فهرست پارامترها مطابق RFC 2231. params دنبالهای از ۲-تاییها شامل عناصری بهشکل (content-type, string-value) است.
پانویسها
©
حق نشر 2001 Python Software Foundation.
این صفحه تحت مجوز بنیاد نرمافزار پایتون نسخه ۲ منتشر شده است.
مثالها، دستورالعملها، و سایر کدهای موجود در مستندات همچنین تحت مجوز بدون بند BSD منتشر شدهاند.
برای اطلاعات بیشتر به
تاریخچه و مجوز مراجعه کنید.
بنیاد نرمافزار پایتون یک شرکت غیرانتفاعی است.
لطفاً کمک مالی کنید.
آخرین بهروزرسانی در نوامبر 12, 2026 (06:19 UTC).
آیا
اشکالی یافتید؟
ساخته شده با
Sphinx 9.1.0.