email.utils: ابزارهای متفرقه¶
کد منبع: Lib/email/utils.py
در ماژول email.utils چند ابزار مفید ارائه شده است:
- email.utils.localtime(dt=None)¶
زمان محلی را بهصورت یک شیء datetime آگاه برمیگرداند. اگر بدون آرگومان فراخوانی شود، زمان جاری را برمیگرداند. در غیر این صورت، آرگومان dt باید یک نمونه از
datetimeباشد، و این نمونه به منطقه زمانی محلی بر اساس پایگاه داده منطقه زمانی سیستم تبدیل میشود. اگر dt ساده (naive) باشد (یعنیdt.tzinfoبرابرNoneاست)، فرض میشود که در زمان محلی قرار دارد.اضافه شده در نسخهی 3.3.
منسوخ شده از نسخهی 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آگاه همراه با یکtimezonetzinfoمتناظر خواهد بود.اضافه شده در نسخهی 3.3.
- 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باشد، یک رشتهی تاریخ را با منطقهی زمانی بهصورت رشتهی ASCIIGMTخروجی میدهد، نه بهصورت عددی-0000. این برای برخی پروتکلها (مانند HTTP) لازم است. این فقط زمانی اعمال میشود که localtime برابرFalseباشد. مقدار پیشفرضFalseاست.
- email.utils.format_datetime(dt, usegmt=False)¶
مانند
formatdate، اما ورودی یک نمونهdatetimeاست. اگر یک datetime ساده باشد، فرض میشود «UTC بدون اطلاعات درباره منطقهی زمانی مبدأ» است و برای منطقهی زمانی از-0000قراردادی استفاده میشود. اگر یکdatetimeآگاه باشد، از آفست عددی منطقهی زمانی استفاده میشود. اگر یک منطقهی زمانی آگاه با آفست صفر باشد، میتوان usegmt را رویTrueتنظیم کرد، که در این صورت رشتهیGMTبهجای آفست عددی منطقهی زمانی استفاده میشود. این راهی برای تولید سرآیندهای تاریخ HTTP مطابق با استانداردها فراهم میکند.اضافه شده در نسخهی 3.3.
- 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')¶
When a header parameter is encoded in RFC 2231 format,
Message.get_parammay return a 3-tuple containing the character set, language, and value.collapse_rfc2231_value()turns this into a string. Optional errors is passed to the errors argument ofstr'sencode()method; it defaults to'replace'. Optional fallback_charset specifies the character set to use if the one in the RFC 2231 header is not known by Python; it defaults to'us-ascii'.برای سهولت، اگر value ارسالشده به
collapse_rfc2231_value()یک تاپل نباشد، باید یک رشته باشد و بدون علامت نقلقول برگردانده میشود.
- email.utils.decode_params(params)¶
کدگشایی فهرست پارامترها مطابق RFC 2231. params دنبالهای از ۲-تاییها شامل عناصری بهشکل
(content-type, string-value)است.
پانویسها