PDA

View Full Version : دستورات ارسال و دریافت ایمیل



متین جان
یک شنبه 09 مهر 1385, 10:42 صبح
لطفا دستورات ارسال و دریافت ایمیل و Attachmant رو توضیح بدید . (اگه میشه C#)
آیا ایمیل ها رو باید در دیتا بیس ذخیره کرد یا به روش دیگه ای انجام می شه؟
با تشکر

nazaninam
یک شنبه 09 مهر 1385, 12:14 عصر
دوست عزیز اول سرچ کن
توی این سایت ده ها تاپیک با این عنوان مطرح شده
اگه مشکلی داشتی بپرس

اَرژنگ
دوشنبه 10 مهر 1385, 07:40 صبح
دوست عزیز اول سرچ کن
توی این سایت ده ها تاپیک با این عنوان مطرح شده
اگه مشکلی داشتی بپرس
من الان ۶ ماه بیشتره که اینجام نمیدونم این رو چه جوری جستجو کنم، "ایمیل" که فایده نداره، مخصوصاً برایه اینکه خیلیها از "ی" یه عربی استفاده میکنند، یک مثال جستجو هم برایه من بگزارید که این بحث را چه جوری میتونم پیدا کنم.
مر۳۰

Behrouz_Rad
دوشنبه 10 مهر 1385, 11:15 صبح
http://barnamenevis.org/forum/search.php?searchid=224069

mahdi_negahi
دوشنبه 10 مهر 1385, 11:22 صبح
این مقاله را خود دوست عزیزم نازنینم در سایت خودشان و همچنین در اینجا گذاشته بود

برای فرستان ایمیل در دات نت 1 ابتدا فضا نام System.Web.Mail را وارد صفحه کرده » imports system.Web.mail
و سپس از کد زیر استفاده کنید :

Dim objmail As New MailMessage

objmail.From = mfrom
objmail.To = mailto
objmail.Subject = subject
objmail.BodyEncoding = System.Text.Encoding.UTF8
objmail.Body = htmltext
objmail.BodyFormat = MailFormat.Text
SmtpMail.SmtpServer = mailserver

objmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", mailserver)
objmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25)
objmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1)
objmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", mfrom)
objmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", pass)
Try
SmtpMail.Send(objmail)
Catch ex As Exception

End Try
حالا کافیه به جای مقادیر Mfrom آدرس ایمیل خودتون ، به جای Mto آدرس ایمیل گیرنده ،به جای subject موضوع ایمیلتون ، به جای Htmltext متن نامتون ، به جای mailserver آدرس smtp server که معمولا mail.yoursite.com هست و به جای pass پسوورد ایمیل خودتون رو وارد کنید .

ارسال ایمیل در دات نت 2 یکم تفاوت کرده :
برای اینکار ابتدا فضا نام System.Net.Mail را وارد صفحه کرده » imports system.net.mail
سپس از کد های زیر استفاده کنید :
Dim obj As New SmtpClient

Dim Mailmsg As New MailMessage
Mailmsg.To.Clear()

Mailmsg.To.Add(New MailAddress(mailto))
Mailmsg.From = New MailAddress(mfrom)
Mailmsg.Subject = subject
Mailmsg.BodyEncoding = System.Text.Encoding.UTF8 ' تعیین کدینگ متن بادی
Mailmsg.IsBodyHtml = True
obj.Host = mailserver 'جواب میده mai.yoursite.com خود که معمولا smtp server تعیین
Dim basicAuthenticationInfo As New System.Net.NetworkCredential(mfrom, pass) ' رو انجام میده پس یوزر نیم و پسورد رو وارد میکنیم Authenticate این بخش کار

obj.UseDefaultCredentials = False

obj.Credentials = basicAuthenticationInfo Mailmsg.Body = htmltext ' این در حقیقت متن بادی است که شما میخواهید بفرستید
Mailmsg.IsBodyHtml = True ' است و متن ساده نیست html تعیین میکند که بادی شما از نوع

