نمایش نتایج 1 تا 7 از 7

نام تاپیک: چک SmtpClient برای کانکت شدن به سرور

  1. #1

    Question چک SmtpClient برای کانکت شدن به سرور

    سلام دوستان خسته نباشید.

    من چطوری میتونم چک کنم که SmtpClient با یوزر و پسوردی که دادم میتونه کانکت بشه یا نه..

                    SmtpClient MyS = new SmtpClient("barnamenevis.org", 25);
    MyS.Credentials = new NetworkCredential("salam", "ir");


    ممنون و موفق باشید.

  2. #2

    نقل قول: چک SmtpClient برای کانکت شدن به سرور

    سلام..کسی نیست که مشکل ما رسیدگی کنه؟

  3. #3

  4. #4

    نقل قول: چک SmtpClient برای کانکت شدن به سرور

    ممنونم از راهنماییت اگه یه نمونه کد بزاری ممنون میشم تو MSDN هم نتونستم مثال پیدا کنم.

  5. #5

    نقل قول: چک SmtpClient برای کانکت شدن به سرور

    سلام کسی نمیتونه کمکی کنه؟

  6. #6

    نقل قول: چک SmtpClient برای کانکت شدن به سرور

    ما همچنان منتظر یاری بنفشتان هستیم.

  7. #7
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059

    نقل قول: چک SmtpClient برای کانکت شدن به سرور

    سلام
    شاید ساده ترین راه همان ارسال یک ایمیل به آدرس از پیش تعریف شده ای باشد.
    من که این راه را ترجیه میدهم!

    ولی همانطور که کاربر bermooda هم گفتند SMTP حاوی یک سری فرامین است که پس از باز کردن سوکت، شما میتوانید فرامین را به فرمت ASCII ارسال کنید و یک کد سه رقمی حاوی جواب سرور پس بگیرید.
    ولی روشهای اعتبار سنجی user و pass متنوعی وجود دارد و نوشتن کد کامل و پیشبینی شده برای این استانداردها و شرایط مختلف میتواند بسیار وقت گیر باشد.

    مثلاً با در نظر گیری ساده ترین شرایط ممکن کدی مثل این را برایتان نوشتم:

    private const string COMMAND_EHELLO = "EHLO {0}\r\n";
    private const string COMMAND_HELLO = "HELO {0}\r\n";
    private const string COMMAND_MAIL = "MAIL FROM: {0}\r\n";
    private const string COMMAND_AUTH = "AUTH LOGIN \r\n";
    //__________________________________________________ ______________________

    public static bool MailTest(string server, int port, string user, string pass, string from)
    {
    try
    {
    var ips = System.Net.Dns.GetHostEntry(server);
    if ((ips == null) || (ips.AddressList == null) || (ips.AddressList.Length <= 0)) return false;

    var add = new System.Net.IPEndPoint(ips.AddressList[0], port);
    using (var socket = new System.Net.Sockets.Socket(add.AddressFamily, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp))
    {
    socket.Connect(add);
    if (!socket.Connected) return false;

    if (ReadStatusCode(socket, 45) != System.Net.Mail.SmtpStatusCode.ServiceReady) return false;

    SendMessage(socket, string.Format(COMMAND_EHELLO, System.Net.Dns.GetHostName()));
    if (ReadStatusCode(socket, 45) != System.Net.Mail.SmtpStatusCode.Ok) return false;

    SendMessage(socket, COMMAND_AUTH);
    if (ReadStatusCode(socket, 45) != (System.Net.Mail.SmtpStatusCode)334) return false;

    SendMessage(socket, System.Convert.ToBase64String(System.Text.Encoding .ASCII.GetBytes(user)) + "\r\n");
    if (ReadStatusCode(socket, 45) != (System.Net.Mail.SmtpStatusCode)334) return false;

    SendMessage(socket, System.Convert.ToBase64String(System.Text.Encoding .ASCII.GetBytes(pass)) + "\r\n");
    if (ReadStatusCode(socket, 45) != (System.Net.Mail.SmtpStatusCode)235) return false;

    SendMessage(socket, string.Format(COMMAND_MAIL, from));
    if (ReadStatusCode(socket, 45) != System.Net.Mail.SmtpStatusCode.Ok) return false;
    }
    return true;
    }
    catch
    {
    return false;
    }
    }
    //__________________________________________________ ______________________

    private static void SendMessage(System.Net.Sockets.Socket socket, string value)
    {
    byte[] buffer = System.Text.Encoding.ASCII.GetBytes(value);
    socket.Send(buffer, 0, buffer.Length, System.Net.Sockets.SocketFlags.None);
    }
    //__________________________________________________ ______________________

    private static System.Net.Mail.SmtpStatusCode ReadStatusCode(System.Net.Sockets.Socket socket, int SecondsTimeout)
    {
    var endtimeout = DateTime.UtcNow.AddSeconds(SecondsTimeout);
    while ((socket.Available <= 0) && (DateTime.UtcNow < endtimeout))
    {
    System.Threading.Thread.Sleep(100);
    }

    int iread = socket.Available;
    if (iread <= 0) return System.Net.Mail.SmtpStatusCode.GeneralFailure;
    var buffer = new byte[iread];

    iread = socket.Receive(buffer, 0, iread, System.Net.Sockets.SocketFlags.None);
    if (iread < 3) return System.Net.Mail.SmtpStatusCode.GeneralFailure;

    return (System.Net.Mail.SmtpStatusCode)int.Parse(System.T ext.Encoding.ASCII.GetString(buffer, 0, 3));
    }
    //__________________________________________________ ______________________

    ولی همین کد ساده هم اگر سرور نیاز به SSL داشته باشد از مرحله HELLO فراتر نخواهد رفت!

    =====

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

    لینک مرتبط:
    http://www.networksorcery.com/enp/protocol/smtp.htm

    =====

    موفق باشید.
    آخرین ویرایش به وسیله __H2__ : شنبه 14 فروردین 1389 در 00:30 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •