none
Проблемы с отправкой почты RRS feed

  • Вопрос

  • Здравствуйте уважаемые форумчане.
    Столкнулся с такой вот проблемой: не отправляется почта.
    Симптомы следующие:
    1. Код рабочий 100%, без проблем работает на десятке машин под управлением ОС Win XP(x32, x64) Win 7(x64).
    2. Код без проблем работает через проксю и через шлюз.
    3. Впервые о его неработоспособности мне сообщил друг, но т.к. код раньше исправно работал, я счел что дело в неверных настройках, пока не столкнулся с этим сам. Вот как это выглядит:
    - Компьютер друга: ОС Win7 x32, интернет подключение шлюзовое без авторизации (код не работает)
    - Мой рабочий компьютер: ОС Win7 x64, интернет подключение шлюзовое без авторизации (код не работает)
    И здесь и там ошибка "catch (SmtpException e)" e.Message = Сбой при отправке электронной почты.
    Примечательно: Мы с другом используем один и тот же шлюз для соединения с интернетом, у меня с домашнего компьютера все нормально работает ОС Win7 x64 (полностью идентичная сборка ОС с рабочим компьтером на котором код не работает), более того, есть еще один человек использующий тот же шлюз (ОС Win XP x32) у него тоже все работает без проблем.

    Результат: Прочитал огромаднейшую гору справок и форумов сделал все как говорилось и безрезультатно.
    Проверял соединение на предмет валидности софт следующий:

    SMTP Diagnostics - показывает что с соединением все в норме на всех бех исключения компьютерах (в т.ч. с компьютеров на которых отказывается отправлять письма моя программа), тестовое письмо этой программы без затруднений отправляется.

    Wireshark - вот здесь есть разница, к сожалению отключение SSL никчему не привело, но по крайней мере могу точно сказать (судя по просмотренным пакетам) что моя программа с проблемных компьютеров без затруднений устанавливает соединение с сервером, общается, переходит на SSL, сервер подтверждает переход, далее (естественно ничего не разобрать из за шифрования) половина пакетов идентична с пакетами отправляемыми с "исправного" компьютера, а дальше у исправного вторая половина пакетов, у проблемного конец связи.

    Вот код отправки:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net.Mail;
    namespace ConsoleApplication5
    {
        class Program
        {
            static void Main(string[] args)
            {
                MailMessage Message = new MailMessage();
                Message.Subject = "Тестовый заголовок";
                Message.Body = "Тестоое содержание";
                Message.To.Add(new MailAddress("Test@gmail.com"));
                Message.From = new System.Net.Mail.MailAddress("Test@gmail.com");
                SmtpClient Smtp = new SmtpClient("smtp.gmail.com");
                Smtp.EnableSsl = true;
                Smtp.Credentials = new System.Net.NetworkCredential($Login, $Password);
                try
                {
                    Smtp.Send(Message);
                    Console.WriteLine("Сообщение было успешно отправленно");
                    Console.Read();
                }
                catch (SmtpException e)
                {
                    Console.WriteLine("Не удалось отправить сообщение");
                    Console.WriteLine(e.Message);
                    Console.Read();
                }
            }
        }
    }
    P.S. и в завершение проверенные факты:
    - Антивирус непричем.
    - Брандмауэр не при делах.
    - Защитник Windows не виноват.
    - Порт открыт.
    - На другой порт пробовал.
    - На прямой IP SMTP сервера пробовал
    - Из под другой учетки пробовал.
    - Использовать другой EMail пробовал.
    - Перетряс код во всевозможных вариациях.
    - Версия фреймворка идентична.
    - Атоматику сетевых карт (Разбиение больших пакетов, проверка контрольных сумм) отключал.
    - С настройками майл клиента все ровно.
    - Антиспам клиента молчит.

    ХЕЛП!!!
          
    • Перемещено Tagore Bandlamudi 3 октября 2010 г. 0:32 MSDN Forums consolidation (От:Форум по .NET Framework)
    16 марта 2010 г. 4:32

