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
سلام
امكان دارد راجع به ارسال Email به شكل Multipart و براساس پروتكل ECE توضيحاتي بدهيد؟
من فايل Xml ام آماده است و آدرس هاي ميل سرور و Username و Pass آن و آدرس فرستنده و گيرنده را دارم ولي نميدانم چطور ميشود يك Email براساس پروتكلEce فرستاد ؟ آيا نرم افزار خاصي دارد يا فقط افزودن Header است ؟
آيا ارسال Attachment كد يا Libaray يا Reference خاصي ميخواهد؟
برای فقط ارسال ایمیل به هیچ چیزی غیر از داتنت نیاز ندارید. من از کلاس Attachment برای ارسال الصاقیه و از mail.Headers.Add برای افزودن هدرهای مورد نظرم استفاده میکنم. البته ممکن است بعضی کارهای کوچولوی دیگری هم لازم شود.
با سلام
ببخشيد پس MIME Client كه شما از آن در پروژه استفاده كرده ايد به چه درد ميخورد؟
با چي Headerاضافه ميكنيد و با چي Email Multipart مي فرستيد؟
شايد درست متوجه نشدم اگر ممكن است كمي مشروح تر توضيح دهيد و اگر صلاح دانستيد Email بزنيد
فکر میکنم در مورد MimeClient اشتباه کوچکی کرده باشم! من از MimeClient برای دریافت ایمیل از صندوق پست الکترونیکی استفاده میکنم چون در دات نت راهی برای دریافت ایمیل وجود ندارد. تعداد زیادی component و کتابخانه هم برای این کار وجود دارند که خیلی از آنها کار ما را راه نمیانداخت ولی MimeClient همه کارها را به خوبی انجام میدهد.
برای ارسال ایمیل و اضافه کردن هدرها هم از همان کلاس SmtpClient دات نت و متود .Headers.Add استفاده میکنم یعنی برای ارسال ایمیل به چیزی بیش از کلاس SmtpClient دات نت نیازی نیست. در مورد email multipart هم با این که دقیقا نمیدانم چیست ولی میدانم که خود دات نت آن را handle میکند.
من براي ارسال 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);
}
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);
با تشكر از توجه شما
يك سوال ديگر و آنهم اينكه براي افزودن هدرها من دو تا Document دارم كه در هر دو آنها فقط ذكر شده كه يك هدر براي ذكر پروتكل استفاده شده الزامي است و اطلاعات ديگري راجع به ساير هدرها نداده است .
شما كه يكبار اين كار را انجام داده ايد ميتوانيد بگوييد بر اساس استانداردهاي پروتكل ، آيا بايد هدر خاصي داشته باشيم يا خير؟
مثلا اولويت نامه يا مسير فايل يا زمان ارسال ؟
در کل پروتکل فقط از دو هدر استفاده میشود یکی برای نامههای ارسالی و دیگری برای رسیدها. از این هدرها هم فقط برای شناساندن ایمیلها به عنوان پروتکل استفاده میشود. این کار به این خاطر انجام میشود که برنامهای که ایمیلها را میخواند بیخودی بین ایمیلهای مختلف و غیر پروتکلی گیج نشده و فقط آنهایی را پردازش کند که متعلق به پروتکل هستند.
هدری که به ایمیلهای حاوی ایکسامال نامه «ارسالی» اضافه میشود X-ECE_SEND: 1.01 است و هدری که به ایمیلهای حاوی فایل ایکسامال «رسید» اضافه میشود X-ECE_RECEIPT: 1.01 است.
براي دريافت Emailگفتيد كه از MimeClient استفاده مي كنيد كه بصورت opensource در Codeproject وجود دارد . تنها چيزي كه من جستجو كردم و پيدا كردم يك لينك Pop3Mailclient است كه پس از Download يك پروژه .net در اختيار ما قرار ميدهد .
داخل اين پروژه فايلي بنام Pop3MimeClient دارد كه توابع getEmail را داراست
آيا منظور شما همين است ؟
اسم پروژه Pop3MimeClient است و دارای تابعی به اسم getEmail با امضای زیر است:
public bool GetEmailIdList(out List int EmailIds)
(علامت کوچکتر و بزرگتر دور int به خاطر محدودیتهای blogger برداشته شده است)
فکر میکنم درست پیدا کردید.
ممنون از توجه شما
آيا همه Pop3Mail ها روي پورت 25 هستند؟
و چگونه ميشود پورت و وجود Secure Socket layer يك Mailserver را چك كرد؟
pop3ها معمولا روی پورت ۲۵ هستند ولی این امر اجباری نیست. یعنی ممکن است روی پورت دیگری هم باشند. به خصوص اوقاتی که پای SSL به وسط میآید.
در مورد سوال دوم: این سوال را باید از سرویس دهنده ایمیل بپرسید. البته قاعدتا راههایی هم برای فهم این موضوع بدون پرسش از سرویس دهنده وجود دارد که من بلد نیستم ولی حدس میزنم بشود با کمک telnet به این قضیه پی برد.
با سلام
وقتي من به Mail server مورد نظرم وصل ميشوم اين پيغام را ميدهد :
Server Webmail.mysite.com not ready to start AUTHORIZATION.
220 mail1.myprovidermailserver.com
چطور آنرا حل كنم ؟
اول باید بتوانید از طریق برنامههایی مثل MS Outlook یا Thunderbird به اکانت مورد نظرتان وصل شوید در صورتی که به مشکل برتخورده و توانستید هم ایمیل بفرستید و هم ایمیل بگیرید آن وقت کارتان را در سیشارپ ادامه دهید. در غیر این صورت اول باید مشکلتان را با ISP سرویس دهنده حل کنید.
ارسال و دريافت از طريق سايت اينترنتي و webmail فايده ندارد؟
البته Error اصلي را در خط authentication مي گيرد ولي Description آن a problem in SSL authentication است .
ضمنا در outlook وصل شدم ولي با تيك
authentication در قسمت advance – Outgoing
ولي متاسفانه با برنامه مشكل دارم.
از طريق مثال خود Code project به اكانت Gmailخودم وصل شدم و مشكلي نبود (فكر كنم بايد با Isp ميل قبلي ام مشكلم را حل كنم )
در حال حاضر يك ليست با محتويات emailam دارم ولي به محتويات آن نمي توانم دسترسي داشته باشم .
۱- ارسال و دریافت از طریق وب کمکی به حل مشکل نمیکند.
۲- اولین باید مشکل را با MS Outlook حل کنید.
۳- از متودهای دیگر برای دریافت «میل» استفاده کنید.
سلام
فكر ميكنم به مشكل جدي خوردم .
همه ايميل هايي كه تحت يك ISP خاص هستند موقع كانكت شدن به آن Authentication error ميدهد در حاليكه وقتي با مسئول آن تماس گرفتم گفت كه SSL ندارند و روي همان پورت 25 كار ميكنند و حتي براي اينكه مبادا روي شبكه اينترانت ما برخي پورت ها مشكل داشته باشد از منزل هم اين كد را امتحان كردم ولي همان مشكل را دارد . با Outlook هم به اين اكانت ها وصل ميشوم البته با زدن تيك authentication در قسمت Advance ان . همينطور به ايميل هاي Gmail به راحتي وصل ميشوم
لطفا اگر چيزي به نظرتان ميرسد بگوييد .
ممنون
راستش این از آن مشکلاتی هست که به دلیل نداشتن تسلط کافی روی موضوع مجبور هستیم کل مسئله را یک جور دیگر حل کنیم. مثل بعضی وقتها که یک تنظیم خاص ویندوز را بلد نیستیم و به خاطرش ویندوز را از اول نصب میکنیم!
در این مورد خاص شاید شما هم مجبور شوید ISPتان را عوض کنید!! البته قبل از استفاده از این جور راه حلها باید بگویم تا آنجا که میدانم اگر در Outlook هم مجبور به تیک زدن authentication میشوید یعنی این که SSL یا یک مزاحم دیگر سر راه وجود دارد و باید سر این موضوع با ISPتان چانه بزنید. دقت کنید که خود شماره پورت به تنهایی به معنی داشتن یا نداشتن SSL نیست. یعنی روی پورت ۲۵ هم میتوان SSL داشت.
موفق باشید
سلام
نميدانم اين از اشتباه و بي تجربگي من بود يا عدم اطلاع ISP كه پورت 25 را معرفي كرده بود . ولي بهرحال اينطور حل شد كه من بجاي پورت 25 پورت 110 را براي Pop استفاده كردم و كاملا حل شد .
بعدا از يك مسئول سرور پرسيدم و گفت كه پورت 25 را معمولا براي Smtp استفاده ميكنند و پورت 110 را براي Pop.
در ميل سرورهاي بزرگ مثل جي ميل ، سرور جداگانه قرار ميدهند.نميدونم تا چه حد اين حرف درسته ولي
بهرحال مشكلم حل شد . ممنون از توضيحات و كمك شما .
با سلام
يك سوال!
پس از تست بين دبيرخانه ما و شركت ديگري مشخص شد كه دبيرخانه ايشان فقط فايل هايي با اسم وپسوند ECE_attribute.xml را ميخواند!
آيا نبايد هر نامه اي با هدر پروتكل را بخواند؟ مگر نبايد وابسته به اسم فايل نباشد؟
آيا در تعريف پروتكل چيزي براي نامگذاري فايل الصاقي ايميل ذكر شده؟؟؟
بعد هم اينكه كد منحصر بفرد فرستنده و گيرنده هرچيزي ميتواند باشد؟ يا ما بايد كد منحصر بفرد گيرنده را از خود آنها بخواهيم؟
با تشكر!
نظر شما درست است. پروتکل اجباری در انتخاب نام فایل ندارد و فرستنده در انتخاب نام فایل مجاز است.
کد گیرنده و فرستنده را دبیرخانه مبدا تعیین میکند و نیازی به هماهنگی با دبیرخانه مقصد نیست
سلام به شما دوست عزيز.
ضمن تشكر از پاسخگويي خالصانه شما، من يك استفاده كننده از "اي سي اي" هستم كه بنا به دلايلي، اتوماسيونمون رو نميتونم آن لاين به اينترنت وصل كنم و بايدايكس ام ال توليدي رو بصورت دستي به مقصد ارسال كنم. ولي مشكل افزودن هدر دارم. آيا امكان داره يك برنامه كوچيك اجرايي كه مشخصات ايميل خودم و مقصد و همچنين فايل ايكس ام ال مربوطه رو بگيره(حتي الامكان با قابليت خواستن يوزرنيم و پسورد در ابتداي ورود كه همان يوزر و پسورد ايميل خودمونه و همچنين ذخيره اطلاعات وارد شده بصورت كدشده كه پس از ورودهاي بعدي به برنامه نيازي به ورود مجدد اطلاعات ثابت نباشد) و اونو با انتخاب هدر مناسب (ارسالي، رسيد يا …) به مقصد ارسال كنه در اختيارم بذارين؟ قبلا از همكاريتون سپاسگزارم.
ايميل من: y.bahmani@gmail.com
جناب بهمنی متاسفانه برنامهای که میخواهید از قبل وجود ندارد و باید کسی آن را از اول بنویسید.