‫راهی برای اضافه کردن دستی header به ایمیل‌ها

header بخشی از اطلاعات موجود در یک ایمیل است که با کمک آن می‌تواند قابلیت‌های زیادی به یک ایمیل بخشید. مثلا با اضافه کردن هدر خاصی به یک ایمیل می‌توان آن را به عنوان یک ایمیل ECE معتبر شناساند. خواندن هدر ایمیل‌های وارده تقریبا از همه برنامه‌های ارسال/دریافت ایمیل و کلاس‌های کار با ایمیل در دات نت امکان پذیر است. اما اضافه کردن هدر از طریق برنامه‌های ارسال/دریافت یا سرویس دهنده‌های ایمیل مثل جی میل و یاهو کار چندان ساده‌ای نیست. بعد از مدت‌ها گشت و گذار و تست کردن‌های مختلف فهمیدم که می‌توان با Customize کردن Thunderbird این کار را کرد. روش این کار در اینجا گفته شده است. من با کمک یک اکانت جی میل و Mozilla Thunderbird موفق شدم بدون هیچ مشکلی هدر مورد نظر خودم را به ایمیلم الصاق و آن را ارسال کنم. البته حتما می‌دانید که هدف از این کار تست دستی دبیرخانه‌هایی است که در دریافت ایمیل‌های دارای هدر ECE مشکل دارند.

اضافه کردن هدرهای دلخواه از طریق «مرغ طوفان»‏

این هم سورس تولیدی:

Message-ID: <48E8B367.9090709@gmail.com>
Date: Sun, 05 Oct 2008 16:00:31 +0330
From: ECE Tester <ece.tester@gmail.com>
User-Agent: Thunderbird 2.0.0.12 (Windows/20080213)
MIME-Version: 1.0
To: afshar.mohebbi@gmail.com
Subject: testing ece
X-ECE_SEND: 1.01


پ. ن.: Thunderbird برای ارسال فایل به همراه نامه مشکلاتی دارد که برای رفع
آن باید از این راه حل استفاده کرد.

