PDA

View Full Version : چک کردن وجود یک آدرس email



minaalamshahi
چهارشنبه 22 خرداد 1392, 17:01 عصر
با سلام
چطور می تونم بفهمم که یه آدرس email که کاربر برنامه من وارد می کنه
واقعا وجود داره؟

darknes666
چهارشنبه 22 خرداد 1392, 17:04 عصر
والا من نمیدونم.
ولی یه توصیه دارم که همه ی سایت ها ازش استفاده میکنن
یه لینک بفرست برای ایمیل بعد تعیین کن اگر لینک بعد 3دقیقه ی دیگه باز نشد کل اطلاعات ذخیره شده پاک بشه.

minaalamshahi
چهارشنبه 22 خرداد 1392, 17:06 عصر
این روش رو می دونم

اما یک کامپوننت دیدم که اسمش EmailValidator.dll.exclude این بود
و نوشته بود که این قضیه رو بررسی می کنه

اما من که add refrence sh می کنم دیگه برنامه ام باز نمیشه

می خواستم ببینم دیگه راهی مثل این وجود داره که بدون ایمیل کردن این راهو بفهمم؟

younesdoost
چهارشنبه 22 خرداد 1392, 17:17 عصر
برید به لینک زیر و عضو شید.آدرس ها رو براتون چک می کنه.البته فقط 100 تا آدرس رو چک می کنه و بعد دوباره باید عضو شید.چون عضویتشم با IP هستش باید برای عضو شدن دوباره از یه hotspot یا یه همچین چیزی استفاده کنی ولی می تونی ایمیل ثبت نامت رو الکی بزنی!
http://www.e-mailvalidator.com/

minaalamshahi
چهارشنبه 22 خرداد 1392, 17:26 عصر
ولی سایت من هزاران کاربر داره

otokart
چهارشنبه 22 خرداد 1392, 17:31 عصر
برید به لینک زیر و عضو شید.آدرس ها رو براتون چک می کنه.البته فقط 100 تا آدرس رو چک می کنه و بعد دوباره باید عضو شید.چون عضویتشم با IP هستش باید برای عضو شدن دوباره از یه hotspot یا یه همچین چیزی استفاده کنی ولی می تونی ایمیل ثبت نامت رو الکی بزنی!
http://www.e-mailvalidator.com/

مطلب خوبی بود

younesdoost
چهارشنبه 22 خرداد 1392, 17:33 عصر
ولی سایت من هزاران کاربر داره
پس پیشنهاد منم اینه که ایمیل تایید ثبت نام به کاربراتون ارسال کنید.