Try
obj.Send(Mailmsg)
Catch ex As Exception

End Try

حالا کافیه به جای مقادیر Mfrom آدرس ایمیل خودتون ، به جای Mto آدرس ایمیل گیرنده ،به جای subject موضوع ایمیلتون ، به جای Htmltext متن نامتون ، به جای mailserver آدرس smtp server که معمولا mail.yoursite.com هست و به جای pass پسوورد ایمیل خودتون رو وارد کنید .

متین جان
دوشنبه 10 مهر 1385, 12:19 عصر
ببخشید آقای راد لینکی که گفته بودید پیغام " هیچ مورد تازه ای یافت نشد " داد

PrinceDotNet
دوشنبه 10 مهر 1385, 12:57 عصر
حالا چطور باید ایمیلی رو دریافت کرد و نشون داد.

Behrouz_Rad
دوشنبه 10 مهر 1385, 14:14 عصر
ببخشید آقای راد لینکی که گفته بودید پیغام " هیچ مورد تازه ای یافت نشد " داد
دیر رسیدی داداش! Cache پرید!

mahdi_negahi
دوشنبه 10 مهر 1385, 14:17 عصر
برای این کار باید از پروتکل pop3 یا nntp استفاده کنید من برایتان پرتکل pop3 را کدهایش را مینویسم :

اول یک برنامه از نوع Windows بسازید اسم برنامه را pop3Mail بگذارید برای شروع کلاسی می سازیم که نشان دهنده massage ها در pop3 است نام کلاس را pop3MailMessage می گذاریم و کد زیر را برایش مینویسیم :

public class POP3EmailMessage
{
// Define public members
public long msgNumber;
public long msgSize;
public bool msgReceived;
public string msgContent;
}


این کلاس فیلدهایی برای تعداد نامه ها و سایز نامه ها (به بایت) دارد
حال باید کلاس pop3 را که از کلاس System.Net.Sockets.TcpClient به ارث برده است را بنویسیم