Comments

  1. Eftekhari

    سلام
    امكان دارد راجع به ارسال Email به شكل Multipart و براساس پروتكل ECE توضيحاتي بدهيد؟
    من فايل Xml ام آماده است و آدرس هاي ميل سرور و Username و Pass آن و آدرس فرستنده و گيرنده را دارم ولي نميدانم چطور ميشود يك Email براساس پروتكلEce فرستاد ؟ آيا نرم افزار خاصي دارد يا فقط افزودن Header است ؟
    آيا ارسال Attachment كد يا Libaray يا Reference خاصي ميخواهد؟

  2. افشار محبی

    برای فقط ارسال ایمیل به هیچ چیزی غیر از دات‌نت نیاز ندارید. من از کلاس Attachment برای ارسال الصاقیه و از mail.Headers.Add برای افزودن هدرهای مورد نظرم استفاده می‌کنم. البته ممکن است بعضی کارهای کوچولوی دیگری هم لازم شود.

  3. Eftekhari

    با سلام
    ببخشيد پس MIME Client كه شما از آن در پروژه استفاده كرده ايد به چه درد ميخورد؟

    با چي Header‌اضافه ميكنيد و با چي Email Multipart مي فرستيد؟

    شايد درست متوجه نشدم اگر ممكن است كمي مشروح تر توضيح دهيد و اگر صلاح دانستيد Email بزنيد

  4. افشار محبی

    فکر می‌کنم در مورد MimeClient اشتباه کوچکی کرده باشم! من از MimeClient برای دریافت ایمیل از صندوق پست الکترونیکی استفاده می‌کنم چون در دات نت راهی برای دریافت ایمیل وجود ندارد. تعداد زیادی component و کتابخانه هم برای این کار وجود دارند که خیلی از آنها کار ما را راه نمی‌انداخت ولی MimeClient همه کارها را به خوبی انجام می‌دهد.
    برای ارسال ایمیل و اضافه کردن هدرها هم از همان کلاس SmtpClient دات نت و متود .Headers.Add استفاده می‌کنم یعنی برای ارسال ایمیل به چیزی بیش از کلاس SmtpClient دات نت نیازی نیست. در مورد email multipart هم با این که دقیقا نمی‌دانم چیست ولی می‌دانم که خود دات نت آن را handle می‌کند.

  5. Eftekhari

    من براي ارسال Email از همان راه شما يعني stmpclient استفاده كردم ولي در اين ساختار من چيزي براي Attach كردن Xml ساخته شده پيدا نكردم .
    يك پارامتر Attachments دارد كه Get انجام ميدهد نه Set.
    سوال من اين است كه چطور فايل xml خود را Attach كرديد ؟
    منظورم از يك Email Multi part همان ارسال فايل همراه Email است و يا MIMe
    Mulitpart Internet Mail Extensions

    كد من اين است ولي نميتوانم جايي attachment را بفرستم

    public static void SendSmtpMail(string SmtpServer, string UName, string PW, string MyTo, string MyFrom, string MySubject, string MyBody)
    //set username and password and server name of mail server
    {
    SmtpClient smtp = new SmtpClient(SmtpServer);
    MailMessage mssg = new MailMessage(MyFrom, MyTo, MySubject, MyBody);
    smtp.Credentials = new System.Net.NetworkCredential(UName, PW);
    smtp.Send(mssg);

    }

  6. افشار محبی

    Attachmentها را باید به MailMessage اضافه کنید نه SmtpClient. کلاس SmtpClient فقط برای ارسال به کار می‌رود. در مورد کد خودتان باید چنین چیزی بنویسید:
    mssg.Attachments.Add(…)

    کد کامل‌تر به این شکل است:
    MailMessage msg = new MailMessage(“somone@ece-lovers.com”, “somebody@ece-lovers.com”);
    string xmlFileName = @”c:my_ece_protocl_xml_file.xml”;
    Attachment attach =new Attachment(xmlFileName);
    msg.Attachments.Add(attach);

    SmtpClient client = new SmtpClient();
    client.Send(msg);

  7. Eftekhari

    با تشكر از توجه شما
    يك سوال ديگر و آنهم اينكه براي افزودن هدرها من دو تا Document دارم كه در هر دو آنها فقط ذكر شده كه يك هدر براي ذكر پروتكل استفاده شده الزامي است و اطلاعات ديگري راجع به ساير هدرها نداده است .
    شما كه يكبار اين كار را انجام داده ايد ميتوانيد بگوييد بر اساس استانداردهاي پروتكل ، آيا بايد هدر خاصي داشته باشيم يا خير؟
    مثلا اولويت نامه يا مسير فايل يا زمان ارسال ؟

  8. افشار محبی

    در کل پروتکل فقط از دو هدر استفاده می‌شود یکی برای نامه‌های ارسالی و دیگری برای رسیدها. از این هدرها هم فقط برای شناساندن ایمیل‌ها به عنوان پروتکل استفاده می‌شود. این کار به این خاطر انجام می‌شود که برنامه‌ای که ایمیل‌ها را می‌خواند بیخودی بین ایمیل‌های مختلف و غیر پروتکلی گیج نشده و فقط آنهایی را پردازش کند که متعلق به پروتکل هستند.
    هدری که به ایمیل‌های حاوی ایکس‌ام‌ال نامه «ارسالی» اضافه می‌شود X-ECE_SEND: 1.01 است و هدری که به ایمیل‌های حاوی فایل ایکس‌ام‌ال «رسید» اضافه می‌شود X-ECE_RECEIPT: 1.01 است.

  9. Eftekhari

    براي دريافت Emailگفتيد كه از MimeClient استفاده مي كنيد كه بصورت opensource در ‍Codeproject وجود دارد . تنها چيزي كه من جستجو كردم و پيدا كردم يك لينك Pop3Mailclient است كه پس از Download يك پروژه .net در اختيار ما قرار ميدهد .
    داخل اين پروژه فايلي بنام Pop3MimeClient دارد كه توابع getEmail را داراست
    آيا منظور شما همين است ؟

  10. افشار محبی

    اسم پروژه Pop3MimeClient است و دارای تابعی به اسم getEmail با امضای زیر است:
    public bool GetEmailIdList(out List int EmailIds)
    (علامت کوچکتر و بزرگتر دور int به خاطر محدودیت‌های blogger برداشته شده است)
    فکر می‌کنم درست پیدا کردید.

  11. eftekhari

    ممنون از توجه شما

    آيا همه Pop3Mail ها روي پورت 25 هستند؟
    و چگونه ميشود پورت و وجود Secure Socket layer يك Mailserver را چك كرد؟

  12. افشار محبی

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

  13. eftekhari

    با سلام
    وقتي من به Mail server مورد نظرم وصل ميشوم اين پيغام را ميدهد :
    Server Webmail.mysite.com not ready to start AUTHORIZATION.
    220 mail1.myprovidermailserver.com
    چطور آنرا حل كنم ؟

  14. افشار محبی

    اول باید بتوانید از طریق برنامه‌هایی مثل MS Outlook یا Thunderbird به اکانت مورد نظرتان وصل شوید در صورتی که به مشکل برتخورده و توانستید هم ایمیل بفرستید و هم ایمیل بگیرید آن وقت کارتان را در سی‌شارپ ادامه دهید. در غیر این صورت اول باید مشکلتان را با ISP سرویس دهنده حل کنید.

  15. eftekhari

    ارسال و دريافت از طريق سايت اينترنتي و webmail فايده ندارد؟

    البته Error اصلي را در خط authentication مي گيرد ولي Description آن a problem in SSL authentication است .

  16. eftekhari

    ضمنا در outlook وصل شدم ولي با تيك
    authentication در قسمت advance – Outgoing
    ولي متاسفانه با برنامه مشكل دارم.

  17. eftekhari

    از طريق مثال خود Code project ‌به اكانت Gmail‌خودم وصل شدم و مشكلي نبود (‌فكر كنم بايد با Isp ميل قبلي ام مشكلم را حل كنم )

    در حال حاضر يك ليست با محتويات emailam دارم ولي به محتويات آن نمي توانم دسترسي داشته باشم .

  18. افشار محبی

    ۱- ارسال و دریافت از طریق وب کمکی به حل مشکل نمی‌کند.
    ۲- اولین باید مشکل را با MS Outlook حل کنید.
    ۳- از متودهای دیگر برای دریافت «میل» استفاده کنید.

  19. eftekhari

    سلام
    فكر ميكنم به مشكل جدي خوردم .
    همه ايميل هايي كه تحت يك ISP خاص هستند موقع كانكت شدن به آن Authentication error ميدهد در حاليكه وقتي با مسئول آن تماس گرفتم گفت كه SSL ندارند و روي همان پورت 25 كار ميكنند و حتي براي اينكه مبادا روي شبكه اينترانت ما برخي پورت ها مشكل داشته باشد از منزل هم اين كد را امتحان كردم ولي همان مشكل را دارد . با Outlook هم به اين اكانت ها وصل ميشوم البته با زدن تيك authentication در قسمت Advance ان . همينطور به ايميل هاي Gmail به راحتي وصل ميشوم

    لطفا اگر چيزي به نظرتان ميرسد بگوييد .
    ممنون

  20. افشار محبی

    راستش این از آن مشکلاتی هست که به دلیل نداشتن تسلط کافی روی موضوع مجبور هستیم کل مسئله را یک جور دیگر حل کنیم. مثل بعضی وقت‌ها که یک تنظیم خاص ویندوز را بلد نیستیم و به خاطرش ویندوز را از اول نصب می‌کنیم!
    در این مورد خاص شاید شما هم مجبور شوید ISPتان را عوض کنید!! البته قبل از استفاده از این جور راه حل‌ها باید بگویم تا آنجا که می‌دانم اگر در Outlook هم مجبور به تیک زدن authentication می‌شوید یعنی این که SSL یا یک مزاحم دیگر سر راه وجود دارد و باید سر این موضوع با ISPتان چانه بزنید. دقت کنید که خود شماره پورت به تنهایی به معنی داشتن یا نداشتن SSL نیست. یعنی روی پورت ۲۵ هم می‌توان SSL داشت.

    موفق باشید

  21. eftekhari

    سلام
    نميدانم اين از اشتباه و بي تجربگي من بود يا عدم اطلاع ISP كه پورت 25 را معرفي كرده بود . ولي بهرحال اينطور حل شد كه من بجاي پورت 25 پورت 110 را براي Pop استفاده كردم و كاملا حل شد .
    بعدا از يك مسئول سرور پرسيدم و گفت كه پورت 25 را معمولا براي Smtp استفاده ميكنند و پورت 110 را براي Pop.
    در ميل سرورهاي بزرگ مثل جي ميل ، سرور جداگانه قرار ميدهند.نميدونم تا چه حد اين حرف درسته ولي
    بهرحال مشكلم حل شد . ممنون از توضيحات و كمك شما .

  22. eftekhari

    با سلام
    يك سوال!
    پس از تست بين دبيرخانه ما و شركت ديگري مشخص شد كه دبيرخانه ايشان فقط فايل هايي با اسم وپسوند ECE_attribute.xml را ميخواند!
    آيا نبايد هر نامه اي با هدر پروتكل را بخواند؟ مگر نبايد وابسته به اسم فايل نباشد؟
    آيا در تعريف پروتكل چيزي براي نامگذاري فايل الصاقي ايميل ذكر شده؟؟؟
    بعد هم اينكه كد منحصر بفرد فرستنده و گيرنده هرچيزي ميتواند باشد؟ يا ما بايد كد منحصر بفرد گيرنده را از خود آنها بخواهيم؟

    با تشكر!

  23. افشار محبی

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

  24. Bahmani

    سلام به شما دوست عزيز.
    ضمن تشكر از پاسخگويي خالصانه شما، من يك استفاده كننده از "اي سي اي" هستم كه بنا به دلايلي، اتوماسيونمون رو نميتونم آن لاين به اينترنت وصل كنم و بايدايكس ام ال توليدي رو بصورت دستي به مقصد ارسال كنم. ولي مشكل افزودن هدر دارم. آيا امكان داره يك برنامه كوچيك اجرايي كه مشخصات ايميل خودم و مقصد و همچنين فايل ايكس ام ال مربوطه رو بگيره(حتي الامكان با قابليت خواستن يوزرنيم و پسورد در ابتداي ورود كه همان يوزر و پسورد ايميل خودمونه و همچنين ذخيره اطلاعات وارد شده بصورت كدشده كه پس از ورودهاي بعدي به برنامه نيازي به ورود مجدد اطلاعات ثابت نباشد) و اونو با انتخاب هدر مناسب (ارسالي، رسيد يا …) به مقصد ارسال كنه در اختيارم بذارين؟ قبلا از همكاريتون سپاسگزارم.
    ايميل من: y.bahmani@gmail.com

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *