نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی
  • خانه
  • اشتباهات
  • بهترین جمع کننده نامه گردآورنده نامه (کارهای ساده را دشوار می کند)

بهترین جمع کننده نامه گردآورنده نامه (کارهای ساده را دشوار می کند)

جابجایی از یک برگه با جیمیل به تب دیگر با Yandex.Mail بسیار خسته کننده است. و اگر ده ها حساب با ارائه دهندگان پست مختلف دارید، چک کردن مکاتبات جدید در صبح به شکنجه تبدیل می شود. با ترکیب حروف در یک مکان، از شر این ناراحتی خلاص خواهید شد.

رابط وب

اکثر ارائه دهندگان ایمیل یک ویژگی داخلی برای جمع آوری ایمیل از چندین صندوق پستی ارائه می دهند. به عنوان مثال، بیایید سعی کنیم نامه‌ها را از تمام صندوق‌های پستی خود در یک حساب Gmail جمع‌آوری کنیم.

اول از همه، مطمئن شوید که سرویس نامه ای که می خواهید از آن نامه دریافت کنید، دسترسی POP دارد. سپس به تنظیمات جیمیل خود بروید و روی "تنظیمات" در گوشه سمت راست بالا کلیک کنید. به تب "حساب ها" بروید و بخش "دریافت نامه از سایر حساب ها" را پیدا کنید.

یک حساب کاربری اضافه کنید، آدرس ایمیل خود را وارد کنید و روی Next کلیک کنید، سپس رمز عبور خود را وارد کنید. برای ایمن تر کردن تبادل نامه بین ارائه دهندگان، مطمئن شوید که گزینه "هنگام دریافت نامه همیشه از یک اتصال امن (SSL) استفاده کنید" فعال باشد. سپس بر روی "افزودن حساب" کلیک کنید.

اکنون نامه هایی که به آدرس اضافه شده می آیند به طور خودکار در صندوق ورودی جیمیل شما جمع آوری می شوند. می توانید به تعداد دلخواه آدرس ایمیل اضافه کنید.

مشتریان دسکتاپ

ایمیل نیاز به نرم افزار دارد. بله، شما می توانید کارهای زیادی در وب میل انجام دهید (گاهی اوقات بسیار بیشتر از آنچه که گوگل در حال حاضر به شما اجازه می دهد در جی میل انجام دهید). اما رابط وب را نمی توان با یک برنامه بومی مقایسه کرد. حتی مدرن ترین رابط کاربری وب نیز در کار با نامه یک گلوگاه است.

Rafe Needleman، Cnet.com

سرویس گیرنده های ایمیل رومیزی خوب هستند زیرا می توانند ایمیل های چندین حساب را جمع آوری کنند. در همان زمان، می توانید با ده ها آدرس کار کنید و حتی فکر نکنید که کدام ارائه دهنده این یا آن پیام را ذخیره می کند.

اکثر سرویس گیرندگان ایمیل دسکتاپ دارای یک صندوق ورودی مشترک داخلی هستند. حتی اگر مشتری مورد علاقه شما فقط از صندوق ورودی جداگانه پشتیبانی می کند، باز هم می توانید به راحتی همه آنها را با فیلترهای هوشمند جمع کنید.

اگرچه Outlook برای مدیریت همزمان چندین صندوق پستی طراحی شده است، اما همچنان یک صندوق ورودی جداگانه برای هر حساب نمایش می دهد. اما این مشکل به راحتی با فیلتر قابل رفع است.

Outlook را باز کنید، به تب "Folders" بروید و روی "Create Search Folder" در نوار ابزار کلیک کنید. سپس "Create a custom search folder" را انتخاب کنید. روی "انتخاب" کلیک کنید، اما معیارهای جستجو را انتخاب نکنید تا همه پیام های جدید به پوشه ارسال شوند. نام پوشه را هر چه دوست دارید بگذارید، مانند همه نامه ها.

روی «مرور» کلیک کنید، همه پوشه‌ها و صندوق‌های پستی را که می‌خواهید از آن‌ها نامه جمع‌آوری کنید، انتخاب کنید و گزینه «جستجو در زیرپوشه‌ها» را علامت بزنید.

اکنون، در پوشه هوشمندی که ایجاد کرده‌اید، پیام‌هایی از تمام حساب‌های ایمیلی که در Outlook اضافه کرده‌اید ظاهر می‌شوند. می توانید گزینه «نمایش در موارد دلخواه» را فعال کنید تا ایمیل جدید شما همیشه قابل مشاهده باشد.

سرویس گیرنده ایمیل مک یک پوشه واحد برای ایمیل های دریافتی از تمام حساب های متصل فراهم می کند. فقط حساب های خود را اضافه کنید و همه ایمیل های جدید در یک مکان جمع آوری می شوند.

جمع آوری تمام ایمیل های خود در یک صندوق ورودی در Thunderbird بسیار آسان است. به منوی View بروید (اگر نوار منو قابل مشاهده نیست، Alt را فشار دهید). سپس Folders → Merge را انتخاب کنید. اکنون یک Inbox برای ایمیل های جدید، یک پوشه Drafts، یک پوشه Sent Items و یک Archive خواهید داشت. شما لازم نیست به دنبال آنچه که در آن است. در این صورت، پیام ها مانند قبل در سرورهای ارائه دهندگان ایمیل شما ذخیره می شوند.

مشتریان موبایل

صندوق ورودی یکپارچه در بسیاری از سرویس گیرندگان ایمیل تلفن همراه، از جمله Gmail، موجود است. برنامه Gmail صندوق ورودی شما را از همه حساب‌های ایمیل، از جمله یاهو، اوت لوک یا سایر سرویس‌ها جمع‌آوری می‌کند.

اگر برنامه Google را دوست ندارید، می‌توانید کلاینت‌های ایمیل شخص ثالث مانند Outlook یا MyMail را امتحان کنید.

شاید شما ایده های خود را در مورد نحوه گروه بندی نامه ها در یک مکان دارید؟ در نظرات به اشتراک بگذارید

دستورالعمل

وارد حساب کاربری خود شوید، برای این کار به لینک زیر http://gmail.com رفته و نام کاربری و رمز عبور خود را وارد کنید.

روی نماد چرخ دنده در گوشه سمت راست بالای "حساب ها و واردات" کلیک کنید. سپس به بلوک «ارسال ایمیل‌ها به‌عنوان» بروید و روی پیوند «آدرس ایمیل دیگر خود را اضافه کنید» کلیک کنید.

در یک پنجره پاپ آپ جدید، نام و نام خانوادگی را که ایمیل اضافه شده در آن ثبت شده است و همچنین آدرس ایمیل را وارد کنید. بر روی دکمه "مرحله بعدی" کلیک کنید.

در مرحله بعد، صفحه ای از شما می پرسد که چگونه نامه ها را با استفاده از این آدرس ارسال کنید - با استفاده از سرویس Gmail یا رابط ایمیل از QIP. توصیه می شود Gmail را مشخص کنید، تنظیمات کمتری داشته باشید، بنابراین زمان کمتری صرف می شود. بر روی دکمه "عمل بعدی" کلیک کنید.

در پنجره بعدی به شما اطلاع داده می شود که پس از کلیک بر روی دکمه "ارسال تایید" باید ایمیل مشخص شده را بررسی کنید تا جیمیل مطمئن شود که آدرس ایمیل واقعا وجود دارد. روی دکمه کلیک کنید و صندوق پستی خود را در یک تب جدید باز کنید.

ایمیل های خوانده نشده خود را مرور کنید و ایمیل را با عنوان "تایید جیمیل" باز کنید. برای تأیید وجود این آدرس ایمیل روی پیوند کلیک کنید یا کد را کپی کنید.

اگر کد را کپی کرده اید، آن را در قسمت خالی پنجره «افزودن دیگری...» قرار دهید و روی دکمه «تأیید» کلیک کنید. پس از مدتی، این پنجره به طور خودکار بسته می شود و یک ایمیل جدید در لیست "ارسال ایمیل به عنوان" ظاهر می شود.

اکنون، مشابه آنچه که توضیح داده شد، باید یک آدرس جدید به بلوک "مجموعه نامه های دیگر حساب ها" اضافه کنید. برای انجام این کار، روی پیوند "Add your POP3 mail account" کلیک کنید.

آدرس ایمیل خود را در پنجره جدیدی که باز می شود وارد کنید. بر روی دکمه "عمل بعدی" کلیک کنید. در پنجره بعدی باید رمز عبور را وارد کرده و گزینه های «همیشه از اتصال امن استفاده کنید» و «تخصیص برچسب به پیام های دریافتی» را فعال کنید. سپس روی دکمه "افزودن حساب" کلیک کنید. پس از مدتی، این پنجره به طور خودکار بسته می شود و یک ایمیل جدید در لیست "مجموعه نامه های دیگر حساب ها" ظاهر می شود.

ایمیل به بخشی جدایی ناپذیر از زندگی کاربران در اینترنت تبدیل شده است. منابع زیادی وجود دارد که یک صندوق پستی را فراهم می کند. اغلب نیاز به بررسی است وجود داشتن کشو، قابلیت اطمینان آن اگر لازم است از صحت یک آدرس ایمیل مطلع شوید، هیچ مشکلی در مورد آن وجود ندارد.

دستورالعمل

اگر به ایمیلی که در برخی منابع رایگان ایجاد شده است علاقه دارید، یک آدرس ایمیل با همین نام ثبت کنید. ایمیل قبلی موجود را نمی توان دوباره ثبت کرد. همه سرورهای ایمیل شناخته شده با سیستم اطلاع رسانی برگشتی ارائه می شوند. در این صورت یک اعلان خطایی دریافت خواهید کرد که به شما اطلاع می دهد که امکان ثبت نام بیشتر وجود ندارد.

سعی کنید نامه ای از ایمیلی که در دسترس شماست بنویسید کشوبه ایمیل مورد نظر پیام می تواند با متن یا بدون متن باشد. ارسال کنید و بعد از مدتی ایمیل خود را برای وجود نامه های ارسالی چک کنید. اگر به شما اطلاع داده شد که نامه شما به آدرس مورد نظر نرسیده است، ممکن است این ایمیل وجود نداشته باشد.

در شبکه دنیای من ثبت نام کنید. این یک شبکه اجتماعی در RuNet است که کاربران زیادی در آن ارتباط برقرار می کنند. از جستجو در حساب های سایر کاربران استفاده کنید. ایمیل مورد نظر را در نوار جستجو که در گوشه سمت راست بالای صفحه سایت قرار دارد تایپ کنید. می توانید روی دکمه "افراد" کلیک کنید. شما بر اساس معیارهای مختلف به جستجوی حساب ها هدایت خواهید شد. کافیست ایمیل مورد نظر خود را در قسمتی که با نام «جستجو» پیدا خواهید کرد وارد کنید. شما باید روی "یافتن" کلیک کنید. اگر آدرس پستی معتبر باشد، اطلاعات مربوط به صاحب نامه را خواهید دید.