// Define the POP3 class
public class POP3 : System.Net.Sockets.TcpClient
{


حال برای اینکه به سرور pop3 متصل شویم تابع ConnectionPOP() مینویسیم . این تابع 3 پارامتر دارد که یکی نام سرور pop3 نام کاربری و کلمه عبور است توجه کنید که نام کاربری و کلمه عبور برای e-mail است که شما میخواهید به mail های آن دسترسی پیدا کنید

public void ConnectPOP(string sServerName, string sUserName, string sPassword)
{
// Message and the server resulting response
string sMessage;
string sResult;

// Call the connect method of the TcpClient class
Connect(sServerName, 110);

// Remember default port for server is 110
// Get result back
sResult = Response();

// Check response to make sure it's +OK
if (sResult.Substring(0,3) != "+OK")
throw new POPException(sResult);

// Got past connect, send username
sMessage = "USER " + sUserName + "\r\n";

// Write() sends data to the Tcp Connection
Write(sMessage);
sResult = Response();

// Check response
if (sResult.Substring(0,3) != "+QK")
{
throw new POPException(sResult);
}

// Now follow up with sending password in same manner
sMessage = "PASS " + sPassword + "\r\n";
Write(sMessage);
sResult = Response();
if (sResult.Substring(0,3) != "+OK")
throw new PQPException(sResult);
}


متدهای write و response در ادامه توضیح داده خواهد شد.
خوب وقتی شما به server منصل شدید با بتوانید از server جا شوید تایع زیر این کار را میکند

public void DisconnectPOP()
{
string sMessage;
string sResult;

sMessage = "QUIT\r\n";
Write(sMessage);

sResult = Response();
if (sResult.Substring(0,3) != "+OK")
throw new POPException(sResult);
}


خوب حالا با به تابعی نیاز داریم که لیستی از میلهایی که برای شما آماده باید بدهیم

public ArrayList ListMessages()
{
// Same sort of thing as in ConnectPOP and DisconnectPOP
string sMessage;
string sResult;
ArrayList returnValue = new ArrayList();
sMessage = "LIST\r\n";
Write(sMessage);

sResult = Response();
if (sResult.Substring(0, 3) != "+OK")
throw new POPException (sResult);

while (true)
{
sResult = Response();
if (sResult == ".\r\n")
{
return returnValue;
}
else
{
POP3EmailMessage oMailMessage = new POP3EmailMessage()

// Define a separator
char[] sep = { ' '};

// Use the split method to break out array of data
string[] values = sResult.Split(sep);

// Put data into oMailMessage object
oMailMessage.msgNumber = Int32.Parse(values[0]);
oMailMessage.msgSize = Int32.Parse(values[1]);
oMailMessage.msgReceived = false;
returnValue.Add(oMailMessage);
continue;
}
}
}


توجه برای اینکه arraylist را به پروژه اضافه کنیم باید از فضای نامی System.Collections استفاده کنید

خوب برای اینکه یک ایمیل مشخص را به طور کامل دریافت کنید از تابع زیر استفاده میکنید.توجه کنید که پارامتر RETER برای این فرستاده میشود که به خاصیت msgNumber داشته باشید

public POP3EmailMessage RetrieveMessage(POP3EmailMessage msgRETR)
{
string sMessage;
string sResult;

// Create new instance of object and set new values
POP3EmailMessage oMailMessage = new POP3EmailMessage ();
oMailMessage.msgSize = msgRETR.msgSize;
oMailMessage.msgNumber = msgRETR.msgNumber;

// Call the RETR command to get the appropriate message
sMessage = "RETR " + msgRETR.msgNumber + "\r\n";
Write(sMessage);
sResult = Response();
if (sResult.Substring(0, 3) != "+OK")
throw new POPException (sResult);

// Set the received flag equal to true since we got the message
oMailMessage.msgReceived = true;

// Now loop to get the message text until we hit the "." end point
while (true)
{
sResult = Response();
if (sResult == ".\r\n")
break;
else
oMailMessage.msgContent = sResult;
}

return oMailMessage;
}


برای حذف یک نامه


public void DeleteMessage(POP3EmailMessage msgDELE)
{
string sMessage;
string sResult;

sMessage = "DELE " + msgDELE.msgNumber + "\r\n";
Write(sMessage);
sResult = Response();
if (sResult.Substring(0, 3) != "+OK")
throw new POPException(sResult);
}



متد write یک massage را از ورودی گرفته و آن را در یک TCP network stream مینویسد برای انتقال در شبکه و یا در اینترنت .این تابع دستورات ما را در قالب یک packet به سرور pop میفرستد .توجه کنید که نوع داده string در C# نمی تواند به طور مستقیم در بافر استفاده شود به همین خاطر از
System.Text.ASCIIEncoding استفاده کردیم


private void Write(string sMessage)
{
// Used for Data Encoding
System.Text.ASCIIEncoding oEncodedData = new System.Text.ASCIIEncoding() ;

// Now grab the message into a buffer for sending to the TCP network stream
byte[] WriteBuffer = new byte[1024];
WriteBuffer = oEncodedData.GetBytes(sMessage) ;

// Take the buffer and output it to the TCP stream
NetworkStream NetStream = GetStream();
NetStream.Write(WriteBuffer, 0, WriteBuffer.Length);
}


تابع response به شما اجازه میدهد که دیتا یی که برمیگردد از سرور pop3 که شما به آن متصل شدید بخوانید

private string Response()
{
System.Text.ASCIIEncoding oEncodedData = new System.Text.ASCIIEncoding();
byte []ServerBuffer = new Byte[1024];
NetworkStream NetStream = GetStream();
int count = 0;

// Here we read from the server network stream and place data into
// the buffer (to later decode and return)
while (true)
{
byte []buff = new Byte[2];
int bytes = NetStream.Read( buff, 0, 1 );

if (bytes == 1)
{
ServerBuffer [count] = buff[0];
count++;

if (buff[0] == '\n')
{
break;
}
}
else
{
break;
}
}

// Return the decoded ASCII string value
string ReturnValue = oEncodedData.GetString(ServerBuffer, 0, count )
return ReturnValue;
}


خوب حال فقط کلاسی مانده که اگر در جریان کد مشکلی پیش بیاید یک Exeption تولید کند

namespace POPMailException
{
public class POPException : System.ApplicationException
{
public POPException(string str) : base(str)
{
}
}
}


خوب حال میتوانید از کلاس فوق استفاده کنید کد زیر در قالب یک console application است

static void Main(string[] args)
{
try
{
POP3 oPOP = new POP3();
oPOP.ConnectPOP("mail.someserver.com", "username", "password");
ArrayList MessageList = oPOP.ListMessages();
foreach (POP3EmailMessage POPMsg in MessageList)
{
POP3EmailMessage POPMsgContent = oPOP.RetrieveMessage(POPMsg);
System.Console.WriteLine("Message {0}: {1}",
POPMsgContent.msgNumber, POPMsgContent.msgContent);
}
oPOP.DisconnectPOP();
}
catch (POPException e)
}
System.Console.WriteLine(e.ToString());
}
catch ( System.Exception e)
{
System.Console.WriteLine(e.ToString());
}
}
}

