На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Как автоматически определить сервер smtp? , Как автоматически определить сервер smtp?
    Здравствуйте! Нашел рабочий код:
    ExpandedWrap disabled
      public static void Send(string StrSubject,string StrBody,string StrTo)
      {
      MailMessage Message = new MailMessage();
      Message.Subject = StrSubject;
      Message.Body = StrBody;
      //Message.BodyEncoding = Encoding.GetEncoding("Windows-1254"); // Turkish Character Encoding// кодировка эсли нужно!
      Message.From = new System.Net.Mail.MailAddress("Почта");
      Message.To.Add(new MailAddress(StrTo));
      System.Net.Mail.SmtpClient Smtp = new SmtpClient("smtp.qip.ru", 25);//эсли здесь заполнено то строчка ниже не нужна!!!!
      //Smtp.Host = "smtp.qip.ru"; //например для gmail (smtp.gmail.com), mail.ru(smtp.mail.ru)
      Smtp.EnableSsl = true; // включение SSL для gmail нужно!!! для mail.ru не нада!!!
      Smtp.Credentials = new System.Net.NetworkCredential("Почта", "Пароль");
      Smtp.Send(Message);//отправка
      }

    Вопрос как автоматически заполнять SmtpClient? То есть определить когда почта относиться к mail.ru, а когда к gmail.com или к другим почтовым серверам?
      У меня есть два вопроса.
      1) Почему тема размещена в разделе .NET: Web приложения если это по сути общие вопросы по дот нету?
      2) У вас проблема определить по входящем адресу какая почта: test1@gmail.com и например test1234@mail.ru? Я вас правильно понял?

      Если у вас проблема со вторым пунктом, то для тех адресов которые вы знаете вам нужно просто проверить адрес регуляркой на шаблоны тех почтовых серверов которые вы будете хранить у себя.
      Либо для каждого почтового сервера хранить настройки например в БД
      ExpandedWrap disabled
        public interface IEmailServerSettings
        {
            /// <summary>
            /// Сервер
            /// </summary>
            string Address { get; set; }
         
            /// <summary>
            /// Порт
            /// </summary>
            int Port { get; set; }
         
            /// <summary>
            /// Имя пользователя
            /// </summary>
            string UserName { get; set; }
              
            /// <summary>
            /// Пароль пользователя
            /// </summary>
            string UserPassword { get; set; }
         
            /// <summary>
            /// Признак необходимости использовать SSL
            /// </summary>
            bool UseSsl { get; set; }
         
            /// <summary>
            /// Тип сервера настроек электронной почты
            /// </summary>
            EmailServerType EmailServerType { get; set; }
        }

      Пример интерфейса который вам может подойти.
        У меня проблема как определить по входящем адресу какая почту: test1@gmail.com и например test1234@mail.ru? Предлогают по днс имени находить Smtp, но я не могу найти толковый код.
          Держи пример. Подгонишь под свой вариант. Сел набросал только что. Я вижу реально что на форуме ответ получить в последнее время тупо нереально. В .NET разделах отвечает в основном 2-3 человека, и то очень редко :( .
          ExpandedWrap disabled
            class Program
                {
                    static void Main(string[] args)
                    {
                        var emailsSettings = new List<IEmailServerSettings>(new[] {
                                new EmailServerSettings
                                    {
                                        Pattern = "[.\\-_a-z0-9]+@gmail.com",
                                        Port = 25
                                    },
                                new EmailServerSettings
                                    {
                                        Pattern = "[.\\-_a-z0-9]+@gmail.com",
                                        Port = 995
                                    },
                                new EmailServerSettings
                                    {
                                        Pattern = "[.\\-_a-z0-9]+@([a-z0-9][\\-a-z0-9]+\\.)+[a-z]{2,6}"
                                    }
                            });
             
                        string email = "test1234@gmail.com";
                        foreach (var settings in emailsSettings)
                        {
                            if (settings.IsValid(email))
                            {
                                //Вы полняем нужную нам функцию
                                Send(string.Empty, string.Empty, string.Empty, settings);
                            }
                        }
             
                        Console.ReadLine();
                    }
             
                    public static void Send(string StrSubject, string StrBody, string StrTo, IEmailServerSettings emailServerSettings)
                    {
                        MailMessage Message = new MailMessage();
                        Message.Subject = StrSubject;
                        Message.Body = StrBody;
                        //Message.BodyEncoding = Encoding.GetEncoding("Windows-1254"); // Turkish Character Encoding// кодировка эсли нужно!
                        Message.From = new System.Net.Mail.MailAddress(emailServerSettings.Address);
                        Message.To.Add(new MailAddress(StrTo));
                        System.Net.Mail.SmtpClient Smtp = new SmtpClient(emailServerSettings.Address, emailServerSettings.Port);//эсли здесь заполнено то строчка ниже не нужна!!!!
                        Smtp.EnableSsl = emailServerSettings.UseSsl; // включение SSL для gmail нужно!!! для mail.ru не нада!!!
                        if (string.IsNullOrEmpty(emailServerSettings.UserName))
                        {
                            Smtp.Credentials = new System.Net.NetworkCredential(emailServerSettings.UserName, emailServerSettings.UserPassword);
                        }
                        Smtp.Send(Message);//отправка
                    }
                }
             
                public interface IEmailServerSettings
                {
                    /// <summary>
                    /// Сервер
                    /// </summary>
                    string Address { get; set; }
             
                    /// <summary>
                    /// Порт
                    /// </summary>
                    int Port { get; set; }
             
                    /// <summary>
                    /// Имя пользователя
                    /// </summary>
                    string UserName { get; set; }
             
                    /// <summary>
                    /// Пароль пользователя
                    /// </summary>
                    string UserPassword { get; set; }
             
                    /// <summary>
                    /// Признак необходимости использовать SSL
                    /// </summary>
                    bool UseSsl { get; set; }
             
                    /// <summary>
                    /// Валидация адреса
                    /// </summary>
                    string Pattern { get; set; }
             
                    /// <summary>
                    /// Проверка емейл на валидность
                    /// </summary>
                    /// <param name="email"></param>
                    /// <returns></returns>
                    bool IsValid(string email);
                }
             
                public class EmailServerSettings : IEmailServerSettings
                {
                    public string Address { get; set; }
             
                    public int Port { get; set; }
             
                    public string UserName { get; set; }
             
                    public string UserPassword { get; set; }
             
                    public bool UseSsl { get; set; }
             
                    public string Pattern { get; set; }
             
                    public bool IsValid(string email)
                    {
                        var isMatch = Regex.Match(email, Pattern, RegexOptions.IgnoreCase);
                        return isMatch.Success;
                    }
                }
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0208 ]   [ 16 queries used ]   [ Generated: 24.04.24, 08:00 GMT ]