اگر در سایر سرویس‌های پستی صندوق‌های پستی دارید، یک جمع‌آورنده نامه راه‌اندازی کنید تا همه اطلاعات در یک مکان باشد.

برای اینکه کلکتور به درستی کار کند، باید آن را فقط در یک حساب Mail.Ru پیکربندی کنید. قبل از شروع به جمع‌آوری ایمیل‌ها از سایر سرویس‌های ایمیل، مطمئن شوید که به حساب Mail.Ru خود وارد شده‌اید.

برای افزودن یک جعبه:

  1. روی لوگوی سرویسی که صندوق پستی در آن دارید کلیک کنید. اگر سرویس شما در لیست نیست، روی سایر نامه‌ها کلیک کنید.
  2. نام صندوق پستی و رمز عبور را وارد کنید، روی "افزودن" کلیک کنید. اگر پیغام خطا مشاهده کردید - صحت داده های وارد شده را بررسی کنید و دوباره امتحان کنید. اگر داده ها به درستی وارد شوند، تأیید دریافت خواهید کرد و می توانید به پیکربندی جمع کننده نامه ادامه دهید.

بسته به اینکه کدام پروتکل توسط سرویسی که صندوق پستی در آن قرار دارد پشتیبانی می شود، تنظیمات ممکن است متفاوت باشد:

IMAP

  1. مشخص کنید که می خواهید ایمیل ها را به کدام پوشه منتقل کنید و روی "ذخیره" کلیک کنید.
  2. اگر پوشه‌های شخصی در کادری دارید که از آن نامه‌ها را جمع‌آوری می‌کنید، آنها به پوشه انتخابی پیوست می‌شوند.

پوشه های سیستم نیز همگام می شوند: "پیش نویس"، "ارسال شده"، "هرزنامه" و "سطل زباله". اگر می‌خواهید ایمیل‌ها را از یک صندوق پستی شخص ثالث به صندوق ورودی خود وارد کنید، مشخص کنید که آیا می‌خواهید فیلترهای پیکربندی شده در صندوق پست فعلی را روی نامه‌های دریافتی اعمال کنید یا خیر.

اگر مجموعه نامه ها با استفاده از پروتکل IMAP پیکربندی شده باشد، می توانید به نامه های صندوق پستی که نامه به آن ارسال شده است پاسخ دهید.

POP3

  1. برای وارد کردن همه نامه‌ها از صندوق پستی، کادر "همه نامه‌ها" را علامت بزنید. اگر می‌خواهید همه ایمیل‌های وارد شده را به‌عنوان خوانده‌شده علامت‌گذاری کنید، کادر «علامت‌گذاری همه ایمیل‌های قدیمی به عنوان خوانده‌شده» را علامت بزنید.
  2. پوشه مورد نظر برای قرار دادن ایمیل از این صندوق پستی را انتخاب کنید. اگر می خواهید یک پوشه جدید ایجاد کنید، کادر کنار لیست کشویی را علامت بزنید و یک نام برای پوشه وارد کنید.
  3. برای اعمال فیلترهایی که در صندوق پستی پیکربندی شده‌اند روی پیام‌های سرورهای دیگر، کادر کنار «اعمال فیلترها برای پیام‌های دریافت‌شده» را علامت بزنید.
  4. روی ذخیره کلیک کنید.

بنابراین، می توانید حداکثر 9 صندوق پستی را مشخص کنید که نامه ها از آنها جمع آوری می شود. برای غیرفعال کردن جمع‌آورنده نامه، سوئیچ را در موقعیت «خاموش» قرار دهید. اگر می خواهید تنظیمات را ویرایش کنید، روی "ویرایش" کلیک کنید. برای حذف یک شیر آب، روی Remove کلیک کنید.

در این مقاله، ما در مورد چیستی "پست نامه از صندوق های دیگر" و "جمع آوری نامه ها از سایر حساب ها" صحبت خواهیم کرد. بررسی و مقایسه خدمات ایمیل

با به روز شدن عملکرد سرویس های پستی، اخباری را در پایان این مقاله منتشر خواهیم کرد.

سرویس ایمیل Mail.ru، موتورهای جستجوی Yandex و Google چندین سال است که عملکردهای بسیار مفید و ضروری را ارائه می دهند که به شما امکان می دهد تمام حساب های ایمیل دیگر را در یک ایمیل ترکیب کنید. به عبارت دیگر، ارزش افزودن و پیکربندی تمام «ایمیل‌های» خود را یکبار می‌کند و مدیریت آن‌ها در یک پنجره بدون وارد کردن مداوم لاگین و رمز عبور امکان‌پذیر خواهد بود.

خدمات پستی مکانی بزرگ برای ذخیره تمام نامه های دریافتی، یک رابط کاربر پسند، عملکرد مدیریت خوب و موارد دیگر به ما ارائه می دهد. برای آزمایش قابلیت‌های سرویس‌های پستی فهرست‌شده، ما سه پارامتر را برای ارزیابی کار آنها مشخص می‌کنیم: 1) لازم است حساب‌های ایمیل مختلف، از جمله آنهایی که از سرویس‌ها و سایت‌های مختلف، از طریق یک سرویس گیرنده پست الکترونیکی استفاده می‌شوند، مدیریت شوند. 2) برای هر نامه یک امضا و نام شخصی داشته باشید. 3) پیام‌ها را از سرورهای آن دسته از حساب‌های ایمیلی که به ایمیل، yandex یا google mail اضافه شده‌اند حذف کنید.

وظیفه ما به این صورت است:

پس بیایید شروع کنیم. ما اولین نفری هستیم که این سرویس را از Mail.ru آزمایش می کنیم، که به ما می گوید: "شما می توانید نامه ها را از تمام صندوق های پستی خود در یک صندوق پستی در Mail.ru جمع آوری کنید.

مجموعه ای از ایمیل ها را از هر سروری که از پروتکل IMAP یا POP3 استفاده می کند، تنظیم کنید. برای افزودن ایمیل خارجی به غیر از @mail، @inbox، @list، @bk، باید حداقل یک ایمیل از قبل در سرورهای فهرست شده از پست وجود داشته باشد. به عبارت دیگر، ابتدا ایمیل را ثبت کنید و سپس حساب های ایمیل دیگری را اضافه کنید. فرآیند ثبت نام برای نامه ساده است، توصیف آن بی معنی است، اما اضافه کردن ایمیل های دیگر به این حساب ایمیل را شرح خواهیم داد.


در مرحله بعد، از شما خواسته می شود تا برای هر صندوق پستی که استفاده می کنید یک لاگین و رمز عبور وارد کنید، و ظرف 3 تا 5 دقیقه، "Mail Collector from mail" پوشه ای با نام نامه اضافه شده در کنار "صندوق ورودی" ایجاد می کند. ، "ارسال شده"، "هرزنامه" و موارد دیگر.


در واقع، جمع‌آوری نامه در عرض 10-15 دقیقه کار می‌کند و تمام حروف را از کادری که مشخص کرده‌اید به پوشه جدید ایجاد شده اضافه می‌کند. تمام نامه های دریافتی برای ایمیل جدید به این پوشه ارسال می شود، همچنین امکان ارسال نامه از صندوق پستی ضمیمه وجود خواهد داشت. هنگام ایجاد یک نامه جدید، فیلد "از" ظاهر می شود که در آن می توانید انتخاب کنید نامه از کدام صندوق پستی ارسال شود.


از مزایای سرویس پست الکترونیکی Mail.ru می توان به سهولت اضافه کردن و تنظیم صندوق های پست دیگر، بدون نیاز به تعیین پروتکل های مختلف (POP3، SMTP) اشاره کرد. این بسیار مهم است زیرا هر کاربر نمی داند چیست.

معایب Mail.ru این است که تعیین نام و امضا برای هر ایمیل جدید (هر ایمیل جدید غیر از ایمیل اصلی) غیرممکن است، یعنی نام و امضای نامه اصلی به آن توزیع می شود. هر آدرس و بس. یکی دیگر از معایب بزرگ این است که هنگام آپلود ایمیل در نامه، هیچ راهی برای حذف خودکار ایمیل های اصلی از سرور صندوق پستی پیوست شده وجود ندارد. چرا حذف پیام ها از سرور صندوق پستی اضافه شده بسیار مهم است؟ با این کار از پر کردن نامه ضمیمه شده جلوگیری می شود، زیرا. حساب‌های ایمیل خارجی معمولاً برای ذخیره ایمیل‌ها بسیار کوچک هستند. به عنوان مثال، اگر فضای ایمیل در یک حساب خارجی پر باشد، Mail.ru هیچ پیام جدیدی را نمایش نمی دهد تا زمانی که وارد رابط ایمیل خارجی شوید و مستقیماً پیام ها را از آنجا حذف کنید تا فضا آزاد شود. علاوه بر این، ما نامه‌ها را به Mail متصل می‌کنیم به این امید که فضای زیادی برای ذخیره نامه‌های خود داشته باشیم، که ممکن است توسط منابع میزبانی محدود شود. بنابراین، علیرغم اینکه Mail.ru ظرفیت صندوق پستی تقریباً نامحدودی را ارائه می دهد، هنگام افزودن نامه از ناحیه دامنه دیگری (به عنوان مثال،)، منابع ایمیل اضافه شده شما در Mail.ru افزایش نمی یابد، اما همچنان میزبانی محدود با منابع خواهد بود. (در مورد ما، منابع primer.ru).

امکان افزودن نامه های دیگر به سرویس Mail وظیفه ما را در دو امتیاز از سه برآورده نکرد، در مجموع یک امتیاز کسب کرد.


درست است، Mail.ru راه دیگری برای اضافه کردن نامه خارجی، یا به طور دقیق تر، اتصال یا ورود به ایمیل خارجی دارد. به نظر می رسد این است:


این روش برای کار ما مناسب نیست، زیرا این یک جمع آوری نامه نیست، بلکه یک حالت کاربری است که به نامه متصل می شود و هر بار همه پوشه ها و نامه ها را در رابط ایمیل بارگیری می کند. اما در اینجا امکان اضافه کردن یک امضا و نام شخصی برای هر نامه وجود دارد، امکان ارسال نامه از ایمیل پیکربندی شده وجود دارد. حذف ایمیل ها از صندوق های پستی دانلود شده کار نمی کند. این یک جمع آوری نامه نیست.

مهم!برخی از کاربران به اشتباه فکر می کنند که اگر حروف در نامه نمایش داده شوند، ایمیلی که بارگیری از آن انجام شده است می تواند پاک شود. بیایید یک بار دیگر توجه کنیم که Mail.ru به عنوان یک نمایشگر ایمیل کار می کند و اگر نامه را پاک کنید، هم در صندوق پست اصلی و هم در ایمیل حذف می شود.

موضوع دوم Yandex با جمع آوری نامه خود. وظایف مشابه هستند: جمع آوری نامه، اختصاص امضا و نام به هر نامه، و حذف تمام نامه ها از صندوق پستی اضافه شده.