متین جان
چهارشنبه 12 مهر 1385, 00:58 صبح
سلام ، خسته نباشید:
دو تا سوال در مورد کد اول آقای نگاهی در دات نت یک داشتم
1 . من برنامه رو به صورت لوکال اجر ا کردم و در اکسپشن پیغام زیر قرار گرفت :
System.Web.HttpException: Could not access 'CDO.Message' object. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Runtime.InteropServices.COMException (0x80040213): The transport failed to connect to the server. --- End of inner exception stack trace --- at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters) at System.RuntimeType.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters) at System.Type.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args) at System.Web.Mail.LateBoundAccessHelper.CallMethod(T ype type, Object obj, String methodName, Object[] args) at System.Web.Mail.LateBoundAccessHelper.CallMethod(O bject obj, String methodName, Object[] args) --- End of inner exception stack trace --- at System.Web.Mail.LateBoundAccessHelper.CallMethod(O bject obj, String methodName, Object[] args) at System.Web.Mail.CdoSysHelper.Send(MailMessage message) at System.Web.Mail.SmtpMail.Send(MailMessage message) at WebApplication10.WebForm1.Button1_Click(Object sender, EventArgs e) in e:\inetpub\wwwroot\webapplication10\webform1.aspx. cs:line 68
می شه لطفا منو راهنمایی کنید ؟
2 . میل ها یی که به یاهو و جی میل فرستاده می شن در smtpserver باید چه آدرسی رو قرار داد؟

PrinceDotNet
چهارشنبه 12 مهر 1385, 11:12 صبح
در asp.net هم همین طور باید میل ها رو خوند.

متین جان
پنج شنبه 13 مهر 1385, 23:29 عصر
لطفا یک نفر جواب منو بده!!!!!!!!!!!!
چرا با اجرای این کد هیچ ایمیلی ارسال نمی شه؟
private void Button1_Click(object sender, System.EventArgs e)
{

MailMessage objmail=new MailMessage ();
objmail.From = from.Text;
objmail.To =to.Text;
objmail.Subject =subject.Text;
objmail.BodyEncoding = System.Text.Encoding.UTF8;
objmail.Body = body.Text;
objmail.BodyFormat = MailFormat.Text;
SmtpMail.SmtpServer ="www.yahoo.com";
objmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver","www.yahoo.com" );
objmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25);
objmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1);
objmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername",from.Text);
objmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", password.Text);
try
{
SmtpMail.Send(objmail);}
catch (Exception ex)
{
litStatus.Text=ex.ToString();
}

mahdi_negahi
پنج شنبه 13 مهر 1385, 23:58 عصر
اولا جان من کدها رو درون تگ code قرار بده
دوما خط زیر غلطه