Ответы

  • Имя рабочей машины случайно не на русском?


    Посмотри в отладке значение smtp.clientDomain? Русское? Если да, то может быть поможет вписать в app.config кусок вроде:
    <configuration>
      <system.net>
        <mailSettings>
          <smtp>
            <network
             clientDomain = "имя машины на английском"
            />
          </smtp>
        </mailSettings>
      </system.net>
    </configuration>

    • Помечено в качестве ответа JusteG 18 марта 2010 г. 7:55
    18 марта 2010 г. 6:52
  • Gmail точно использует SSL и точно не на стандартный порт. И точно надо сбрасывать Smtp.UseDefaultCredentials в false.
    Возьми код с http://stackoverflow.com/questions/32260/sending-email-in-c-net-through-gmail , не мучайся.
    using System.Net.Mail;
    
    var fromAddress = new MailAddress("from@gmail.com", "From Name");
    var toAddress = new MailAddress("to@example.com", "To Name");
    const string fromPassword = "fromPassword";
    const string subject = "Subject";
    const string body = "Body";
    
    var smtp = new SmtpClient
               {
                   Host = "smtp.gmail.com",
                   Port = 587,
                   EnableSsl = true,
                   DeliveryMethod = SmtpDeliveryMethod.Network,
                   UseDefaultCredentials = false,
                   Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
               };
    using (var message = new MailMessage(fromAddress, toAddress)
                         {
                             Subject = subject,
                             Body = body
                         })
    {
        smtp.Send(message);
    }
    
    • Помечено в качестве ответа JusteG 17 марта 2010 г. 18:15
    17 марта 2010 г. 17:25
  • В файл "app.config" в проекте.
    • Помечено в качестве ответа JusteG 21 марта 2010 г. 15:28
    21 марта 2010 г. 15:27