جمع‌آورنده نامه Yandex به روشی مشابه پیکربندی شده است، اما اگر نامه از سایتی مانند site.ru وصل شده باشد، باید تنظیمات بیشتری را مشخص کنید، به عکس صفحه مراجعه کنید.


سرویس Mail این کار را برای ما انجام داد، در حالی که Yandex پیشنهاد می کند تمام تنظیمات را به صورت دستی از نامه های شخص ثالث تنظیم کند. در اینجا هیچ چیز پیچیده ای وجود ندارد: در قسمت ورود نام کامل نامه را وارد می کنیم () ، در قسمت سرور فقط دامنه (site.ru) را وارد می کنیم ، بهتر است تمام تنظیمات دیگر را به طور پیش فرض رها کنید یا آنها را تغییر دهید. اگر می دانید چه کار می کنید. پس از افزودن موفقیت آمیز نامه، یک کتیبه ظاهر می شود:


برخلاف جمع‌آورنده نامه، Yandex پیشنهاد می‌کند انتخاب کند که آیا حروف اصلی را در صندوق پستی اضافه شده ذخیره کند یا خیر. از همه جنبه‌های دیگر، جمع‌آورنده نامه Yandex به روشی مشابه با Mail.ru کار می‌کند، می‌توان صندوق پستی را انتخاب کرد که از آن نامه ارسال شود. اما Yandex با امضای نامه ها مشکل مشابهی دارد: هیچ راهی برای تنظیم نام و امضای فردی برای هر صندوق پستی اضافه شده وجود ندارد.


با قضاوت بر اساس ناوبری، می توان برای هر صندوق پستی یک امضا جداگانه اضافه کرد، اما در واقعیت کار نمی کند. نامه را انتخاب کنید، نام و امضا را تجویز کنید، روی ذخیره کلیک کنید. تمام است، امضا ذخیره می شود و کار می کند، اما برای همه صندوق های پستی دیگر نیز ذخیره می شود، یعنی با اختصاص نام و امضا به یک صندوق پستی، شما به طور خودکار این تنظیمات را در همه نامه های ترکیب شده در Yandex تغییر می دهید. حتی اگر هر کادر دیگری انتخاب شود، اکنون امضا در همه جا یکسان خواهد بود.

در مجموع ، Yandex با جمع آوری و مرتب سازی نامه ها با موفقیت کنار آمد ، می تواند نامه های اصلی را از صندوق پستی اضافه شده حذف کند ، اما نمی تواند با امضاها کار کند! گردآورنده ایمیل Yandex نتوانست از عهده وظیفه ما برآید و از سه امتیاز دو امتیاز کسب می کند.


من می خواهم توجه داشته باشم که با "کاوش" در هر سه سرویس مونتاژ نامه، به نظر می رسد که Mail عملکرد خود را با عجله "درهم" کرده است. اگرچه اکثر کاربران را راضی می کند، اما، صادقانه بگویم، Mail یک جمع آوری نامه برای نمایش ایجاد کرد تا در رقابت رقابتی مورد توجه قرار گیرد. همه چیز به خوبی و بدون شکست کار می کند، اما اسمبلر از Mail با وظیفه ما کنار نیامد. چندین بلوک تبلیغاتی در رابط ایمیل وجود دارد، اما آنها در کار با حروف تداخلی ندارند.

در مورد Yandex که مدت‌ها پیش جمع‌آوری ایمیل را ایجاد کرد، به نظر می‌رسد که این صنعت خاص پشتیبانی نمی‌شود، زیرا رفع چنین عملکرد ساده (قابلیت اضافه کردن چندین امضا برای صندوق‌های پستی) برای چنین جستجوی قدرتمندی نباید دشوار باشد. موتور با این حال، Yandex عملکرد منحصر به فرد دیگری دارد که به شما امکان می دهد دامنه ها را به سرورهای dns آنها متصل کنید و بعداً نامه را ایجاد و پیکربندی کنید. اما چنین عملیات و تنظیماتی نیاز به دانش و زمان دارد. و اگرچه هیچ چیز پیچیده ای در آنجا وجود ندارد، در هر صورت، این برای اکثر کاربران Runet نیست. مزیت بزرگ- بدون تبلیغات در رابط ایمیل Yandex! منهای- محدودیت 10 صندوق پستی در جمع کننده نامه.

فینالیست و برنده، گردآورنده ایمیل از Google است، که با وجود این، با کار ما با صدای بلند کنار آمد محدودیت 5 جعبه

به تازگی نسخه دیگری از Mail.Ru Mail برای آیفون و آیپد منتشر شده است. به روز رسانی اصلی یک، اما قابل توجه است: توانایی جمع آوری تمام صندوق های پستی کاربر در یک مکان، یعنی در برنامه Mail.Ru Mail.

همه نامه ها در یک مکانبسیاری از ما چندین ایمیل داریم - برای کار، برای ثبت نام در انواع انجمن ها، سایت های کوپن و فروشگاه های آنلاین، و برای روح (بخوانید - برای برقراری ارتباط با دوستان، اقوام و غیره). در نسخه قبلی برنامه Mail.Ru، توسعه دهندگان اولین گام را برای ساده کردن مدیریت "باغ وحش" حساب ها برداشتند: آنها پشتیبانی از چندین صندوق پستی را اضافه کردند.

اکنون، در سرویس گیرنده Mail.Ru Mail، می توانید نه تنها با صندوق های پستی در این سرویس، بلکه با حساب های Gmail، Rambler، Outlook و سایر ارائه دهندگانی که از IMAP / POP3 پشتیبانی می کنند، کار کنید. جابجایی بین جعبه ها بسیار ساده است - فقط با یک کلیک. در حالی که یک کاربر در حال مرور یک حساب کاربری است، دیگران صبورانه منتظر نوبت خود هستند.

برنامه به روش خود ترتیب را در کشوهای مختلف تغییر نمی دهد. در هر یک از اکانت ها می توانید دقیقاً همان منطق کاری را که به آن عادت کرده اید ادامه دهید. به عنوان مثال، در رابط برنامه Mail.Ru، نام و ساختار پوشه ها، چک باکس ها و سایر تنظیمات صندوق پست در Gmail مانند نسخه بزرگ Gmail باقی می ماند. علاوه بر این، در برنامه، می توانید هر یک از حساب ها را به صورت جداگانه پیکربندی کنید: یک امضا تنظیم کنید، نمایش نمادها را فعال یا غیرفعال کنید، سیستم اعلان فشار را پیکربندی کنید.


اعلان های فشاریاعلان‌های فشار پیشرفته شایسته ذکر ویژه هستند. اولا (و این یکی از پاداش های اصلی برنامه است)، می توان آنها را حتی برای حساب های موجود در سرویس هایی که نمی توانند فشار ارسال کنند فعال کرد.

ثانیاً، می‌توان آن‌ها را دقیقاً همانطور که می‌خواهید پیکربندی کرد و با جزئیات مشخص کرد چه زمانی می‌آیند و چه چیزی را گزارش می‌کنند. این امکان وجود دارد که گیرندگان را با نام، پیام هایی که در روز و شب آماده خواندن آنها هستید (مثلاً نامه های مادرتان) یا دقیقاً از ساعت 9 تا 19:00 (به احتمال زیاد، نامه های مشتریان یا همکاران باشد) علامت گذاری کنید. ). می‌توانید هشدارها را برای حساب‌ها، پوشه‌ها یا گیرندگان خاص روشن یا خاموش کنید.

توسعه دهندگان با دقت دکمه ای را ارائه کرده اند که به شما امکان می دهد بلافاصله اعلان های مربوط به نامه های ارسالی از شبکه های اجتماعی یا خدمات کوپن را خاموش کنید. محتوای اعلان‌های فشار نیز تنظیم شده است: ممکن است بخواهید نام گیرنده یا موضوع نامه را به دلایل حفظ حریم خصوصی پنهان کنید.

واکنش سریع.برای کار راحت با حروف در برنامه، منوی اقدامات سریع وجود دارد. برای فراخوانی این دکمه های جادویی، کافی است روی پیام مورد نظر در لیست حروف، انگشت خود را از راست به چپ بکشید. با کمک آنها می توانید نامه را حذف کنید، کادر را علامت بزنید، آن را به پوشه دیگری منتقل کنید، آن را به هرزنامه ارسال کنید و غیره. تمام اقدامات با یک کلیک انجام می شود.

آواتارهای گیرندگان و خدمات به شما کمک می کنند تا در نامه پیمایش کنید. آنها در لیست حروف، هنگام خواندن و نوشتن نامه ها، و همانطور که قبلا ذکر شد، در اعلان های فشار قابل مشاهده هستند. هنگام خواندن و نوشتن نامه، کاربر آواتار فرستنده یا مخاطب و همچنین پیش نمایشی از پیوست ها را می بیند. اگر عکس‌ها یا نقاشی‌ها ضمیمه شده باشند، ریز عکس‌ها نمایش داده می‌شوند. به هر حال، می توانید پیوست ها را بدون خروج از صندوق نقدی مشاهده کنید، یعنی. درست در برنامه

ذخیره سازیذخیره سازی در مکان هایی که اینترنت خیلی خوب نیست، به عنوان مثال، در مترو مفید خواهد بود. صاحب یک تلفن هوشمند با سرویس گیرنده ایمیل Mail.Ru می تواند حتی در صورت عدم وجود شبکه، متن ها را بخواند و عکس ها را مشاهده کند.

نکات.برنامه ایمیل مورد نظر را پیشنهاد می کند، ارزش آن را دارد که اولین حروف را در نوار آدرس وارد کنید (به شرطی که حداقل یک بار برای این مخاطب نامه نوشته باشید - فرقی نمی کند در نسخه اصلی Mail باشد یا در برنامه) . علاوه بر این، مشتری، بنا به درخواست شما، مخاطبین تلفن را به لیست پاسخ دهندگان اضافه می کند.

بیایید عینی باشیم - برنامه ایمیل Mail.Ru برای ماندگاری ساخته شده است. و اگر قبلا از فشارهای فانتزی استفاده کرده اید، از آواتارها در لیست حروف و غیره لذت ببرید. تنها در صورت وجود یک صندوق پستی در Mail.Ru امکان پذیر بود، اکنون کاربران همان Mail.Ru می توانند صندوق های پست دیگری را در برنامه جمع آوری کنند (و کسانی که خدمات دیگر را ترجیح می دهند، حداقل مشتری را آزمایش کنند).

من مجموعه ای از مقالات را در مورد عملکرد جمع آوری نامه به یک صندوق ایمیل اصلی از هر صندوق دیگری که در هر سرویس پستی قرار دارد ادامه می دهم. در آخرین مقاله، ما در مورد راه اندازی مجموعه نامه در سرویس Yandex صحبت کردیم که به آسانی گلابی شلیک می شود. و در این مقاله من در مورد نحوه انجام همین کار در سرویس دیگری صحبت خواهم کرد که امروزه کمتر محبوب نیست - Mail.ru ، جایی که بسیاری هنوز صندوق ایمیل اصلی خود را نگه می دارند ، به عنوان مثال ، سرویس GMail مزایای واضحی دارد. (در مورد راه اندازی مجموعه نامه در Gmail توضیح داده شده است). اما همانطور که می گویند، به هر یک از خود و گاهی اوقات این فقط یک عادت است :)