SmtpMail.SmtpServer ="www.yahoo.com";

این سرور smtp سایت yahoo نیست فکر کنم این باشه

smtp.yahoo.com

mahdi_negahi
جمعه 14 مهر 1385, 00:07 صبح
مال gmail اینه

smtp.gmail.com

متین جان
جمعه 14 مهر 1385, 11:17 صبح
سلام با این تغییرات هم ایمیلی ارسال نشد .

mahdi_negahi
جمعه 14 مهر 1385, 21:44 عصر
در vs2003 کار میکنی یا Vs2005

لوک خوش شانس
جمعه 14 مهر 1385, 23:27 عصر
ببینم شما چرا از میل سرور خودتون استفاده نمی کنید ؟

متین جان
جمعه 14 مهر 1385, 23:53 عصر
لطف کنید کدش رو برام بنویسید
در ضمن برای دستیابی به ایمیلها روی میل سرور خودم باید چطوری عمل کنم

zahracomputer
شنبه 15 مهر 1385, 00:02 صبح
آقای نگاهی منم همین مشکل را دارم و از visual studio 2003 استفاده می کنم.
با تشکر

لوک خوش شانس
شنبه 15 مهر 1385, 01:54 صبح
بجای SMTPserver آدرس Smtp یه سایت خودتونو بزارین .
اگه باز هم مشکلی هست میتونی به این آدرس بری و از اونجا نمونه چند مدل کد ارسال ایمیل رو برداری
http://forum.persiantools.com/t40899.html