forestasphalt
چهارشنبه 22 خرداد 1392, 17:57 عصر
protected void Button1_Click(object sender, EventArgs e)
{
TcpClient tClient = new TcpClient("gmail-smtp-in.l.google.com", 25);
string CRLF = "\r\n";
byte[] dataBuffer;
string ResponseString;
NetworkStream netStream = tClient.GetStream();
StreamReader reader = new StreamReader(netStream);
ResponseString = reader.ReadLine();
/* Perform HELLO to SMTP Server and get Response */
dataBuffer = BytesFromString("HELO " + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();
dataBuffer = BytesFromString("MAIL FROM:<hosseinhagh66@gmail.com>" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();
/* Read Response of the RCPT TO Message to know from google if it exist or not */
dataBuffer = BytesFromString("RCPT TO:<" + TextBox1.Text.Trim() + ">" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();
if (GetResponseCode(ResponseString) == 550)
{
Response.Write("Mai Address Does not Exist !<br/><br/>");
Response.Write("<B><font color='red'>Original Error from Smtp Server :</font></b>" + ResponseString);
}
/* QUITE CONNECTION */
dataBuffer = BytesFromString("QUITE" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
tClient.Close();





}
private byte[] BytesFromString(string str)
{
return Encoding.ASCII.GetBytes(str);
}
private int GetResponseCode(string ResponseString)
{
return int.Parse(ResponseString.Substring(0, 3));
}





<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

اگه ایمیل نادرست بود این خطا رو میده
http://uploadtak.com/images/5669_testemailIncorrect.jpg
من از این روش برای چک کردن ایمیل استفاده میکنم اگه خواستی یه توضیح بدم

minaalamshahi
چهارشنبه 22 خرداد 1392, 18:05 عصر
ممنون میشم اگر یکم واسم توضیح بدین

minaalamshahi
چهارشنبه 22 خرداد 1392, 18:09 عصر
TcpClient tClient = new TcpClient("gmail-smtp-in.l.google.com", 25);


روی این خط بهم error میده

A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because

forestasphalt
چهارشنبه 22 خرداد 1392, 18:12 عصر
TcpClient tClient = new TcpClient("gmail-smtp-in.l.google.com", 25);


روی این خط بهم error میده

A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because

بدون وپی ان امتحان کن (من با وپی ان امتحان کردم همین خطا رو داد ولی بدون وپی ان خطایی نداد)

forestasphalt
چهارشنبه 22 خرداد 1392, 18:15 عصر
ممنون میشم اگر یکم واسم توضیح بدین
اگه اجازه بدید بعدا توضیح بدم الان دارن به زور منو از پشت سیستم بلند میکنن:لبخند:

minaalamshahi
چهارشنبه 22 خرداد 1392, 18:18 عصر
من vpn ندارم

ولی اگر کاربر vpn داشت چی؟

forestasphalt
چهارشنبه 22 خرداد 1392, 20:28 عصر
منظورم از وپی ان این بود که ویژوال استدیو رو بدون پروکسی اجرا کنید
در این روش ما ایمیلی به ایمیل مورد نظر میدیم و پاسخ رو دریافت میکنیم اگر کد پاسخ برگشتی 550 یعنی ایمیل وجود نداره
سوکت فرایندی که از طریق اون میونید داده ها ارسال یا دریافت کنید کلاس tcpclient با استفاده از کلاس socket پیاده سازی شده
وقتی دو فرایند از طریق tcp با هم ارتباط برقرار میکنن مثل این میمونه که کانالی بین اون 2 تا برقرار میشه این کانال تا زمانی که یکی از 2 طرف اون رو نبده برقرار هست.توی شبکه داده به صورت آرایه ای از بایت ها منتقل میشن به همین خاطر هست هر داده ای رو میخوایم ارسال کنیم به آرایه ای از بایت ها تبدیل میکنیم.tcpclient یک کانکشن کلاینتی رو برای سرویس tcp شبکه فراهم میکنه که یک سری متد برای اتصال سرویس گیرنده tcp ،ارسال ودریافت داده ها رو فراهم میکنه
در اینجا یک اتصال به سرویس گوگل با پورت 25 که پورت smtp (ایمیل) هست برقرار میکنیم


TcpClient tClient = new TcpClient("gmail-smtp-in.l.google.com", 25);

NetworkStream جریانی از داده ها برای شبکه فراهم میکنه پس متغیر netStream هرجریانی که در tClient وجود داره رو دربرمیگیره


NetworkStream netStream = tClient.GetStream();

با StreamReader هم میتونیم جریانی از netStream رو بخونیم (کاراکترها )


StreamReader reader = new StreamReader(netStream);
ResponseString = reader.ReadLine();

در این قسمت درخواستی به سرور smtp داده میشه ونتیجه گرفته میشه


dataBuffer = BytesFromString("HELO " + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();
dataBuffer = BytesFromString("MAIL FROM:<hosseinhagh66@gmail.com>" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();

در این قمست نتیجه پیامی که به سرور گوگل دادیم رو میخونیم


dataBuffer = BytesFromString("RCPT TO:<" + TextBox1.Text.Trim() + ">" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();
if (GetResponseCode(ResponseString) == 550)
{
Response.Write("Mai Address Does not Exist !<br/><br/>");
Response.Write("<B><font color='red'>Original Error from Smtp Server :</font></b>" + ResponseString);
}


در این قسمت هم کانکشن رو میبندیم وdataBuffer با کلمه quite پر میکنیم به معنی خاتمه انجام کار البته الزامی نیست!


dataBuffer = BytesFromString("QUITE" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
tClient.Close();

این برای تست کردن ایمیل در گوگل میباشد برای یاهو یا سرویس های دیگه هم همین روش جواب میده( با آدرس tcpclient مربوط به خودشون پر میکنیم)

minaalamshahi
چهارشنبه 22 خرداد 1392, 22:23 عصر
منظورم از وپی ان این بود که ویژوال استدیو رو بدون پروکسی اجرا کنید

این یعنی چی؟

forestasphalt
چهارشنبه 22 خرداد 1392, 23:06 عصر
موقعی که کد رو میخوای امتحان کنی ویژوال استدیو بدون پروکسی (وپی ان یا ساکس) اجرا کن،من کد بالا رو توی چند سیستم مختلف هم امتحان کردم کار کرد ولی یه سیتمی که ویژوال استدیو رو با پروکسی (وپی ان یا ساکس)اجرا کردم کد کار نکرد (چون نمیتونه به اون آدرس tcpclient وصل بشه که طبیعی هست)

ali_mnkt
چهارشنبه 22 خرداد 1392, 23:39 عصر
یک سئوال . یعنی ما باید چک کنیم آیا ایمیل وارد شده مربوط به yahoo یا gmail هست و بر اساس اون tcpclient مربوط به خودشون رو استفاده کنیم ؟

minaalamshahi
چهارشنبه 22 خرداد 1392, 23:57 عصر
من این ساکس یا وپی ان که میگین نمیدونم کجاست؟

cloner
پنج شنبه 23 خرداد 1392, 00:09 صبح
برید به لینک زیر و عضو شید.آدرس ها رو براتون چک می کنه.البته فقط 100 تا آدرس رو چک می کنه و بعد دوباره باید عضو شید.چون عضویتشم با IP هستش باید برای عضو شدن دوباره از یه hotspot یا یه همچین چیزی استفاده کنی ولی می تونی ایمیل ثبت نامت رو الکی بزنی!
http://www.e-mailvalidator.com/
این سایتی که قرار دادید فقط ساختار ایمیل رو اعتبار سنجی میکنه.
این کارو میشه با چندخط کد "عبارات منظم" انجام داد

minaalamshahi
پنج شنبه 23 خرداد 1392, 00:11 صبح
اگر منظورتون view in browser هست رفتم خطا نداد اما آدرس معتبر رو invalid میزنه

Mai Address Does not Exist !Original Error from Smtp Server :550-5.1.1 The email account that you tried to reach does not exist. Please try

و خیلی هم طول میکشه

forestasphalt
پنج شنبه 23 خرداد 1392, 10:36 صبح
فکر کنم شما یه جای کد رو دارید اشتباه مینویسید
برای من به درستی کار میکنه با این دو ایمیل بررسی کنید
hosseinhagh66@gmail.com وجود داره در نتیجه پیامی رو نشون نمیده
hosseinhagh6666666@gmail.com وجود نداره در نتیجه پیامی نشون میده
http://uploadtak.com/images/j2731_Email_Check.zip

forestasphalt
پنج شنبه 23 خرداد 1392, 10:38 صبح
اگر منظورتون view in browser هست رفتم خطا نداد اما آدرس معتبر رو invalid میزنه

Mai Address Does not Exist !Original Error from Smtp Server :550-5.1.1 The email account that you tried to reach does not exist. Please try

و خیلی هم طول میکشه

از این آدرسی که گذاشتم دانلود کنید و تست کنید
برای من زیاد طول نمیکشه حدود 30-40 ثانیه،گوگل چند وقتی هست که در ایران دچار مشکل شده (احتمال تاخیر های بیش از اندازه هم میتونه همین دلیل باشه)

forestasphalt
پنج شنبه 23 خرداد 1392, 10:39 صبح
یک سئوال . یعنی ما باید چک کنیم آیا ایمیل وارد شده مربوط به yahoo یا gmail هست و بر اساس اون tcpclient مربوط به خودشون رو استفاده کنیم ؟
بله دقیقا باید همین کار کنیم
آدرس های مربوط به یاهو یا سایت های مشابه(tcpclient ) در اینترنت وجود داره

ali_mnkt
پنج شنبه 23 خرداد 1392, 14:05 عصر
بله دقیقا باید همین کار کنیم
آدرس های مربوط به یاهو یا سایت های مشابه(tcpclient ) در اینترنت وجود داره

خوب یک مشکلی پیش می یاد . اگر کاربر ایمیلش شرکتی باشه چطور باید چک کرد ؟

forestasphalt
پنج شنبه 23 خرداد 1392, 15:31 عصر
خوب یک مشکلی پیش می یاد . اگر کاربر ایمیلش شرکتی باشه چطور باید چک کرد ؟
بلاخره یه جوری باید یه ایمیل(درخواست) بزنی ببینی ایمیل وجود داره یا نه!(حالا چه جوریشو خدا میکنه و اون شرکته!:لبخندساده:)

minaalamshahi
شنبه 25 خرداد 1392, 10:47 صبح
فکر کنم شما یه جای کد رو دارید اشتباه مینویسید
برای من به درستی کار میکنه با این دو ایمیل بررسی کنید
hosseinhagh66@gmail.com وجود داره در نتیجه پیامی رو نشون نمیده
hosseinhagh6666666@gmail.com وجود نداره در نتیجه پیامی نشون میده
http://uploadtak.com/images/j2731_Email_Check.zip


این کار رو کردم

حالا دارم

A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 173.194.70.27:25

minaalamshahi
دوشنبه 07 مرداد 1392, 18:08 عصر
protected void Button1_Click(object sender, EventArgs e)
{
TcpClient tClient = new TcpClient("gmail-smtp-in.l.google.com", 25);
string CRLF = "\r\n";
byte[] dataBuffer;
string ResponseString;
NetworkStream netStream = tClient.GetStream();
StreamReader reader = new StreamReader(netStream);
ResponseString = reader.ReadLine();
/* Perform HELLO to SMTP Server and get Response */
dataBuffer = BytesFromString("HELO " + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();
dataBuffer = BytesFromString("MAIL FROM:<hosseinhagh66@gmail.com>" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();
/* Read Response of the RCPT TO Message to know from google if it exist or not */
dataBuffer = BytesFromString("RCPT TO:<" + TextBox1.Text.Trim() + ">" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();
if (GetResponseCode(ResponseString) == 550)
{
Response.Write("Mai Address Does not Exist !<br/><br/>");
Response.Write("<B><font color='red'>Original Error from Smtp Server :</font></b>" + ResponseString);
}
/* QUITE CONNECTION */
dataBuffer = BytesFromString("QUITE" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
tClient.Close();





}
private byte[] BytesFromString(string str)
{
return Encoding.ASCII.GetBytes(str);
}
private int GetResponseCode(string ResponseString)
{
return int.Parse(ResponseString.Substring(0, 3));
}





<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

اگه ایمیل نادرست بود این خطا رو میده
http://uploadtak.com/images/5669_testemailIncorrect.jpg
من از این روش برای چک کردن ایمیل استفاده میکنم اگه خواستی یه توضیح بدم

این روش فقط برای gmail جواب میده؟

minaalamshahi
دوشنبه 07 مرداد 1392, 18:53 عصر
MailMessage mm = new MailMessage();
mm.From = new MailAddress(Email);
mm.To.Add(txtEmail.Text);


mm.Subject = "تایید ثبت نام";



string text = "کاربر گرامی@" + txtName + " " + txtFamil + "@";
text += "@@ رمز عبور فعلی شما در سیستم:@@" + txtPass + "@@";

text = text.Replace("@", System.Environment.NewLine);


mm.Body = text;

mm.IsBodyHtml = false;
mm.Priority = MailPriority.High;
SmtpClient sc = new SmtpClient("smtp.mail.yahoo.com");
sc.Port = 587;
sc.Credentials = new NetworkCredential(Email, pass);

sc.Send(mm);




این روش رو برای یاهو چک کردم اگر درست باشه ایمیل رو می فرسته اما اگر وجود نداشته باشه هم خطایی نمیده

saeed_sho
دوشنبه 07 مرداد 1392, 19:04 عصر
منظورم از وپی ان این بود که ویژوال استدیو رو بدون پروکسی اجرا کنید
در این روش ما ایمیلی به ایمیل مورد نظر میدیم و پاسخ رو دریافت میکنیم اگر کد پاسخ برگشتی 550 یعنی ایمیل وجود نداره
سوکت فرایندی که از طریق اون میونید داده ها ارسال یا دریافت کنید کلاس tcpclient با استفاده از کلاس socket پیاده سازی شده
وقتی دو فرایند از طریق tcp با هم ارتباط برقرار میکنن مثل این میمونه که کانالی بین اون 2 تا برقرار میشه این کانال تا زمانی که یکی از 2 طرف اون رو نبده برقرار هست.توی شبکه داده به صورت آرایه ای از بایت ها منتقل میشن به همین خاطر هست هر داده ای رو میخوایم ارسال کنیم به آرایه ای از بایت ها تبدیل میکنیم.tcpclient یک کانکشن کلاینتی رو برای سرویس tcp شبکه فراهم میکنه که یک سری متد برای اتصال سرویس گیرنده tcp ،ارسال ودریافت داده ها رو فراهم میکنه
در اینجا یک اتصال به سرویس گوگل با پورت 25 که پورت smtp (ایمیل) هست برقرار میکنیم


TcpClient tClient = new TcpClient("gmail-smtp-in.l.google.com", 25);

NetworkStream جریانی از داده ها برای شبکه فراهم میکنه پس متغیر netStream هرجریانی که در tClient وجود داره رو دربرمیگیره


NetworkStream netStream = tClient.GetStream();

با StreamReader هم میتونیم جریانی از netStream رو بخونیم (کاراکترها )


StreamReader reader = new StreamReader(netStream);
ResponseString = reader.ReadLine();

در این قسمت درخواستی به سرور smtp داده میشه ونتیجه گرفته میشه


dataBuffer = BytesFromString("HELO " + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();
dataBuffer = BytesFromString("MAIL FROM:<hosseinhagh66@gmail.com>" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();

در این قمست نتیجه پیامی که به سرور گوگل دادیم رو میخونیم


dataBuffer = BytesFromString("RCPT TO:<" + TextBox1.Text.Trim() + ">" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();
if (GetResponseCode(ResponseString) == 550)
{
Response.Write("Mai Address Does not Exist !<br/><br/>");
Response.Write("<B><font color='red'>Original Error from Smtp Server :</font></b>" + ResponseString);
}


در این قسمت هم کانکشن رو میبندیم وdataBuffer با کلمه quite پر میکنیم به معنی خاتمه انجام کار البته الزامی نیست!


dataBuffer = BytesFromString("QUITE" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
tClient.Close();

این برای تست کردن ایمیل در گوگل میباشد برای یاهو یا سرویس های دیگه هم همین روش جواب میده( با آدرس tcpclient مربوط به خودشون پر میکنیم)

یه سوال
با این روش فقط درخواست میفرسته یا واقعا یه ایمیل با محتوای hello براش میفرسته؟ کاربر ایمیل رو میبینه؟

minaalamshahi
دوشنبه 07 مرداد 1392, 19:29 عصر
یه ایمیل میفرسته برای همون ایمیلی که در قسمت to داریم از ایمیلی که در قسمت from داریم

minaalamshahi
دوشنبه 07 مرداد 1392, 19:36 عصر
SmtpClient sc = new SmtpClient("smtp.mail.yahoo.com");

مگه این سرور یاهو نیست؟

minaalamshahi
سه شنبه 08 مرداد 1392, 13:27 عصر
یه راه واحدی نیست که بشه فقط با تغییر سرور وجود ایمیل رو چک کرد؟

forestasphalt
سه شنبه 08 مرداد 1392, 22:23 عصر
با سلام
smtp.mail.yahoo.com
SSL Port 465
توی این صفحه هم لیستی ازsmtp وpop ها سایت های مختلف رو میتونید مشاهده کنید
http://www.arclab.com/products/amlc/list-of-smtp-and-pop3-servers-mailserver-list.html
بعید میدونم راه واحی وجود داشته باشه(به جز ارسال ایمیل به آدرس مورد نظر) بلاخره باید یه جوری متوجه شد که این ایمیل ثبت شده هست یا نه