راه اندازی مجموعه نامه در سرویس Mail.ru به سادگی، به عنوان مثال، در Yandex است. فقط چند مرحله ساده و همه چیز آماده خواهد شد، نامه از صندوق پستی که به یکی از آنها وصل کرده اید، در Mail شروع به جریان می کند.

روند تنظیم مجموعه نامه در سرویس Mail.ru

اول از همه، وارد حساب ایمیل خود شوید، جایی که نامه‌ها را از صندوق‌های ایمیل دیگر جمع‌آوری کرده و بخش «نامه‌ها» را باز کنید (ایمیل در آنجا قرار دارد).

حالا باید به تنظیمات ایمیل بروید. برای انجام این کار، روی دکمه "بیشتر" در بالا کلیک کنید و "تنظیمات" را انتخاب کنید.

همچنین می توانید تنظیمات را با کلیک بر روی آدرس ایمیل خود در گوشه سمت راست بالا و سپس انتخاب "تنظیمات ایمیل" باز کنید.

سپس به بخش «ایمیل از صندوق‌های پستی دیگر» بروید.

اولین پنجره برای اتصال صندوق پست الکترونیکی دوم باز می شود.

به شما یادآوری می کنم که دومین صندوق پست الکترونیکی که می خواهید نامه ها را از آن جمع آوری کنید می تواند در هر سرویسی قرار داشته باشد، نه فقط Mail!

در مثال این مقاله، ما اتصال صندوق پستی واقع در Yandex را در نظر خواهیم گرفت.

در این پنجره، باید نام کاربری و رمز عبور ایمیلی را که به آن متصل می کنید، مشخص کنید. اگر کادری که به آن متصل می‌کنید در یکی از سرویس‌های فهرست شده در زیر قرار دارد، روی دکمه مربوطه در بالا کلیک کنید، آدرس کامل ایمیل متصل را در زیر وارد کنید و روی «افزودن کادر» کلیک کنید:

اگر کادری که می خواهید به آن متصل شوید در سرویس دیگری (نه از لیست بالا) قرار دارد، روی دکمه «ایمیل دیگر» در بالا کلیک کنید، پس از آن باید آدرس کامل ایمیل متصل، رمز عبور را وارد کنید. از آن و روی "افزودن کادر" کلیک کنید.

اگر هنوز در ایمیل دوم خود وارد این مرورگر نشده اید، در پنجره بعدی باید لاگین و رمز عبور خود را از آن وارد کنید. مثال:

پس از آن، روی "Allow" کلیک کنید (به ایمیل Mail.ru اجازه می دهید از برخی از داده های ایمیل دوم متصل استفاده کند).

اگر همه چیز همانطور که باید پیش رفت، پیامی مبنی بر اضافه شدن کلکتور دریافت خواهید کرد. اکنون باید انتخاب کنید که کدام پوشه نامه را جمع آوری کند: در یک پوشه مخصوص ایجاد شده با نام ایمیلی که متصل کرده اید یا در صندوق ورودی. این به شما بستگی دارد، اما، به نظر من، زمانی که نامه های جمع آوری شده از یک صندوق پستی دیگر به یک پوشه جداگانه می رود، راحت تر است. به هر حال، می توان آن را با فیلتر کردن پیام ها پیکربندی کرد.

گزینه «اعمال فیلترها برای پیام‌های دریافتی» به این معنی است که تمام فیلترهایی که قبلاً در ایمیل اصلی خود به Mail پیکربندی کرده‌اید برای نامه‌های دریافتی از صندوق پستی متصل نیز اعمال می‌شود. غیرفعال کنید یا نه - شما تصمیم می گیرید.

تمام شد، جمع کننده نامه راه اندازی شد! اکنون، در عرض چند دقیقه (گاهی اوقات در صورت وجود تعداد زیادی حروف در نامه‌های متصل، فرآیند به تأخیر می‌افتد)، نامه‌های صندوق پست دوم به صندوق پست اصلی شما وارد می‌شود.

به این ترتیب، می‌توانید برای جمع‌آوری هر تعداد نامه که دوست دارید، متصل شوید.

چگونه می توان تمام حروف را از نامه های متصل به طور جداگانه مشاهده کرد؟

اگر هنگام تنظیم مجموعه نامه در Mail، اشاره کرده باشید که نامه ها باید در یک پوشه جداگانه با نام صندوق پستی متصل جمع آوری شوند، می توانید حروف را جداگانه مشاهده کنید. در این صورت این پوشه را باز کنید و تمام حروف لازم را مشاهده خواهید کرد. مثال:

اگر دریافت نامه‌ها را فوراً در یک پوشه جداگانه تنظیم نکرده‌اید، می‌توانید در هر زمان با باز کردن کلکتور ایجاد شده آن را تنظیم کنید (در ادامه در مورد آن بیشتر توضیح می‌دهید).

پیکربندی گردآورنده ایمیل ایجاد شده، غیرفعال کردن و فعال کردن آن

گاهی اوقات ممکن است لازم باشد تنظیمات مربوط به جمع‌آوری نامه را که در Mail ایجاد کرده‌اید، تغییر دهید، و همچنین آن را خاموش یا دوباره روشن کنید.

این را می توان در همان مکان در بخش "تنظیمات" - "ایمیل از صندوق های پست دیگر" انجام داد، جایی که در ابتدا جمع کننده نامه خود را ایجاد کردید.

در اینجا کلکتور ایجاد شده را خواهید دید. اگر می خواهید دوباره آن را خاموش یا روشن کنید، روی سوئیچ مربوطه کلیک کنید. اگر نیاز به باز کردن تنظیمات کلکتور دارید، روی «ویرایش» کلیک کنید.

و همان تنظیمات برای جمع آوری نامه باز می شود، همانطور که در مرحله ایجاد آن (نگاه کنید به).

در این مقاله، ما در مورد چیستی "پست نامه از صندوق های دیگر" و "جمع آوری نامه ها از سایر حساب ها" صحبت خواهیم کرد. بررسی و مقایسه خدمات ایمیل

با به روز شدن عملکرد سرویس های پستی، اخباری را در پایان این مقاله منتشر خواهیم کرد.

سرویس ایمیل Mail.ru، موتورهای جستجوی Yandex و Google چندین سال است که عملکردهای بسیار مفید و ضروری را ارائه می دهند که به شما امکان می دهد تمام حساب های ایمیل دیگر را در یک ایمیل ترکیب کنید. به عبارت دیگر، ارزش افزودن و پیکربندی تمام «ایمیل‌های» خود را یکبار می‌کند و مدیریت آن‌ها در یک پنجره بدون وارد کردن مداوم لاگین و رمز عبور امکان‌پذیر خواهد بود.

خدمات پستی مکانی بزرگ برای ذخیره تمام نامه های دریافتی، یک رابط کاربر پسند، عملکرد مدیریت خوب و موارد دیگر به ما ارائه می دهد. برای آزمایش قابلیت‌های سرویس‌های پستی فهرست‌شده، ما سه پارامتر را برای ارزیابی کار آنها مشخص می‌کنیم: 1) لازم است حساب‌های ایمیل مختلف، از جمله آنهایی که از سرویس‌ها و سایت‌های مختلف، از طریق یک سرویس گیرنده پست الکترونیکی استفاده می‌شوند، مدیریت شوند. 2) برای هر نامه یک امضا و نام شخصی داشته باشید. 3) پیام‌ها را از سرورهای آن دسته از حساب‌های ایمیلی که به ایمیل، yandex یا google mail اضافه شده‌اند حذف کنید.

وظیفه ما به این صورت است:

پس بیایید شروع کنیم. ما اولین نفری هستیم که این سرویس را از Mail.ru آزمایش می کنیم، که به ما می گوید: "شما می توانید نامه ها را از تمام صندوق های پستی خود در یک صندوق پستی در Mail.ru جمع آوری کنید.

مجموعه ای از ایمیل ها را از هر سروری که از پروتکل IMAP یا POP3 استفاده می کند، تنظیم کنید. برای افزودن ایمیل خارجی به غیر از @mail، @inbox، @list، @bk، باید حداقل یک ایمیل از قبل در سرورهای فهرست شده از پست وجود داشته باشد. به عبارت دیگر، ابتدا ایمیل را ثبت کنید و سپس حساب های ایمیل دیگری را اضافه کنید. فرآیند ثبت نام برای نامه ساده است، توصیف آن بی معنی است، اما اضافه کردن ایمیل های دیگر به این حساب ایمیل را شرح خواهیم داد.

در مرحله بعد، از شما خواسته می شود تا برای هر صندوق پستی که استفاده می کنید یک لاگین و رمز عبور وارد کنید، و ظرف 3 تا 5 دقیقه، "Mail Collector from mail" پوشه ای با نام نامه اضافه شده در کنار "صندوق ورودی" ایجاد می کند. ، "ارسال شده"، "هرزنامه" و موارد دیگر.

در واقع، جمع‌آوری نامه در عرض 10-15 دقیقه کار می‌کند و تمام حروف را از کادری که مشخص کرده‌اید به پوشه جدید ایجاد شده اضافه می‌کند. تمام نامه های دریافتی برای ایمیل جدید به این پوشه ارسال می شود، همچنین امکان ارسال نامه از صندوق پستی ضمیمه وجود خواهد داشت. هنگام ایجاد یک نامه جدید، فیلد "از" ظاهر می شود که در آن می توانید انتخاب کنید نامه از کدام صندوق پستی ارسال شود.

از مزایای سرویس پست الکترونیکی Mail.ru می توان به سهولت اضافه کردن و تنظیم صندوق های پست دیگر، بدون نیاز به تعیین پروتکل های مختلف (POP3، SMTP) اشاره کرد. این بسیار مهم است زیرا هر کاربر نمی داند چیست.