Все ответы

  • А если попробовать проанализировать трафик с отключенным шифрованием?
    Для связи [Mail]
    16 марта 2010 г. 7:33
  • Смена параметра Smtp.EnableSsl на false, не дает желаемого результата, по пакетам читается тоже самое.

    Вот примерный диалог компа и сервера.

    ЗАПРОС: "Привет"
    ОТВЕТ: "Привет"
    З: Я такойто...
    О: Вижу тебя, твой IP такой-то
    О: Список доступных команд такойто
    З: Переходим на TLS?
    О: Пошли...

    и дальше кракозябры...


    220 mx.google.com ESMTP 14sm34089fxm.13

    EHLO JusteG..

    250-mx.google.com at your service, [Мой IP шник]

    250-SIZE 35651584

    250-8BITMIME

    250-STARTTLS

    250-ENHANCEDSTATUSCODES

    250 PIPELINING

    STARTTLS

    220 2.0.0 Ready to start TLS

    .z....Q... ..9..8..5........
    .....3..2../.............................@......................U.w......iY..&?..4...1..EX.#..m....J...F..K.P.......s;a..'........Z.f..g..
    ..
    g+hG....Uw.dV.Ug..`-..lZU^.".......q...m..j..g0..c0..........Q...d.......,...0
    ..*.H..
    .....0..1.0...U....ZA1.0...U....Western Cape1.0...U....Cape Town1.0...U.
    ..Thawte Consulting cc1(0&..U....Certification Services Division1!0...U....Thawte Premium Server CA1(0&..*.H..
    .....premium-server@thawte.com0..
    070730000000Z.
    100729235959Z0h1.0...U....US1.0...U...
    California1.0...U...
    Mountain View1.0...U.
    .
    Google Inc1.0...U....smtp.gmail.com0..0
    ..*.H..
    .........0.......F!..s(..B.....zt..~8....lF......4.N@..-(%.*........;n.?...xVz.9...
    c...J.<.........K.a..6".d.........S.2.X^)....^>.{."..1.w..$.........0..0...U.%..0...+.........+.......0@..U...90705.3.1./http://crl.thawte.com/ThawtePremiumServerCA.crl02..+........&0$0"..+.....0...http://ocsp.thawte.com0...U.......0.0
    ..*.H..
    .........^5....P..zo..x. .......{..g.l....7.h'.......Q:.[.i.X.r.....<..d.@...&.gg...+.....,...G.C]g..}...A.B.D.!...~.`u...q...........(........................Vm.ww..>\sU./..Z..}.?_.fg....@~9...w3.f.`...5.tI....N.f...vz.Y.%.'.....
    3.~.^l..'...,.....=..}.o...W\M....:.6.A4I.x....
    .j{c;y..........
    .u..XG)...&{..u...`F.l=*......'.......... ~...%...._4...C..T8.......yf..l\......P.k.SYZ`..!-.E"..

    Вот все пакеты перехваченные софтиной Wireshark.
    P.S. Это компьютер с которого НЕ ИДЕТ отправка почты...

    16 марта 2010 г. 9:30
  • Посмотри на поля SmtpException (или SmtpFailedRecipientsException). там должны быть подробности ошибки.
    Примерный код c выводом всех деталей исключения есть в http://msdn.microsoft.com/en-us/library/system.net.mail.smtpexception.aspx .
    16 марта 2010 г. 13:07
  • Посмотри на поля SmtpException (или SmtpFailedRecipientsException). там должны быть подробности ошибки.
    Примерный код c выводом всех деталей исключения есть в http://msdn.microsoft.com/en-us/library/system.net.mail.smtpexception.aspx .

    Спасибо, завтра неприменно опробую на рабочем компьютере, о результатах отпишусь.
    16 марта 2010 г. 16:05
  • Вот что у меня получилось:
    Код:

    class Program
        {
            static StreamWriter SW = new StreamWriter("Log.txt");
            static void Main(string[] args)
            {
                MailMessage Message = new MailMessage();
                Message.Subject = "Тестовый заголовок...";
                Message.Body = "Текст сообщения...";
                Message.To.Add(new MailAddress("[EMail]"));
                Message.From = new System.Net.Mail.MailAddress("[EMail]");
                SmtpClient Smtp = new SmtpClient("smtp.gmail.com");
                Smtp.EnableSsl = true;
                Smtp.Credentials = new System.Net.NetworkCredential("[Login]", "[Pass]");
                try
                {
                    Smtp.Send(Message); // 25 строка =)
                    WriteConsoleInfo("Сообщение было успешно отправленно");
                }
                catch (SmtpFailedRecipientsException ex)
                {
                    for (int i = 0; i < ex.InnerExceptions.Length; i++)
                    {
                        SmtpStatusCode status = ex.InnerExceptions[i].StatusCode;
                        if (status == SmtpStatusCode.MailboxBusy ||
                            status == SmtpStatusCode.MailboxUnavailable)
                        {
                            WriteConsoleInfo("Delivery failed - retrying in 5 seconds.");
                            System.Threading.Thread.Sleep(5000);
                            Smtp.Send(Message);
                        }
                        else
                        {
                            WriteConsoleInfo("Failed to deliver message to " +
                                ex.InnerExceptions[i].FailedRecipient);
                        }
                    }
                }
                catch (Exception ex)
                {
                    WriteConsoleInfo("Exception caught in RetryIfBusy(): " +
                            ex.ToString());
                }
                SW.Close();
                Console.Read();
            }
            public static void WriteConsoleInfo(string Line)
            {
                Console.WriteLine(Line);
                SW.WriteLine(Line);
            }
        }
    Содержимое файла Log.txt при запуске с рабочего компьютера:

    Exception caught in RetryIfBusy(): System.Net.Mail.SmtpException: Сбой при отправке сообщения электронной почты. ---> System.FormatException: Недопустимый знак в заголовке электронной почты.
       в System.Net.BufferBuilder.Append(String value, Int32 offset, Int32 count)
       в System.Net.Mail.EHelloCommand.PrepareCommand(SmtpConnection conn, String domain)
       в System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
       в System.Net.Mail.SmtpClient.Send(MailMessage message)
       --- Конец трассировки внутреннего стека исключений ---
       в System.Net.Mail.SmtpClient.Send(MailMessage message)
       в ConsoleApplication5.Program.Main(String[] args) в C:\Users\JusteG\Documents\Visual Studio 2008\Projects\ConsoleApplication5\ConsoleApplication5\Program.cs:строка 25

    Тот же код с рабочего кмпьютера только с отключенным SSL

    Exception caught in RetryIfBusy(): System.Net.Mail.SmtpException: Сбой при отправке сообщения электронной почты. ---> System.Net.WebException: Невозможно разрешить удаленное имя: 'smtp.gmail.com'
       в System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6, Int32 timeout)
       в System.Net.PooledStream.Activate(Object owningObject, Boolean async, Int32 timeout, GeneralAsyncDelegate asyncCallback)
       в System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate asyncCallback)
       в System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout)
       в System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
       в System.Net.Mail.SmtpClient.Send(MailMessage message)
       --- Конец трассировки внутреннего стека исключений ---
       в System.Net.Mail.SmtpClient.Send(MailMessage message)
       в ConsoleApplication5.Program.Main(String[] args) в C:\Users\JusteG\Documents\Visual Studio 2008\Projects\ConsoleApplication5\ConsoleApplication5\Program.cs:строка 25

    Подклчил лаптоп к тому-же кабелю, настройки идентичные SSL = true

    Exception caught in RetryIfBusy(): System.Net.Mail.SmtpException: Server does not support secure connections.
       at System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
       at System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port)
       at System.Net.Mail.SmtpClient.GetConnection()
       at System.Net.Mail.SmtpClient.Send(MailMessage message)
       at ConsoleApplication5.Program.Main(String[] args)

    Тот же код с лаптопа при отключенном SSL

    Exception caught in RetryIfBusy(): System.Net.Mail.SmtpException: The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Must issue a STARTTLS command first. 16sm4468768fxm.3
       at System.Net.Mail.MailCommand.CheckResponse(SmtpStatusCode statusCode, String response)
       at System.Net.Mail.MailCommand.Send(SmtpConnection conn, Byte[] command, String from)
       at System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, SmtpFailedRecipientException& exception)
       at System.Net.Mail.SmtpClient.Send(MailMessage message)
       at ConsoleApplication5.Program.Main(String[] args)

    Тот же код с домашнего компьютера SSL = true

    Сообщение было успешно отправленно

    Тот же код с домашнего компьютера при отключенном SSL

    Сообщение было успешно отправленно


    P.S. Код компилился на одной машине (рабочий компьютер). Пробовал компилить на другой (домашний копьютер), результат идентичный. Версия фреймворка идентичная (устанавливал с одного инсталятора). Соединение везде шлюзовое, без авторизации. ОС на рабочем и домашнем идентичная (устанавливал с одного инсталятора) Win 7 x64 на лаптопе XP SP3 x32.
    17 марта 2010 г. 3:31
  • Gmail точно использует SSL и точно не на стандартный порт. И точно надо сбрасывать Smtp.UseDefaultCredentials в false.
    Возьми код с http://stackoverflow.com/questions/32260/sending-email-in-c-net-through-gmail , не мучайся.
    using System.Net.Mail;
    
    var fromAddress = new MailAddress("from@gmail.com", "From Name");
    var toAddress = new MailAddress("to@example.com", "To Name");
    const string fromPassword = "fromPassword";
    const string subject = "Subject";
    const string body = "Body";
    
    var smtp = new SmtpClient
               {
                   Host = "smtp.gmail.com",
                   Port = 587,
                   EnableSsl = true,
                   DeliveryMethod = SmtpDeliveryMethod.Network,
                   UseDefaultCredentials = false,
                   Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
               };
    using (var message = new MailMessage(fromAddress, toAddress)
                         {
                             Subject = subject,
                             Body = body
                         })
    {
        smtp.Send(message);
    }
    
    • Помечено в качестве ответа JusteG 17 марта 2010 г. 18:15
    17 марта 2010 г. 17:25
  • Сбасибо за помощь но пока что безрезультатно...
    Использовал ваш код, вот результат:
    Серверу SMTP требовалось защищенное соединение, или подлинность клиента не была установлена. Ответ сервера: 5.5.1 Authentication Required.
    Причем это с компьютера которого все норм отправлялось... С рабочего таже ерунда...

    Как же мне его заразу победить...

    17 марта 2010 г. 18:05
  • Стоп, отставить...
    Заработало!
    УРА!!!
    PashaPash спасибо за помощь...

    Еще один маленький ньюанс, как сюда добавить нескольких получаетелей?
    17 марта 2010 г. 18:15
  • Добавлять по одному вызовами message.To.Add(...). Или передать одной строчкой, разделенных ';' в конструктор MailMessage. По ситуации :)
    17 марта 2010 г. 20:58
  • Только не это...

    Неработает на рабочем компьютере!
    Ну что за...   ...слов нет просто!!!
    Давайте еще разок... что может быть не так?
    Код:

    class Program
        {
            static StreamWriter SW = new StreamWriter("Log.txt");
            static void Main(string[] args)
            {
                var fromAddress = new MailAddress("??@gmail.com", "??");
                var toAddress = new MailAddress("??@gmail.com", "??");
                const string fromPassword = "??";//*
                const string subject = "123";//*
                const string body = "Body";//*
                var smtp = new SmtpClient
                {
                    Host = "smtp.gmail.com",
                    Port = 587,//*
                    EnableSsl = true,//*
                    DeliveryMethod = SmtpDeliveryMethod.Network,//*
                    UseDefaultCredentials = false,//*
                    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)//*
                };
                var message = new MailMessage(fromAddress, toAddress);
                message.Subject = subject;//*
                message.Body = body;//*
                //message.SubjectEncoding = System.Text.Encoding.UTF32;
                try
                {
                    //WriteConsoleInfo(fromAddress.ToString());
                    //WriteConsoleInfo(toAddress.ToString());
                    //WriteConsoleInfo(subject.ToString());
                    //WriteConsoleInfo(body.ToString());
                    smtp.Send(message);
                    WriteConsoleInfo("Сообщение было успешно отправленно");
                }
                catch (SmtpFailedRecipientsException ex)
                {
                    for (int i = 0; i < ex.InnerExceptions.Length; i++)
                    {
                        SmtpStatusCode status = ex.InnerExceptions[i].StatusCode;
                        if (status == SmtpStatusCode.MailboxBusy ||
                            status == SmtpStatusCode.MailboxUnavailable)
                        {
                            WriteConsoleInfo("Delivery failed - retrying in 5 seconds.");
                            System.Threading.Thread.Sleep(5000);
                            smtp.Send(message);
                        }
                        else
                        {
                            WriteConsoleInfo("Failed to deliver message to " +
                                ex.InnerExceptions[i].FailedRecipient);
                        }
                    }
                }
                catch (Exception ex)
                {
                    WriteConsoleInfo("Exception caught in RetryIfBusy(): " +
                            ex.ToString());
                }
                SW.Close();
                Console.Read();
            }
            public static void WriteConsoleInfo(string Line)
            {
                Console.WriteLine(Line);
                SW.WriteLine(Line);
            }
        }
    Содержимое Log.txt

    Exception caught in RetryIfBusy(): System.Net.Mail.SmtpException: Сбой при отправке сообщения электронной почты. ---> System.FormatException: Недопустимый знак в заголовке электронной почты.

     /*
    Пробовал вообще отключать заголовок, перебирал кодировки заголовка всевозможные, результат идентичный, причем, что интересно, идентичный результат я получил если отключал все пукты помеченные в коде "//*"!!!
    */

       в System.Net.BufferBuilder.Append(String value, Int32 offset, Int32 count)
       в System.Net.Mail.EHelloCommand.PrepareCommand(SmtpConnection conn, String domain)
       в System.Net.Mail.EHelloCommand.Send(SmtpConnection conn, String domain)
       в System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
       в System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port)
       в System.Net.Mail.SmtpClient.GetConnection()
       в System.Net.Mail.SmtpClient.Send(MailMessage message)
       --- Конец трассировки внутреннего стека исключений ---
       в System.Net.Mail.SmtpClient.Send(MailMessage message)
       в ConsoleApplication6.Program.Main(String[] args) в F:\ConsoleApplication6\ConsoleApplication6\Program.cs:строка 42


    Теперь я точно знаю что дело в рабочем компе.
    Взял этот код, скомпилил на лаптопе, настроил сеть как на рабочем компьютере и воткнул в сеть вместо него, и все прекрасно, все отправляется.
    Причем этот код, вне зависимости от того скомпилен он на рабочем компе или на лаптопе, выдает одну и ту-же ошибку (см. выше).
    Теперь самое интересное: софтина Wireshark говорит что пакетов вообще нет!

    Что мне делать?
    Framework переустановить?
    Давайте победим эту тему наконец...
    18 марта 2010 г. 3:54
  • Имя рабочей машины случайно не на русском?


    Посмотри в отладке значение smtp.clientDomain? Русское? Если да, то может быть поможет вписать в app.config кусок вроде:
    <configuration>
      <system.net>
        <mailSettings>
          <smtp>
            <network
             clientDomain = "имя машины на английском"
            />
          </smtp>
        </mailSettings>
      </system.net>
    </configuration>

    • Помечено в качестве ответа JusteG 18 марта 2010 г. 7:55
    18 марта 2010 г. 6:52
  • Нет, имя машины на английском...

    От безисходности запихал прведенный вами код код в конфигурацию  компилятор матюкнулся, что я не объявил переменную "clientDomain" иии... все заработало... убираю код из конфигурации - опять не отправляется, добавляю - все работает.

    Даже не знаю как вас благодарить!
    Спасибо! Кто бы мог подумать...

    Кстати имя машины на самом деле английское (фактически).
    А на это выражение "smtp.clientDomain" компилятор говорит что clientDomain не входит в пространство методов smtp.

    18 марта 2010 г. 7:27
  • clientDomain - internal, но его можно посмотртеть в watch/quick watch.
    Проблема не обязательно в русских буквах. достаточно чтобы в имени машины/домена были какие-то недопустимые символы. Второй возможный вариант - имя машины нормальное, но где-то выше по конфигурации, в C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\ прописана такая же секция, но с неправильным clientDomain.
    18 марта 2010 г. 9:12
  • А куда писать этот код? У меня а же проблема.

    <configuration>
      <system.net>
        <mailSettings>
          <smtp>
            <network
             clientDomain = "имя машины на английском"
            />
          </smtp>
        </mailSettings>
      </system.net>
    </configuration>
    
    21 марта 2010 г. 11:48
  • В файл "app.config" в проекте.
    • Помечено в качестве ответа JusteG 21 марта 2010 г. 15:28
    21 марта 2010 г. 15:27
  • Если в свойствах компьютера напротив метки "компьютер" стоит название с русскими буквами типа MyComputer-ПК, то устранение в нем русских букв может решить проблему.


    Лично у меня это проблему решило.
  • Спасибо, я использовал порт - 465, почта из приложения не опправлялась. При использовании порта 587 все заработало.
    9 апреля 2016 г. 14:15
  • При отправке с google-аккаунта с двух-этапной аутентификацией, у меня заработало в таком виде: (переделанный скрипт от Vasily Gusev)

     $Server = "smtp.gmail.com" # SMTP Сервер
     $From = "so*****t@gmail.com" # Адрес отправителя
     [string[]]$To = "d******va@gmail.com"
      $Body = "test" # Тело сообщения
      $Subject = "test from powershell" # Тема сообщения
      #[System.IO.FileInfo[]]$Attachment=@(), # Вложения
      $port = 587
      $pass = "p***************** #временный пароль, который генерим в своем google-профиле для приложения 
      $user = "so*****t@gmail.com"
    Write-Verbose "Создаем объекты SmtpClient и MailMessage"
    $SmtpClient = New-Object Net.Mail.SmtpClient #($Server, $port)
    $Message = New-Object Net.Mail.MailMessage ($From, $To, $Subject, $Body)
    $Network = New-Object Net.Mail.SmtpDeliveryMethod
    Write-Verbose "Устанавливаем свойства этих объектов"
    $SmtpClient.Host = $Server
    $SmtpClient.Port = $port
    $SmtpClient.EnableSsl = $True  #обязательно включем SSL!
    #$SmtpClient.Timeout = 60
    $SmtpClient.DeliveryMethod = $Network
    $SmtpClient.UseDefaultCredentials = $false
    $SmtpClient.Credentials = New-Object System.Net.NetworkCredential($user, $pass) #Учетные данные для подключения
    #$SmtpClient.DeliveryFormat = "Instalator"
    $Message.Body = $Body
    $Message.Subject = $Subject
    $Message.From = $From
    Write-Verbose "Создаем и добавляем вложения"
    $Attachment | ForEach-Object {
    $a = New-Object System.Net.Mail.Attachment($_.fullname)
    $Message.Attachments.Add($a)
    }
    Write-Verbose "Добавляем получателей"
    $To | ForEach-Object {$Message.To.Add($_)}
    Write-Verbose "Отправляем сообщение"#>
    $smtpclient.Send($Message)
    Write-Verbose "Удаляем объекты"
    $Message.Dispose()