mahdi_negahi
شنبه 15 مهر 1385, 07:06 صبح
MailMessage mail = new MailMessage();
SmtpMail.SmtpServer="smtp.gmail.com";
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",1 );
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl","true");
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername","mahdi.negahi" );
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword","password" );
mail.To=txtEmail.Text;
mail.BodyFormat = MailFormat.Html;
mail.BodyEncoding = System.Text.Encoding.UTF8;
mail.Body ="body";
mail.Subject = "E-Clinic ;Information"
mail.From = "mahdi.negahi@gmail.com";
try
{
SmtpMail.Send(mail);

{
catch(Exeption ex)
{
Response.Write(ex.Message);
}



این کد داره کار میکند به زیبایی برای vs2003 است

zahracomputer
شنبه 15 مهر 1385, 07:31 صبح
من کدها را به شکل بالا نوشم ولی روی Exeption و ex ، خطا میده.علت چیه؟
با تشکر

متین جان
شنبه 15 مهر 1385, 10:01 صبح
با vs2003 کار می کنم

mahdi_negahi
شنبه 15 مهر 1385, 10:37 صبح
Exception

بک زره خودتان هم فکر کنید بد نیست

PrinceDotNet
شنبه 15 مهر 1385, 20:44 عصر
برای دریافت ایمیل توسط pop3 برای asp.net هم اگر مطلبی دارید لطف میکنید بگید.

mahdi_negahi
شنبه 15 مهر 1385, 22:17 عصر
احتمالا شما چیزی مثل gmail یا yahoo میخواهید من کدهی اونو پیدا نکردم متاسفانه

mahdi_negahi
شنبه 15 مهر 1385, 23:50 عصر
این لینک را حتما نگاه کنید پروژه های open source خوبی داره
http://anmar.eu.org/projects/sharpwebmail/

PrinceDotNet
یک شنبه 16 مهر 1385, 00:30 صبح
http://www.motobit.com/tips/detpg_add-pop3-user-account-windows
http://www.motobit.com/tips/detpg_check-pop3-user-account-windows

من این دو مقاله رو پیدا کردم.ولی درست و حسابی نگاه نکردم و نفهمیدم آیا به درد این مورد می خورد یا نه.

اگه کسی چیزی فهمید به ما هم بگه.

متین جان
یک شنبه 16 مهر 1385, 01:56 صبح
من همین کد رو اجرا کردم ولی پیغام زیر رو داد :
Could not access 'CDO.Message' object.
و هیچ ایمیلی ارسال نشد

لوک خوش شانس
یک شنبه 16 مهر 1385, 04:06 صبح
چرا از سایت Microsoft کمک نمی گیرید . در قسمت MSDN تمام این مطالب هست و نمونه هایی هم به عنوان مثال وجود داره

mahdi_negahi
یک شنبه 16 مهر 1385, 08:48 صبح
من همین کد رو اجرا کردم ولی پیغام زیر رو داد :
Could not access 'CDO.Message' object.
و هیچ ایمیلی ارسال نشد

ببین من این خطا را در local میگیرم ولی در اینترنت خبری ازش نیست
e-clinic.takif.com من از این کد استفاده کرده ام برو در قسمت ثبت کاربران ثبت نام کن بعد در قسمت فراموش کردن رمز عبور ببین که این ایمیل را دریافت میکنی

متین جان
پنج شنبه 20 مهر 1385, 16:18 عصر
ببین من این خطا را در local میگیرم ولی در اینترنت خبری ازش نیست
e-clinic.takif.com من از این کد استفاده کرده ام برو در قسمت ثبت کاربران ثبت نام کن بعد در قسمت فراموش کردن رمز عبور ببین که این ایمیل را دریافت میکنی

من همین خطا روهم در لوکال هم در اینترنت می گیرم

mahdi_negahi
پنج شنبه 20 مهر 1385, 18:09 عصر
کل کدت را اینجا بذار

متین جان
جمعه 21 مهر 1385, 13:17 عصر
آقا مهدی بالاخره ایمیله ارسال شد
دست شما هم درد نکنه

mahdi_negahi
جمعه 21 مهر 1385, 17:48 عصر
خدا را شکر

متین جان
چهارشنبه 26 مهر 1385, 11:21 صبح
سلام
سورس c#.net برای نشون دادن ایمیل رو کسی نداره . من خیلی سرچ کردم ولی چیزی پیدا نکردم
ممنون می شم اگه کمکم کنید .

متین جان
چهارشنبه 26 مهر 1385, 23:16 عصر
برای این کار باید از پروتکل pop3 یا nntp استفاده کنید من برایتان پرتکل pop3 را کدهایش را مینویسم :

اول یک برنامه از نوع Windows بسازید اسم برنامه را pop3Mail بگذارید برای شروع کلاسی می سازیم که نشان دهنده massage ها در pop3 است نام کلاس را pop3MailMessage می گذاریم و کد زیر را برایش مینویسیم :

آیا این برنامه رو برای کد ارسال ایمیل که توی این تاپیک نوشته شده هم میشه اجرا کرد؟

mahdi_negahi
چهارشنبه 26 مهر 1385, 23:42 عصر
این برنامه یک برنامه ویندوزی است که به یوزی وصل شده و نامه های آن را میگیرد و نشان میدهد

fateme62
پنج شنبه 27 مهر 1385, 23:04 عصر
برای دریافت ایمیل کسی سورس دات نت نداره
من خیلی سرچ کردم ولی چیز به درد بخوری پیدا نکردم حتی نتونستم کلیات دریافت ایمیل رو هم پیدا کنم
این سورسی که در صفحه اول نشون داده شده رو چطوری می شه استفاده کرد

SAMARE
پنج شنبه 28 آبان 1388, 10:39 صبح
اگه کسی کد دریافت ایمیل در asp.net داره اینجا بزاره
ممنون میشم!!!

mehdiomnia
دوشنبه 16 دی 1392, 15:31 عصر
بچه ها همیشه نمونه های عملی خیلی بهتره و مفهوم تر کمک میکنه
اگر کسی محبت کنه نمونه "ارسال ایمیل با سی شارپ" رو حداقل بذاره ممنونش میشم
والا من دوتا ویدئو
https://www.youtube.com/watch?v=F6LI9KIcnVs
از یوتیوب دیدم عینا کدهارو هم پیاده کردم ولی ارسال نمیکنه حالا مشکل از کجاست الله اعلم و متخصصان امرش