معایب Mail.ru این است که تعیین نام و امضا برای هر ایمیل جدید (هر ایمیل جدید غیر از ایمیل اصلی) غیرممکن است، یعنی نام و امضای نامه اصلی به آن توزیع می شود. هر آدرس و بس. یکی دیگر از معایب بزرگ این است که هنگام آپلود ایمیل در نامه، هیچ راهی برای حذف خودکار ایمیل های اصلی از سرور صندوق پستی پیوست شده وجود ندارد. چرا حذف پیام ها از سرور صندوق پستی اضافه شده بسیار مهم است؟ با این کار از پر کردن نامه ضمیمه شده جلوگیری می شود، زیرا. حساب‌های ایمیل خارجی معمولاً برای ذخیره ایمیل‌ها بسیار کوچک هستند. به عنوان مثال، اگر فضای ایمیل در یک حساب خارجی پر باشد، Mail.ru هیچ پیام جدیدی را نمایش نمی دهد تا زمانی که وارد رابط ایمیل خارجی شوید و مستقیماً پیام ها را از آنجا حذف کنید تا فضا آزاد شود. علاوه بر این، ما نامه‌ها را به Mail متصل می‌کنیم به این امید که فضای زیادی برای ذخیره نامه‌های خود داشته باشیم، که ممکن است توسط منابع میزبانی محدود شود. بنابراین، با وجود این واقعیت که Mail.ru اندازه صندوق پستی تقریبا نامحدودی را هنگام اضافه کردن نامه از یک منطقه دامنه دیگر ارائه می دهد (به عنوان مثال، [ایمیل محافظت شده]، منابع ایمیل اضافه شده شما در Mail.ru افزایش نمی یابد، اما با منابع میزبانی (در مورد ما، منابع primer.ru) محدود می شود.

امکان افزودن نامه های دیگر به سرویس Mail وظیفه ما را در دو امتیاز از سه برآورده نکرد، در مجموع یک امتیاز کسب کرد.

درست است، Mail.ru راه دیگری برای اضافه کردن نامه خارجی، یا به طور دقیق تر، اتصال یا ورود به ایمیل خارجی دارد. به نظر می رسد این است:

این روش برای کار ما مناسب نیست، زیرا این یک جمع آوری نامه نیست، بلکه یک حالت کاربری است که به نامه متصل می شود و هر بار همه پوشه ها و نامه ها را در رابط ایمیل بارگیری می کند. اما در اینجا امکان اضافه کردن یک امضا و نام شخصی برای هر نامه وجود دارد، امکان ارسال نامه از ایمیل پیکربندی شده وجود دارد. حذف ایمیل ها از صندوق های پستی دانلود شده کار نمی کند. این یک جمع آوری نامه نیست.

مهم!برخی از کاربران به اشتباه فکر می کنند که اگر حروف در نامه نمایش داده شوند، ایمیلی که بارگیری از آن انجام شده است می تواند پاک شود. بیایید یک بار دیگر توجه کنیم که Mail.ru به عنوان یک نمایشگر ایمیل کار می کند و اگر نامه را پاک کنید، هم در صندوق پست اصلی و هم در ایمیل حذف می شود.

موضوع دوم Yandex با جمع آوری نامه خود. وظایف مشابه هستند: جمع آوری نامه، اختصاص امضا و نام به هر نامه، و حذف تمام نامه ها از صندوق پستی اضافه شده.

جمع‌آورنده نامه Yandex به روشی مشابه پیکربندی شده است، اما اگر نامه از سایتی مانند site.ru وصل شده باشد، باید تنظیمات بیشتری را مشخص کنید، به عکس صفحه مراجعه کنید.

سرویس Mail این کار را برای ما انجام داد، در حالی که Yandex پیشنهاد می کند تمام تنظیمات را به صورت دستی از نامه های شخص ثالث تنظیم کند. در اینجا هیچ چیز پیچیده ای وجود ندارد: در قسمت ورود نام کامل نامه را وارد کنید ( [ایمیل محافظت شده]، در قسمت سرور فقط دامنه (site.ru) را وارد کنید، بهتر است تمام تنظیمات دیگر را به صورت پیش فرض رها کنید یا اگر می دانید چه کاری انجام می دهید آنها را تغییر دهید. پس از افزودن موفقیت آمیز نامه، یک کتیبه ظاهر می شود:

برخلاف جمع‌آورنده نامه، Yandex پیشنهاد می‌کند انتخاب کند که آیا حروف اصلی را در صندوق پستی اضافه شده ذخیره کند یا خیر. از همه جنبه‌های دیگر، جمع‌آورنده نامه Yandex به روشی مشابه با Mail.ru کار می‌کند، می‌توان صندوق پستی را انتخاب کرد که از آن نامه ارسال شود. اما Yandex با امضای نامه ها مشکل مشابهی دارد: هیچ راهی برای تنظیم نام و امضای فردی برای هر صندوق پستی اضافه شده وجود ندارد.

با قضاوت بر اساس ناوبری، می توان برای هر صندوق پستی یک امضا جداگانه اضافه کرد، اما در واقعیت کار نمی کند. نامه را انتخاب کنید، نام و امضا را تجویز کنید، روی ذخیره کلیک کنید. تمام است، امضا ذخیره می شود و کار می کند، اما برای همه صندوق های پستی دیگر نیز ذخیره می شود، یعنی با اختصاص نام و امضا به یک صندوق پستی، شما به طور خودکار این تنظیمات را در همه نامه های ترکیب شده در Yandex تغییر می دهید. حتی اگر هر کادر دیگری انتخاب شود، اکنون امضا در همه جا یکسان خواهد بود.

در مجموع ، Yandex با جمع آوری و مرتب سازی نامه ها با موفقیت کنار آمد ، می تواند نامه های اصلی را از صندوق پستی اضافه شده حذف کند ، اما نمی تواند با امضاها کار کند! گردآورنده ایمیل Yandex نتوانست از عهده وظیفه ما برآید و از سه امتیاز دو امتیاز کسب می کند.

من می خواهم توجه داشته باشم که با "کاوش" در هر سه سرویس مونتاژ نامه، به نظر می رسد که Mail عملکرد خود را با عجله "درهم" کرده است. اگرچه اکثر کاربران را راضی می کند، اما، صادقانه بگویم، Mail یک جمع آوری نامه برای نمایش ایجاد کرد تا در رقابت رقابتی مورد توجه قرار گیرد. همه چیز به خوبی و بدون شکست کار می کند، اما اسمبلر از Mail با وظیفه ما کنار نیامد. چندین بلوک تبلیغاتی در رابط ایمیل وجود دارد، اما آنها در کار با حروف تداخلی ندارند.

در مورد Yandex که مدت‌ها پیش جمع‌آوری ایمیل را ایجاد کرد، به نظر می‌رسد که این صنعت خاص پشتیبانی نمی‌شود، زیرا رفع چنین عملکرد ساده (قابلیت اضافه کردن چندین امضا برای صندوق‌های پستی) برای چنین جستجوی قدرتمندی نباید دشوار باشد. موتور با این حال، Yandex عملکرد منحصر به فرد دیگری دارد که به شما امکان می دهد دامنه ها را به سرورهای dns آنها متصل کنید و بعداً نامه را ایجاد و پیکربندی کنید. اما چنین عملیات و تنظیماتی نیاز به دانش و زمان دارد. و اگرچه هیچ چیز پیچیده ای در آنجا وجود ندارد، در هر صورت، این برای اکثر کاربران Runet نیست. مزیت بزرگ- بدون تبلیغات در رابط ایمیل Yandex! منهای- محدودیت در جمع آوری نامه برای 10 صندوق پستی.

فینالیست و برنده، گردآورنده ایمیل گوگل است که با وجود این، از پس وظیفه ما برآمد محدودیت 5 جعبه

البته همه چیز باید موازی شود. اینجاست که کتابخانه TPL DataFlow مورد علاقه من وارد عمل می شود.

ما نامه را از طریق POP3 دریافت می کنیم. همه "چیزهای شیک" IMAP در این کار اضافی هستند - لازم است منبع نامه را تا حد امکان سریع و آسان بگیرید و آن را روی سرور حذف کنید. POP3 برای چشم کافی است. ما از OpenPop.NET استفاده می کنیم.

به عنوان یک گزینه اضافی اختیاری، ما نظارت را به Zabbix اضافه می کنیم. (ما 24/7 کار می کنیم و سرعت فوق العاده ای ارائه می دهیم - باید این را دنبال کنید).

برو

ما یک برنامه کنسول معمولی ایجاد می کنیم. کنسول NuGet را باز کنید و تمام بسته های لازم را نصب کنید:

Install-Package Nlog Install-Package OpenPop.NET Install-Package TopShelf Install-Package Microsoft.TPL.DataFlow
به پوشه پروژه بروید، App.Debug.config و App.Release.config را ایجاد کنید. ما پروژه را از استودیو تخلیه می کنیم، کد آن را باز می کنیم (از این پس TopCrawler.csproj). به بخش تنظیمات اضافه کنید:

پیکربندی

app.config app.config


و در زیر یک هدف سفارشی برای MSBuild آمده است:

تبدیل هدف

$(TargetFileName).config


من شخصاً به این روش - به روش قدیمی - برای اضافه کردن تبدیل تنظیمات به محیط های جداگانه عادت کرده ام.
برای راحتی، من تنظیمات قوی تایپ را پیشنهاد می کنم. یک کلاس جداگانه پیکربندی را می خواند. (شما می توانید در مورد جنبه های نظری چنین تصمیمی در نظرات صحبت کنید). تنظیمات، گزارش‌ها، نظارت - دلیلی عالی برای پیاده‌سازی الگوی Singleton.

پوشه ای به همین نام در پروژه ایجاد کنید (باید نظم وجود داشته باشد). در داخل ما 3 کلاس ایجاد می کنیم - Config، Logger، Zabbix. لاگر ما:

متمرکز ساز

استاتیک کلاس Logger ( عمومی استاتیک NLog.Logger Log ( دریافت؛ مجموعه خصوصی؛ ) عمومی استاتیک NLog.Logger بایگانی ( دریافت؛ مجموعه خصوصی؛ ) static Logger() (Log = LogManager.GetLogger ("Global")؛ Archive = LogManager. GetLogger ("Archivator")؛ )


مانیتورینگ با Zabbix مستحق یک پست جداگانه است، بنابراین من فقط کلاسی را که عامل را پیاده‌سازی می‌کند در اینجا ترک می‌کنم:

زبیکس

فضای نام TopCrawler.Singleton(///

/// Singleton: کلاس فرستنده zabbix ///کلاس ایستا Zabbix (فرستنده استاتیک عمومی ZabbixSender ( دریافت؛ مجموعه خصوصی؛ ) Zabbix() استاتیک (فرستنده = جدید ZabbixSender(Config.ZabbixServer، Config.ZabbixPort);)) ساختار ZabbixItem (میزبان رشته عمومی؛ کلید رشته عمومی؛ مقدار رشته عمومی ; ) کلاس ZabbixSender ( ساختار داخلی SendItem (// ReSharper disable InconsistentNaming - Zabbix میزبان رشته عمومی حساس به حروف بزرگ و کوچک است؛ کلید رشته عمومی؛ مقدار رشته عمومی؛ ساعت رشته عمومی؛ // ReSharper restore InconsistentNaming) #pragma warning disable 0649 داخلی ZabbixResponse ( پاسخ رشته عمومی؛ اطلاعات رشته عمومی؛ ) #pragma warning restore 0649 #region --- Constants --- public const string DefaultHeader = "ZBXD\x01"؛ const string عمومی SendRequest = "Sender data"; const public int DefaultTimeout = 10000 ;#endregion #region --- فیلدها --- خصوصی فقط خواندنی DateTime _dtUnixMinTime = DateTime.SpecifyKind(new DateTime(1970, 1, 1), DateTimeKind.Utc); private readonly int _timeout; رشته فقط خواندنی خصوصی _zabbixserver; private readonly int _zabbixport; #endregion #region --- Constructors --- public ZabbixSender(string zabbixserver, int zabbixport): this(zabbixserver, zabbixport, DefaultTimeout) ( ) public ZabbixSender(string zabbixserver, int zabbixport, int timeout) ( _zabbixserver =zabbix; zabbixport؛ _timeout = مهلت زمانی (1) (itm))؛ ) رشته عمومی SendData(List lstData) ( سعی کنید ( var serializer = new JavaScriptSerializer( ؛ var values ​​= new list (lstData.Count)؛ values.AddRange(lstData.Select(itm => new SendItem ( میزبان = itm.Host، کلید = itm.Key، مقدار = itm.Value، ساعت = Math.Floor((DateTime.Now.ToUniversalTime() - _dtUnixMinTime). TotalSeconds).ToString(CultureInfo.InvariantCulture) ))); var json = serializer.Serialize(جدید ( درخواست = SendRequest, data = values.ToArray() )); var header = Encoding.ASCII.GetBytes(DefaultHeader); طول var = BitConverter.GetBytes((long)json.Length); var data = Encoding.ASCII.GetBytes(json); بسته var = بایت جدید. Buffer.BlockCopy (هدر، 0، بسته، 0، سربرگ. طول)؛ Buffer.BlockCopy (طول، 0، بسته، هدر. طول، طول. طول)؛ Buffer.BlockCopy(داده، 0، بسته، هدر. طول + طول. طول، داده. طول)؛ با استفاده از (var socket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) ( socket.Connect(_zabbixserver, _zabbixport)؛ socket.Send(packet); //Header var buffer = new byte(s ReceivD , buffer, 0, buffer.Length, _timeout؛ if (DefaultHeader != Encoding.ASCII.GetString(buffer, 0, buffer.Length)) Exception جدید ("سرصفحه نامعتبر") پرتاب می کند؛ //طول پیام بافر = بایت جدید ؛ ReceivData (سوکت، بافر، 0، بافر. طول، مدت زمان پایان)؛ var dataLength = BitConverter.ToInt32 (بافر، 0)؛ if (طول داده == 0) Exception جدید ("طول داده نامعتبر") پرتاب می کند؛ //بافر پیام = بایت جدید؛ ReceivData (سوکت، بافر، 0، بافر. طول، مدت زمان پایان)؛ پاسخ var = سریال ساز. Deserialize (Encoding.ASCII.GetString(buffer, 0, buffer.Length)); return string.Format("Response: (0), Info: (1)", answer.Response, answer.Info); ) ) catch (Exception e) (return string.Format("Exception: (0)"، e); ) ) private static void ReceivData(Socket pObjSocket، بافر بایت، int offset، int size، int timeout) ( var startTickCount = Environment.TickCount؛ var دریافت = 0؛ انجام دهید (اگر (Environment.TickCount > startTickCount + timeout) TimeoutException (دریافت شده += pObjSocket.Receive) را امتحان کنید (بافر، افست + دریافت، اندازه - دریافت، SocketFlags. هیچکدام) . ) در حالی که (دریافت شد< size); } #endregion } }


تنظیمات… وقت آن است که حداقل کاری جالب انجام دهید. ابتدا، در تنظیمات، جعبه هایی را که نظرسنجی می کنیم ذخیره می کنیم. دوم، تنظیمات DataFlow. اینطوری پیشنهاد میکنم:

تنظیمات



بنابراین، میزبان و پورت محل اتصال، کاربر و رمز عبور - همه چیز در اینجا واضح است. بعدی نوع جعبه است. فرض کنید این سرویس توسط بازاریابی (و همچنین سایر بخش ها) استفاده می شود. آن‌ها صندوق‌هایی دارند که پاسخ‌های خودکار به لیست‌های پستی و همچنین گزارش‌های هرزنامه FBL در آن قرار می‌گیرد. خود جعبه قبلاً نامه را دسته بندی می کند ، بنابراین برای چنین شرایطی فوراً نوع جعبه را تعیین می کنیم. با تنظیمات DataFlow، زمانی که شروع به ایجاد اشیاء کنیم، بیشتر مشخص خواهد شد. در اینجا ما بخش های خود را در پیکربندی خواهیم داشت. تعداد زیادی کتابچه راهنمای نحوه انجام این کار وجود دارد، بنابراین من فقط نتیجه را نشان می دهم:

تعریف انواع

#region --- انواع --- کلاس ایستا MailboxType ( رشته const عمومی Bo = "bo"؛ عمومی const string Crm = "crm"؛ public const string Fbl = "fbl"؛ string عمومی Bounce = "bounce"؛ ) class MailboxInfo ( رشته عمومی نوع ( get; set; ) رشته عمومی نام میزبان ( get; set; ) رشته عمومی کاربر ( get; set; ) رشته عمومی رمز عبور ( get; set; ) public int Port ( get; set; ) ) class DataBlockOptions ( عمومی int Maxdop ( get; set; ) public int BoundedCapacity ( get; set; ) public DataBlockOptions() ( Maxdop = 1; BoundedCapacity = 1; ) ) #endregion


ایجاد بخش ها

///

/// بخش پیکربندی سفارشی ///کلاس عمومی CustomSettingsConfigSection: ConfigurationSection ( عمومی CredentialsCollection CredentialItems ( دریافت (بازگشت پایه["CredentialsList"] به عنوان CredentialsCollection; ) ) عمومی DataBlockOptionsCollection DataFlowOptionsItems ( دریافت (بازگشت پایگاه["DataFlowOptions) OptionsList]


///

/// مجموعه سفارشی - لیست اعتبارنامه ///کلاس عمومی CredentialsCollection: ConfigurationElementCollection، IEnumerable (کنترل حفاظت شده ConfigurationElement CreateNewElement() (بازگرداندن CredentialsElement جدید(); ) شیء نادیده گرفته شده محافظت شده GetElementKey(ElementConfigurationElement) ((((CredentialsElement)element).نام کاربری؛ ) عمومی CredentialsElement this ( دریافت ( بازگشت BaseGet(sElement; ) IEnumerator جدید عمومی < Count; i++) { yield return BaseGet(i) as CredentialsElement; } } } /// /// مورد اعتبار سفارشی ///کلاس عمومی CredentialsElement: ConfigurationElement ( رشته عمومی نام میزبان ( دریافت (بازگشت پایه["نام میزبان"] به عنوان رشته؛ )) رشته عمومی نام کاربری (دریافت (بازگشت پایه["نام کاربری"] به عنوان رشته؛ ) ) رشته عمومی رمز عبور ( دریافت (پایه بازگشت ["گذرواژه"] به عنوان رشته؛ ) ) رشته عمومی نوع ( دریافت (بازگشت پایه["نوع"] به عنوان رشته؛ ) ) رشته عمومی پورت ( دریافت (بازگشت پایه["پورت"] به عنوان رشته؛ ) ) ) /// /// مجموعه سفارشی - لیست گزینه های DataBlock ///کلاس عمومی DataBlockOptionsCollection: ConfigurationElementCollection، IEnumerable (کنترل حفاظت شده ConfigurationElement CreateNewElement() ( برگرداند DataBlockOptionsElement (); ) IEnumerator جدید عمومی GetEnumerator() ( برای (var i = 0; i< Count; i++) { yield return BaseGet(i) as DataBlockOptionsElement; } } } /// /// مورد گزینه های سفارشی DataBlock ///کلاس عمومی DataBlockOptionsElement: ConfigurationElement ( رشته عمومی نام ( دریافت (بازگشت پایه["نام"] به عنوان رشته؛ )) رشته عمومی Maxdop ( دریافت (بازگشت پایه["maxdop"] به عنوان رشته؛ ) ) رشته عمومی BoundedCapacity ( دریافت (پایه بازگشت ["boundedcapacity"] به عنوان رشته؛ ) ) )


من اجرای کامل پیکربندی را نمی نویسم، قابل درک است که در طول فرآیند توسعه، پارامترهای مورد نیاز ما در آنجا اضافه می شوند.

تنظیمات سفارشی خود را به این صورت می خوانیم:

خواندن

لیست عمومی CredentialsList (دریافت؛ مجموعه خصوصی؛ ) فرهنگ لغت عمومی DataFlowOptionsList ( دریافت؛ مجموعه خصوصی؛ ) ... Static Config() ( سعی کنید ( var customConfig = (CustomSettingsConfigSection)ConfigurationManager.GetSection("CustomSettings"); //دریافت صندوق های پستی foreach (مورد متغیر در customConfig.Credentials)CredentialI. جدید MailboxInfo (نام میزبان = item.Hostname، Port = Convert.ToInt32 (item.Port)، User = item.Username، Type = item.Type، Password = item.Password))؛ //دریافت تنظیمات DataFlow foreach (مورد var در customConfig.DataFlowOptionsItems) DataFlowOptionsList.Add(item.Name, new DataBlockOptions (Maxdop = Convert.ToInt32(item.Maxdop)، BoundedCapacity = Convert.ToInt32(item.BoundedCapacity) (E.Log catch) (E.x)gception. Fatal("خطا در خواندن پیکربندی: (0)"، ex.Message)؛ پرتاب؛ ) )


به نوعی معلوم می شود که خیلی طولانی است و ما حتی به جالب ترین قسمت هم نرسیدیم.

بیایید فعلاً اتصال TopShelf، شمارنده های عملکرد، ارتباط با پایگاه داده را حذف کنیم و به کار بپردازیم! ما کلاس Crawler - هسته را ایجاد می کنیم. بیایید با خواندن نامه شروع کنیم:

Private volatile bool _stopPipeline; ... public void Start() ( do ( var getMailsTasks = _config.CredentialsList.Select(credentials => Task.Run(() => GetMails(credentials))).ToList(); foreach (وظیفه var در getMailsTasks) وظیفه .Wait(); Thread.Sleep(2000); ) while (!_stopPipeline)؛ //Stop Pipeline - منتظر تکمیل تمام نقاط پایانی باشید //خط لوله DataFlow در اینجا متوقف می شود اگر (_stopPipeline) Logger.Log.Warn("Pipeline دارای توسط کاربر متوقف شد"))
در اینجا تنبلی عوارض خود را گرفت و من تصمیم گرفتم که مزاحم نشوم - اگر حدود 20-30 جعبه وجود دارد، می توانید برای هر کدام یک کار اجرا کنید و نگران تعداد رشته ها نباشید. (من به شما اجازه می دهم که گوجه فرنگی پرتاب کنید.)

بیایید به خواندن ادامه دهیم:

Private void GetMails(MailboxInfo info) ( سعی کنید ( با استفاده از (var client = new Pop3Client()) (
بیایید بلافاصله زمان دسترسی به جعبه را محاسبه کنیم - برای تشخیص بارگذاری شبکه و سرور مفید خواهد بود.

//Get Zabbix Metrics var Stopwatch = new Stopwatch(); کرونومتر.Start(); //دریافت تعداد ایمیل client.Connect(info.Hostname, info.Port, false); client.Authenticate(info.User، info.Password); کرونومتر.Stop();
ارسال اطلاعات به Zabbix همه چیز ساده است - نام میزبان (همانطور که در Zabbix است)، کلید (دوباره، دقیقاً مانند Zabbix) و مقدار رشته را مشخص می کنیم.

//آن را به Zabbix بفرستید Zabbix.Sender.SendData(New ZabbixItem ( Host = Config.HostKey, Key = info.Type + Config.TimingKey, Value = stopwatch.ElapsedMilliseconds.ToString() )); Logger.Log.Debug("ارسال [(0)] زمان بندی به Zabbix: متصل به "(1)" به عنوان "(2)"، زمان بندی (3)ms"، info.Type، info.Hostname، info.User، کرونومتر.Milliseconds سپری شده)؛ varcount = client.GetMessageCount(); اگر (شمارش == 0) بازگشت; Logger.Log.Debug ("ما" (0) پیام های جدید در "(1)" داریم، تعداد، info.User)؛ //ارسال پیام ها به بلوک مرتب سازی برای (var i = 0; i< count; i++) { try { var mailInfo = new MessageInfo { IsSpam = false, Mail = client.GetMessage(i + 1), Type = MessageType.UNKNOWN, Subtype = null, Recipient = null, Mailbox = info }; Logger.Log.Debug("Download message from "{0}". Size: {1}b", info.User, mailInfo.Mail.RawMessage.Length);
خط لوله DataFlow زمانی ایجاد می شود که کلاس Crawler ایجاد شود. ما در نظر داریم که مرحله اول ما مرتب کردن نامه است.

در حالی که (!_sortMailDataBlock.Post(mailInfo)) Thread.Sleep(500);
می بینید که چقدر ساده است - خود نوار نقاله یکی است. همه کارهایی که نامه را می خوانند، پیام ها را یکی یکی در آنجا پرتاب می کنند. اگر بلوک مشغول باشد، Post به false برمی‌گردد و ما فقط منتظر می‌مانیم تا رایگان شود. جریان پس از آن در این زمان به کار خود ادامه می دهد. این همان چیزی است که من آن را موازی سازی بدون نگرانی می نامم.

پیام به نوار نقاله رفت، اکنون می توان آن را با خیالی آسوده در بایگانی RAW ذخیره کرد (بله، هر چیزی که می خوانیم در آرشیو فایل ذخیره می شود. خدمات پشتیبانی بعداً از ما تشکر می کند).

بیایید، برای مثال، چرخش بایگانی را تنظیم کنیم:

Nlog.config



سپس می توانید logStash را روی آن تنظیم کنید، اما این داستان دیگری است ...

//هر ایمیل را در بایگانی ذخیره کنید Logger.Log.Debug("Archive message"); Logger.Archive.Info(Functions.MessageToString(mailInfo.Mail)); ) catch (Exception ex) (Logger.Log.Error("Parse Error Email: (0)"", ex.Message); Functions.ErrorsCounters.Increment(); //به هر حال نامه را بایگانی کنید Logger.Log.Debug("پیام بایگانی ")؛ Logger.Archive.Info(Encoding.Default.GetString(client.GetMessageAsBytes(i + 1))); ) if (_config.DeleteMail) client.DeleteMessage(i + 1); اگر (_stopPipeline) شکسته شود. ) Logger.Log.Debug("Done with "(0)"", info.User); ) ) catch (Exception ex) (Logger.Log.Error("خطای عمومی - نوع: (0)، پیام: (1)"، ex, ex.Message); Functions.ErrorsCounters.Increment(); ) )
در اینجا از شمارنده های خطای استاتیک (بر اساس نوع جعبه) استفاده کردیم که در آن ErrorsCounters عبارت است از:

فرهنگ لغت استاتیک عمومی ErrorsCounters = دیکشنری جدید ();
و خود شمارنده ها را می توان به صورت زیر انجام داد:

Counter.cs

کلاس Counter ( خصوصی طولانی _counter; عمومی Counter() ( _counter = 0; ) public void Increment() ( Interlocked.Increment(ref _counter); ) public long Read() ( return _counter; ) public long Refresh() ( return Interlocked .Exchange(ref _counter, 0)؛ ) public void Add(Long value) (Interlocked.Add(ref_counter, value)؛ ) public void Set(طولانی) (Interlocked.Exchange(ref _counter, value) ;))


بیایید به سمت ایجاد یک خط لوله حرکت کنیم. فرض کنید جعبه هایی داریم که در آن پاسخ های خودکار ریخته می شود. چنین نامه هایی باید تجزیه شوند (چه نوع پاسخ خودکار، از چه کسی، با چه لیست پستی و غیره) و نتیجه را به فضای ذخیره سازی (DB) اضافه کنید. فرض کنید جعبه هایی وجود دارد که گزارش های FBL در آنها قرار می گیرد. ما بلافاصله چنین حروفی را به پایگاه داده اضافه می کنیم. همه نامه های دیگر "مفید" در نظر گرفته می شوند - آنها باید برای هرزنامه بررسی شوند و به یک سیستم خارجی، به عنوان مثال، CRM ارسال شوند.

همانطور که قبلاً فهمیدید، این مثال عمدتاً استفاده از جمع کننده را برای کارهای بازاریابی در نظر می گیرد - جمع آوری آمار در مورد تحویل نامه، اطلاعات مربوط به هرزنامه.

بنابراین، ما در مورد گردش کار تصمیم گرفته ایم. ما بلوک های لازم را در کلاس Crawler اعلام می کنیم:

Class MessageInfo ( bool عمومی IsSpam ( دریافت؛ تنظیم؛ ) پیام عمومی ایمیل ( دریافت؛ تنظیم؛ ) رشته عمومی زیرنوع ( دریافت؛ تنظیم؛ ) رشته عمومی گیرنده ( دریافت؛ تنظیم؛ ) نوع پیام عمومی نوع ( دریافت؛ تنظیم؛ ) صندوق پستی عمومی صندوق پستی ( دریافت؛ تنظیم؛ ) ) کلاس خزنده (//Pipeline private TransformBlock _sortMailDataBlock; TransformBlock خصوصی _spamFilterDataBlock؛ TransformBlock خصوصی _checkBounceDataBlock؛ TransformBlock خصوصی _identifyDataBlock; ActionBlock خصوصی _addToCrmDataBlock؛ ActionBlock خصوصی _addToFblDataBlock؛ ActionBlock خصوصی _addToBounceDataBlock؛ ...
ما یک روش مقداردهی اولیه ایجاد می کنیم و بلوک های خط لوله ایجاد می کنیم (ما از بخش های فوق العاده خود از تنظیمات برای مقداردهی اولیه بلوک ها استفاده می کنیم):

Public void Init() ( //*** ایجاد خط لوله *** //Create TransformBlock برای دریافت نوع پیام var blockOptions = _config.GetDataBlockOptions("_sortMailDataBlock"); _sortMailDataBlock = TransformBlock جدید (mail => SortMail(mail), new ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity )); //ایجاد TransformBlock برای فیلتر کردن هرزنامه blockOptions = _config.GetDataBlockOptions("_spamFilterDataBlock"); _spamFilterDataBlock = TransformBlock جدید (mail => FilterSpam(mail)، new ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop، BoundedCapacity = blockOptions.BoundedCapacity )); //Create TransformBlock برای مرتب کردن پرش ها blockOptions = _config.GetDataBlockOptions("_checkBounceDataBlock"); _checkBounceDataBlock = TransformBlock جدید (mail => BounceTypeCheck(mail)، ExecutionDataflowBlockOptions جدید ( MaxDegreeOfParallelism = blockOptions.Maxdop، BoundedCapacity = blockOptions.BoundedCapacity )); //ایجاد TransformBlock برای شناسایی صاحب پرش blockOptions = _config.GetDataBlockOptions("_identifyDataBlock"); _identifyDataBlock = TransformBlock جدید (mail => GetRecipient(mail)، new ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop، BoundedCapacity = blockOptions.BoundedCapacity )); //ایجاد ActionBlock برای ارسال نامه به CRM blockOptions = _config.GetDataBlockOptions("_addToCrmDataBlock"); _addToCrmDataBlock = ActionBlock جدید (mail => AddToCrm(mail)، new ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop، BoundedCapacity = blockOptions.BoundedCapacity )); //Create ActionBlock برای ارسال FBL به MailWH blockOptions = _config.GetDataBlockOptions("_addToFblDataBlock"); _addToFblDataBlock = ActionBlock جدید (mail => AddToFbl(mail)، new ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop، BoundedCapacity = blockOptions.BoundedCapacity )); //ایجاد ActionBlock برای ارسال Bounce به MailWH blockOptions = _config.GetDataBlockOptions("_addToBounceDataBlock"); _addToBounceDataBlock = ActionBlock جدید (mail => AddToBounce(mail)، new ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop، BoundedCapacity = blockOptions.BoundedCapacity ));
ما نوار نقاله را مطابق با طرح خود مونتاژ می کنیم:

//*** ساخت خط لوله *** _sortMailDataBlock.LinkTo(_spamFilterDataBlock, info => info.Type == MessageType.GENERAL); _sortMailDataBlock.LinkTo(_addToFblDataBlock، info => info.Type == MessageType.FBL); _sortMailDataBlock.LinkTo(_checkBounceDataBlock، info => info.Type == MessageType.BOUNCE); _sortMailDataBlock.LinkTo(DataflowBlock.NullTarget ()، info => info.Type == MessageType.UNKNOWN); /*STUB*/ _checkBounceDataBlock.LinkTo(_identifyDataBlock); _identifyDataBlock.LinkTo(_addToBounceDataBlock); _spamFilterDataBlock.LinkTo(_addToCrmDataBlock, info => !info.IsSpam); _spamFilterDataBlock.LinkTo(DataflowBlock.NullTarget ()، info => info.IsSpam); /*STUB*/
همانطور که می بینید، همه چیز بسیار ساده است - ما بلوک را با بلوک بعدی (با امکان تنظیم شرایط اتصال) وصل می کنیم. همه بلوک ها به صورت موازی اجرا می شوند. هر بلوک یک درجه موازی و ظرفیت دارد (با کمک ظرفیت می توانید صف قبل از بلوک را تنظیم کنید، یعنی بلوک پیام را دریافت کرده است، اما هنوز آن را پردازش نمی کند). بنابراین، می توان درجه بالایی از موازی سازی را برای عملیات "پیچیده" و طولانی، مانند تجزیه محتوای یک ایمیل، تنظیم کرد.

من سخت افزار DataFlow را توضیح نمی دهم، بهتر است همه چیز را در منبع اصلی TPL DataFlow بخوانید.

SortMailDataBlock.Completion.ContinueWith(t => ( if (t.IsFaulted) ((IDataflowBlock)_spamFilterDataBlock).Fault(t.Exception)؛ else _spamFilterDataBlock.Complete(); )); _sortMailDataBlock.Completion.ContinueWith(t => ( if (t.IsFaulted) ((IDataflowBlock)_addToFblDataBlock).Fault(t.Exception)؛ else _addToFblDataBlock.Complete(); )); _sortMailDataBlock.Completion.ContinueWith(t => ( if (t.IsFaulted) ((IDataflowBlock)_checkBounceDataBlock).Fault(t.Exception)؛ در غیر اینصورت _checkBounceDataBlock.Complete(); )); _spamFilterDataBlock.Completion.ContinueWith(t => ( if (t.IsFaulted) ((IDataflowBlock)_addToCrmDataBlock).Fault(t.Exception)؛ else _addToCrmDataBlock.Complete(); )); _checkBounceDataBlock.Completion.ContinueWith(t => ( if (t.IsFaulted) ((IDataflowBlock)_identifyDataBlock).Fault(t.Exception)؛ else _identifyDataBlock.Complete(); )); _identifyDataBlock.Completion.ContinueWith(t => ( if (t.IsFaulted) ((IDataflowBlock)_addToBounceDataBlock).Fault(t.Exception)؛ else _addToBounceDataBlock.Complete(); )); )
همه چیز، در واقع، خط لوله از قبل در حال اجرا است، می توانید پیام هایی را به آن ارسال کنید. تنها باقی مانده است که با اضافه کردن روش شروع، آن را متوقف کنیم:

شروع کنید

Public void Start() ( do ( var getMailsTasks = _config.CredentialsList.Select(credentials => Task.Run(() => GetMails(credentials))).ToList(); foreach (var task در getMailsTasks) task.Wait( Thread.Sleep(2000)؛ while (!_stopPipeline)؛ //Stop Pipeline - منتظر تکمیل تمام نقاط پایانی باشید _sortMailDataBlock.Complete(); _addToCrmDataBlock.Completion.Wait(); _addToFblDataBlock.Completion.WataBlock. .Completion.Wait(); if (_stopPipeline) Logger.Log.Warn("خط لوله توسط کاربر متوقف شده است")؛ )


بریم سراغ نمایندگان.
مرتب سازی ... خوب، بیایید بگوییم همه چیز برای ما ساده است (ما همیشه برای پیچیده کردن آن زمان خواهیم داشت):

Private MessageInfo SortMail(MessageInfo mail) ( switch (mail.Mailbox.Type) ( case MailboxType.Crm: mail.Type = MessageType.GENERAL; break; case MailboxType. Bounce: mail.Type = MessageType.boxy.BOUNCE; Fbl: mail.Type = MessageType.FBL; break; ) ایمیل را برگرداند;)
فیلتر اسپم این برای تکالیف است - از SpamAssassin استفاده کنید.
این نماینده است:

Private MessageInfo FilterSpam(MessageInfo mail) (//TODO: افزودن ایمیل بازگشتی منطقی SpamAssassin؛ )
و کلاس هایی برای کار با SpamAssassin API (لینک پروژه).
و به تجزیه حروف می پردازیم. ما پاسخ های خودکار را تجزیه می کنیم. اینجاست که MEF وارد عمل می شود.
ما یک پروژه (dll) با رابط برای پلاگین های خود ایجاد می کنیم (بیایید رابط ها را فراخوانی کنیم).
افزودن یک رابط:

رابط عمومی ICondition ( رشته چک (پیام mimeMessage)؛ ) رابط عمومی IConditionMetadata ( نوع نوع ( دریافت ؛ ) )
و همه چیز. TopCrawler ما به این پروژه بستگی دارد و پروژه پلاگین نیز از آن استفاده خواهد کرد.
یک پروژه جدید (همچنین یک dll) ایجاد کنید، بگذارید آن را Conditions بنامیم.
انواع پاسخ های خودکار را اضافه کنید:

#region --- انواع --- کلاس ایستا BounceType ( رشته const عمومی Full = "BounceTypeFull"; public const string Timeout = "BounceTypeTimeout"; public const string Refused = "BounceTypeRefused"; string عمومی NotFound = "BounceTypeFound" const string Inactive = "BounceTypeInactive"؛ const string عمومی OutOfOffice = "BounceTypeOutOfOfOffice"؛ string عمومی HostNotFound = "BounceTypeHostNotFound"؛ string عمومی NotAuthorized = "BounceTypeOutOfOfOffice = "BounceTypeOutOfOfOffice";
و کلاس هایی که رابط ما را پیاده سازی می کنند:

کلاس عمومی ConditionNotFound1: ICondition (رشته عمومی را بررسی کنید(پیام mimeMessage) (اگر (!mimeMessage.MessagePart.IsMultiPart) null برگرداند؛ الگوی رشته const = "Diagnostic-Code:.+smtp.+550"؛ var regexpat = new regexpat , RegexOptions.IgnoreCase)؛ mimeMessage.MessagePart.MessageParts.Any(part => part.ContentType.MediaType == "message/delivery-status" && regexp.IsMatch(part.GetBodyAsText:Nollt(unt) ; ) ) ... کلاس عمومی ConditionTimeout2: ICondition (بازگشت BounceType.Timeout؛ ) ...
همانطور که متوجه شدید، همه چیز به ویژگی ها مربوط می شود. با کمک آنها افزونه ها بارگذاری می شوند.
ما به پروژه خود باز می گردیم و افزونه ها را بارگذاری می کنیم:

Class Crawler ( ... //Plugins public IEnumerable > BounceTypeConditions ( get; set; ) void خصوصی LoadPlugins() ( امتحان کنید ( var container = new CompositionContainer (new DirectoryCatalog(_config.PluginDirectory), true); container.ComposeParts(this); ) catch (Exception ex) (Logger.Log .Error("Unable to load plugins: (0)"، ex.Message); ) ) ...
LoadPlugins را در سازنده کلاس خود می کشیم. من در مورد مکانیسم بارگذاری جزئیات توضیح نمی دهم - گوگل بهتر عمل خواهد کرد.

بیایید به نماینده اعتبارسنجی نوع Bounce خود برویم. شرایط به نوبه خود اعمال خواهد شد تا زمانی که اولین - روش انحصاری - کار کند:

Private MessageInfo BounceTypeCheck(MessageInfo mailInfo) ( سعی کنید ( foreach (شرط var در BounceTypeConditions) ( var res = condition.Value.Check(mailInfo.Mail)؛ اگر (res == null) ادامه دهید؛ mailInfo.Subtype = res؛ Logger. .Debug("شرط نوع جهش [(0)] برای پیام [(1)] فعال شد، شرط. فراداده. نوع، mailInfo.Mail.Headers.MessageId؛ شکست؛ ) ) catch (Exception ex) (Logger.Log .Error("مشخص نشد نوع پرش برای پیام "(0)": (1)"، mailInfo.Mail.Headers.MessageId، ex.Message)؛ Logger.ErrorsCounters.Increment(); ) mailInfo را برمی گرداند؛ )
بنابراین، اگر یک منطق جدید ظاهر شود، کافی است یک کلاس جدید با پلاگین هایی که رابط ما و - voila را پیاده سازی می کند به پروژه اضافه کنیم! من نمونه ای از افزونه دوم را برای تعیین فرستنده نامه ضمیمه نمی کنم - بنابراین این یک پست طولانی است (سرور خود پاسخ خودکار را ایجاد کرده است، بنابراین فرستنده نیز باید از سرصفحه های پیام تجزیه شود).

با رکورد نتایج در یک DB بیش از حد هر چیز غیر معمول است. به عنوان مثال، مانند این:

Private void AddToBounce(MessageInfo mail) ( امتحان کنید ( MailWH.BounceAdd(mail); Functions.ProcessedCounters.Increment(); Functions.Log.Debug("ارسال Bounce to MailWH"); ) catch (Exception ex) ( Functions.Log. خطا("خطا در ذخیره پیام پرش "(0)" به MailWH: (1)"، mail.Mail.Headers.MessageId، ex.Message); Functions.ErrorsCounters.Increment(); ))

پرش افزودن

عمومی استاتیک طولانی BounceAdd(پیام MessageInfo) (با استفاده از (var conn = SqlConnection جدید(ConnectionString)) با استفاده از (var cmd = new SqlDataAdapter("BounceAdd"، conn)) ( var body = message.Mail.FindFirstPlainTextVersion(=?) message.Mail.FindFirstHtmlVersion().GetBodyAsText(): message.Mail.FindFirstPlainTextVersion().GetBodyAsText(); var outId = new SqlParameter("@ID", SqlDbType.BigInt) ( Direction.dutelDiect.dutel) CommandType = CommandType.StoredProcedure;cmd.SelectCommand.Parameters.Add(new SqlParameter("@RawMessage"، message.Mail.RawMessage)); ؛ cmd.SelectCommand.Parameters.Add(new SqlParameter("@Subject"، message.Mail.Headers.Subject ?? "")); cmd.SelectCommand.Parameters.Add(SqlParameter جدید("@MessageID"، message.Mail .Headers.MessageId ?? "")); cmd.SelectCommand.Parameters.Add(new SqlParameter("@AddressTo"، message.Mail.Headers.To.Address ?? "")); cmd.SelectComm and.Parameters.Add(new SqlParameter("@AddressFrom"، message.Mail.Headers.From.Address ?? ""))؛ cmd.SelectCommand.Parameters.Add(new SqlParameter("@DateRecieved"، DateTime.Now)); cmd.SelectCommand.Parameters.Add(new SqlParameter("@BounceTypeSysName"، (object)message.Subtype ?? DBNull.Value)); cmd.SelectCommand.Parameters.Add(new SqlParameter("@SourceFrom", (object)message.Recipient ?? DBNull.Value)); // TODO: افزودن پشتیبانی ListId cmd.SelectCommand.Parameters.Add(new SqlParameter("@ListId", DBNull.Value)); cmd.SelectCommand.Parameters.Add(outId); conn.open(); cmd.SelectCommand.ExecuteNonQuery(); بازگشت outId.Value تا زمانی؟ ?? 0; ))


متاسفم که وقت نکردم TopShelf را نشان دهم - پست در حال حاضر خیلی پف کرده است.

نتیجه گیری

در این آموزش یاد گرفتیم که کار جمع آوری نامه ممکن است به این راحتی نباشد. هسته توسعه‌یافته به شما اجازه می‌دهد تا به سرعت مراحل فرآیند جدید - بلوک‌های DataFlow را بدون تأثیرگذاری بر منطق موجود اضافه کنید. زیرسیستم پلاگین به شما امکان می دهد تا به سرعت منطق تجزیه اسکریپت مانند ایجاد کنید، و DataFlow خود همه محاسبات را موازی می کند (و ما این توانایی را داریم که به صورت انعطاف پذیر چند رشته ای را برای یک ماشین خاص پیکربندی کنیم). TopShelf به ما این امکان را می دهد که سرویس را هم در حالت سرویس و هم در حالت کنسول اجرا کنیم تا اشکال زدایی آسان تر شود.

فوه ... اگر علاقه دارید، به شما می گویم که چگونه آن را در ریل های Continious Integration قرار دهید، ساخت خودکار را راه اندازی کنید و از طریق VS Release Management منتشر کنید.

برچسب ها: اضافه کردن برچسب

برترین مقالات مرتبط