none
SendMail. How send mail, where error windows? RRS feed

  • Вопрос

  • Goode day. Sai me where error. Here code, but is exception and message not send. Help me.

                MailAddress to = new MailAddress("avrudoi@yandex.ru");
                MailAddress from = new MailAddress("Nevedimka@contoso.com");
                MailMessage message = new MailMessage(from, to);
                message.Subject = "Using the new SMTP client.";
                message.Body = @"Using this new feature, you can send an e-mail message from an application very easily.";
                // Use the application or machine configuration to get the 
                // host, port, and credentials.
                SmtpClient client = new SmtpClient();
                Console.WriteLine("Sending an e-mail message to {0} at {1} by using the SMTP host={2}.",
                    to.User, to.Host, client.Host);
                try
                {
                    client.Send(message);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Exception caught in CreateTestMessage3(): {0}",
                          ex.ToString());
                }

    16 июня 2013 г. 13:12

Ответы

  • Все оно работает :)

    Создал консольку, вот полный исходный код:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Mail;
    using System.Windows.Forms;
    
    namespace ConsoleAppMail
    {
        class Program
        {
            private static void Main()
            {
                SendMessage("Имя", "почта", "тело сообщения",
                            "пароль от почты", "почта получателя", "тема письма");
    
                // проверял на gmail.com работает
            }
    
            public static void SendMessage(string strName, string strLog, string strText, string strPass, string outMail,
                             string strSubject)
            {
                try
                {
                    // обнулим на всяк случай
                    string smtp = "";
                    int port = 0;
    
                    // здесь не уверен на счет портов
                    // может (скорее всего) они неправильны, но если что 
                    // это все легко гуглится ;) парвильный только gmail.com
                    var mailCoding = new Dictionary<string, int>
                {
                    {"gmail.com", 587},
                    {"yandex.ru", 225},
                    {"mail.ru", 235},
                    {"list.ru", 254},
                    {"inbox.ru", 215},
                    {"bk.ru", 255}
                };
    
                    // поиск нужного порта и smtp при отправке
                    // можно так сделать, но нет мы КРУТЫЕ
                    // и напишем с помощью LINQ
                    //foreach (var kvp in mailCoding)
                    //{
                    //    if (strLog.IndexOf(kvp.Key, StringComparison.Ordinal) > -1)
                    //    {
                    //        smtp = "smtp." + kvp.Key;
                    //        port = kvp.Value;
                    //    }
                    //}
                    foreach (var kvp in mailCoding.Where(kvp => strLog.IndexOf(kvp.Key, StringComparison.Ordinal) > -1))
                    {
                        smtp = "smtp." + kvp.Key;
                        port = kvp.Value;
                    }
    
                    using (var mailMessage = new MailMessage(strName + " <" + strLog + ">", outMail))
                    {
                        mailMessage.Subject = strSubject; // тема письма
                        mailMessage.Body = strText; // письмо
                        mailMessage.IsBodyHtml = false; // без html, но можно включить
                        using (var sc = new SmtpClient(smtp, port))
                        {
                            sc.EnableSsl = true;
                            sc.DeliveryMethod = SmtpDeliveryMethod.Network;
                            sc.UseDefaultCredentials = false;
                            sc.Credentials = new NetworkCredential(strLog, strPass);
                            sc.Send(mailMessage);
                        }
                    }
                }
                catch (Exception exception)
                {
                    MessageBox.Show(exception.Message, "Ошибка");
                }
            }
    
        }
    }
    

    16 июня 2013 г. 18:58
  • Пропишите в блоке 

    using (var sc = new SmtpClient(smtp, port))

    {

    .....

    sc.Timeout = 30000;

    .....

    }

    И если вы отправляете письма не с gmail то исправьте smtp и порт.

    16 июня 2013 г. 19:26

Все ответы

  • чтото у меня ваш код нетработает все вроде пральвильно.

      public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                SendMessage("проба", "proba");
            }
    
            public void SendMessage(string strText, string TemaMail)
    {
        try
        {
            // обнулим на всяк случай
            //string smtp = "";
            //int port = 0;
     
            // здесь не уверен на счет портов
            // может (скорее всего) они неправильны, но если что 
            // это все легко гуглится ;) парвильный только gmail.com
            /*var mailCoding = new Dictionary<string int="">
                {
                    {"gmail.com", 587},
                    {"yandex.ru", 225},
                    {"mail.ru", 235},
                    {"list.ru", 254},
                    {"inbox.ru", 215},
                    {"bk.ru", 255}
                };
     
            // поиск нужного порта и smtp при отправке
            // можно так сделать, но нет мы КРУТЫЕ
            // и напишем с помощью LINQ
            //foreach (var kvp in mailCoding)
            //{
            //    if (strLog.IndexOf(kvp.Key, StringComparison.Ordinal) > -1)
            //    {
            //        smtp = "smtp." + kvp.Key;
            //        port = kvp.Value;
            //    }
            //}
            foreach (var kvp in mailCoding.Where(kvp => strLog.IndexOf(kvp.Key, StringComparison.Ordinal) > -1))
            {
                smtp = "smtp." + kvp.Key;
                port = kvp.Value;
            }
     */
            using (var mailMessage = new MailMessage("*@yandex.ru", "*@yandex.com"))// куда, кто
            {
                mailMessage.Subject = TemaMail; // тема письма
                mailMessage.Body = strText; // письмо
                mailMessage.IsBodyHtml = false; // без html, но можно включить
                using (var sc = new SmtpClient("smtp.yandex.ru", 465))
                {
                    sc.EnableSsl = true;
                    sc.DeliveryMethod = SmtpDeliveryMethod.Network;
                    sc.UseDefaultCredentials = false;
                    sc.Credentials = new NetworkCredential("mishanak941", "*");// кто, пароль
                    sc.Send(mailMessage);
                }
            }
        }
        catch (Exception exception)
        {
            MessageBox.Show(exception.Message, "Ошибка");
        }
            }
        }


    • Изменено avrudoi 16 июня 2013 г. 18:14
    16 июня 2013 г. 18:11
  • а что смоим кодом, он работает, только выдает сообщение о том, что искает время ожидания, вчем может быть проблемма 
    16 июня 2013 г. 19:18