powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Отправка email через gmail.com + System.Net.Mail фигня какая-то.
70 сообщений из 70, показаны все 3 страниц
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38850926
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ранее использовал CDO.Message для этих целей:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
'!!! кодVB6
Option Explicit

Private Sub Command1_Click()
  SendTestMailCDO
End Sub

Private Sub SendTestMailCDO()
  Const email_To As String = "recipient@bk.ru"
  Const email_From As String = "sender@gmail.com"
  Const smtp_Server As String = "smtp.gmail.com"
  Const smtp_Username As String = "sender@gmail.com"
  Const smtp_Password As String = "password"

  Dim o_Mess As CDO.Message 'As Object
  Dim v_Conf As String
  
  '-------------------------------
  'composing message with CDO
  On Error GoTo ErrOfSend
  Set o_Mess = CreateObject("CDO.Message")
  v_Conf = "http://schemas.microsoft.com/cdo/configuration/"
  With o_Mess
    .To = email_To
    .From = email_From
    .Subject = "Test subject"
    .TextBody = "Test body"
    '.AddAttachment Trim(TextAttach.Text)
    With .Configuration.Fields
      .Item(v_Conf & "sendusing") = 2
      .Item(v_Conf & "smtpserver") = smtp_Server
      .Item(v_Conf & "smtpauthenticate") = 1 '1-использовать
      .Item(v_Conf & "sendusername") = smtp_Username
      .Item(v_Conf & "sendpassword") = smtp_Password
      .Item(v_Conf & "smtpserverport") = "465"
      .Item(v_Conf & "smtpusessl") = True 'использовать SSL
      .Item(v_Conf & "smtpconnectiontimeout") = 60 'пока считаем что 60, потом м.б. добавим параметр
      .Update
    End With
    .Send
  End With
  MsgBox "Пробное сообщение на адрес " & o_Mess.To & " было успешно отправлено!", vbInformation + vbOKOnly, "Email отправлен"
  Exit Sub
ErrOfSend:
  MsgBox "Отправка письма завершилась неудачей." & vbCrLf & "Код ошибки: " & Err.Number & vbCrLf & Err.Description, _
   vbCritical + vbOKOnly, "Отправка email не удалась."
End Sub



Изучаю, что есть в .Net.
System.Web.Mail (обертка над CDO) типа устарел.
Но есть типа System.Net.Mail -его и пользуйте.
С обычным SMTP (25-й порт) проблем не увидел, пробую gmail.com
Пример упростил до предела:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  Private Sub ButtonSendSimple_Click(sender As Object, e As EventArgs) Handles ButtonSendSimple.Click
    Try
      Dim client As New SmtpClient()
      client.Host = "smtp.gmail.com"
      client.Port = 465
      client.Credentials = New System.Net.NetworkCredential("sender@gmail.com", "password")
      client.EnableSsl = True

      Dim message As New MailMessage(New MailAddress("sender@gmail.com"), New MailAddress("recipient@bk.ru"))
      message.Body = "Test body"
      message.Subject = "Test subject"

      client.Send(message)

      MsgBox("OK")
    Catch
      MsgBox(Err.Description)
    End Try
  End Sub


Не работает зараза.
Время ожидания операции истекло.
Гуглил. Нашел вот это:
http://stackoverflow.com/questions/32260/sending-email-in-net-through-gmail

Поменял порт:
Код: vbnet
1.
client.Port = 587


Заработало.

Попытался ради интереса воткнуть 587- порт в старый CDO-код: .Item(v_Conf & "smtpserverport") = "587"
Пишет: транспорту не удалось подключиться к серверу, а с 465-м работает.

И вот я честно этой фигни не догоняю.
SSL-Порт всю жизнь был по дефолту 465, во всех SMTP-клиентах (это справедливо для gmail, для yandex.ru, для mail.ru) откуда взялся 587? Что не так делаю? Что не понимаю?

Я конечно не спец в этих почтах, но элементарная неглючная ф-ция отправки через стандартный SMTP(с SSL или без) мне необходима.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38850984
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851010
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser,

похоже на то, как всегда чего-то не хватает.
По твоей ссылке дальше еще явно на эту тему сказано:
SmtpClient.EnableSsl Property An alternate connection method is where an SSL session is established up front before any protocol commands are sent. This connection method is sometimes called SMTP/SSL, SMTP over SSL, or SMTPS and by default uses port 465. This alternate connection method using SSL is not currently supported.
Попробую счас к CDO напрямую подключиться (без "классов"), посмотрю насколько в .Net это прокатит.
System.Web.Mail они не рекомендуют, и в этой старой обертке похоже не все гладко с Encording (если UTF-8 использовать), ее точно не хочу.
Использовать System.Net.Mail + TLS + 587-й порт м.б. и вариант, но это нестандартный подход (user-обыватель привык к 465-му).
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851023
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно говоря не понял, в чем именно проблема? Какая разница, какой там порт, если все работает?

В инструкциях четко сказано, что для SSL вам нужен 465, для TLS - 587. SmtpClient поддерживает explicit ssl, что означает соединение по незашифрованному каналу, а затем starttls. SSL/465 устарел.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851025
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77но это нестандартный подход (user-обыватель привык к 465-му).
С какой стати ваши юзеры вообще должны знать про номер порта?
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851042
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Arm79]Дмитрий77С какой стати ваши юзеры вообще должны знать про номер порта?
Надеюсь вы не предлагаете "вшивать" номер порта в код?
Вообще-то в любом SMTP клиенте SMTP-сервер настраивается путем указания сервера, порта, user-password, ssl(да/нет).
И настраивается он как правило по инструкции от провайдера.
А инструкции вот они.
Помощь Почта Mail.Ru Доступ из почтовых программ
Настройка почтовых программ Яндекс Помощь
Arm79SSL/465 устарел
Да неужели в самом деле?
Во всех инструкциях все так и пестрит 465-м портом, а 587 если где и упомянается то лишь местами и вскользь.

Ну я проверил, не знаю как в C#, но в VB.Net классический CDO-код (позднее связывание без ранней ссылки на COM-объект) работает на ура, нарочно протестировал как x64 так и x86 код на Win 8.1, а также на XP(x86):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
  Private Sub ButtonSendCDO_Click(sender As Object, e As EventArgs) Handles ButtonSendCDO.Click
    Try
      Dim o_Mess As Object = CreateObject("CDO.Message")
      Dim v_Conf As String = "http://schemas.microsoft.com/cdo/configuration/"
      With o_Mess
        '===(В-1)код необходим для добавления utf-8 в Subject(если .AddAttachment стоит до .TextBodyPart.Charset)===
        .BodyPart.Charset = "utf-8"
        '===(В-1)код необходим для добавления utf-8 в Subject(если .AddAttachment стоит до .TextBodyPart.Charset)===
        .To = "Получатель<recipient@bk.ru>;"
        .From = "Отправитель<sender@gmail.com>;"
        .Subject = "Тема сообщения"
        .TextBody = "Текст сообщения"
        .TextBodyPart.Charset = "utf-8"
        .AddAttachment(IO.Path.Combine(Application.StartupPath, "readme.txt")) '.Charset = "utf-8"
        With .Configuration.Fields
          .item(v_Conf & "sendusing") = 2
          .item(v_Conf & "smtpserver") = "smtp.gmail.com"
          .item(v_Conf & "smtpserverport") = 465
          .item(v_Conf & "smtpauthenticate") = 1 '1-использовать
          .item(v_Conf & "sendusername") = "sender@gmail.com"
          .item(v_Conf & "sendpassword") = "password"
          .item(v_Conf & "smtpusessl") = True 'использовать SSL
          .item(v_Conf & "smtpconnectiontimeout") = 60 'пока считаем что 60, потом м.б. добавим параметр
          .Update()
        End With
        .Send()
      End With
      MsgBox("Test mail was sent successfully!", vbInformation + vbOKOnly, "Email was sent")
    Catch
      MsgBox("Sending mail...Failed." & vbCrLf & "Error code: " & Err.Number & vbCrLf & Err.Description, _
       vbCritical + vbOKOnly, "Sending mail failed.")
    End Try
  End Sub



Как вариант "НЕРЕКОМЕНДУЕМЫЙ" System.Web.Mail - тоже все работает (ну это же тоже самое):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
  Private Sub ButtonWebMail_Click(sender As Object, e As EventArgs) Handles ButtonWebMail.Click
    Try
      Dim Message As System.Web.Mail.MailMessage = New System.Web.Mail.MailMessage()
      Dim v_Conf As String = "http://schemas.microsoft.com/cdo/configuration/"
      With Message
        .To = "Получатель<recipient@bk.ru>;"
        .From = "Отправитель<sender@gmail.com>;"
        .Subject = "Тема сообщения"
        .Body = "Текст сообщения"
        .BodyFormat = Web.Mail.MailFormat.Text
        .BodyEncoding = System.Text.Encoding.UTF8
        .Attachments.Add(New Web.Mail.MailAttachment(IO.Path.Combine(Application.StartupPath, "readme.txt")))
        With .Fields
          .Item(v_Conf & "sendusing") = 2
          .Item(v_Conf & "smtpserver") = "smtp.gmail.com"
          .Item(v_Conf & "smtpserverport") = 465
          .Item(v_Conf & "smtpauthenticate") = 1 '1-использовать
          .Item(v_Conf & "sendusername") = "sender@gmail.com"
          .Item(v_Conf & "sendpassword") = "password"
          .Item(v_Conf & "smtpusessl") = True 'использовать SSL
          .Item(v_Conf & "smtpconnectiontimeout") = 60 'пока считаем что 60, потом м.б. добавим параметр
        End With
      End With
      Web.Mail.SmtpMail.SmtpServer = "smtp.gmail.com"
      Web.Mail.SmtpMail.Send(Message)
      MsgBox("Test mail was sent successfully!", vbInformation + vbOKOnly, "Email was sent")
    Catch
      MsgBox("Sending mail...Failed." & vbCrLf & "Error code: " & Err.Number & vbCrLf & Err.Description, _
       vbCritical + vbOKOnly, "Sending mail failed.")
    End Try
  End Sub


Но CreateObject("CDO.Message") мне честно нравится больше.

По хорошему сделать выбор в настройках что использовать:
System.Net.Mail или CDO.Message
(мало какие несовместимости в частных случаях)
А с другой стороны много вариантов -> лишняя путаница для пользователя.

В чем преимущество System.Net.Mail ?
Возможность асинхронного запуска (client.SendAsync)?
Ну при том что в .Net с многопоточностью проблем нет, можно и CDO-отправку в отдельном потоке запустить, если уж это критично с т.зр. стабильности приложения (чтоб не стопорилось пока не отправит).
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851045
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Во всех инструкциях все так и пестрит 465-м портом, а 587 если где и упомянается то лишь местами и вскользь.
Насколько я понимаю, что 25 порт, что 587 - это стандартные порты для SMTP (без SSL). Проверил, для яндекса 587 порт вполне рабочий. С mail.ru пока не разобрался.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851050
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

>Насколько я понимаю, что 25 порт, что 587 - это стандартные порты для SMTP (без SSL).

похоже вы правы.
Так понимаю 587 "придумали" как альтернативу 25-му порту (который всех достал из-за спама и т.п.).
Но у моего хостинг-провайдера например 587-й порт не работает (обычный SMTP без SSL через 25-й порт).

client.EnableSsl = True в System.Net.Mail реализует альтернативный способ "SSL-авторизации". Путем посылки STARTTLS для переключения в зашифрованный канал из незашифрованного.

И gmail кстати по этому методу и через 25-й порт работает - только что проверил.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  Private Sub ButtonSendSimple_Click(sender As Object, e As EventArgs) Handles ButtonSendSimple.Click
    Try
      Dim client As New SmtpClient()
      client.Host = "smtp.gmail.com"
      client.Port = 25 'или 587 !!! оба варианта рабочие
      client.Credentials = New System.Net.NetworkCredential("sender@gmail.com", "password")
      client.EnableSsl = True

      Dim message As New MailMessage(New MailAddress("sender@gmail.com"), New MailAddress("recipient@bk.ru"))
      message.Body = "Test body"
      message.Subject = "Test subject"

      client.Send(message)

      MsgBox("OK")
    Catch
      MsgBox(Err.Description)
    End Try
  End Sub


Но классическим SSL-методом все-таки считаю является коннект на (по дефолту) 465-й порт с изначальным стартом SSL-сессии.
И этот метод как раз в System.Net.Mail не поддерживается.
И это непорядок.

А интересно, STARTTLS в CDO поддерживается?
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851068
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но вот еще что интересно (касательно gmail):

CDO (.item(v_Conf & "smtpusessl") = True): работает через 25-й порт (!!!) и через 465-й порт, через 587-не работает (!)-Error:транспорту не удалось подключиться к серверу

System.Net.Mail (client.EnableSsl = True): работает через 25-й порт и через 587-й порт, через 465-й -не работает - Время ожидания операции истекло.

Пробую "Почта Windows==Outlook Express"(ssl=true): работает через 25-й,465-й,587-й порты (и gmail и mail.ru)

Погуглил, некоторые жалуются на CDO что не работает (сервер требует STARTTLS -Explicit SSL),
другие жалуются на System.Net.Mail что не работает (сервер хочет Implicit SSL)

http://www.systemnetmail.com/faq/5.3.aspx

http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx

Получается, по хорошему надо имплементировать оба варианта, чтоб в случае "проблемного" сервера (только Implicit SSL или только Explicit SSL) юзер смог выбрать единственный рабочий для него вариант.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851121
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77надо имплементировать оба варианта
или поступать проще - не использовать ssl
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851133
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79или поступать проще - не использовать ssl Ну, лично я то не против.
Ток забыли посоветоваться с gmail, yandex и mail.ru, также с юзерами которые все это пользуют.
Плюс куча контор со своими SMTP, которые на секретности конечно помешаны, но при этом могут поддерживать "только Implicit " или "только Explicit/STARTTLS". Были у меня клиенты, которые претензии по этому поводу пытались предъявлять, типа с их SMTP не работает (вероятно у них был SSL +Explicit). Послал, типа моя прога не SMTP-клиент, а серверов по миру навалом -используйте другой. Но если есть возможность быстро имплементировать, почему нет.
P.S. Hotmail кажется только Explicit/STARTTLS поддерживает, надо б проверить для интереса.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851138
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77P.S. Hotmail кажется только Explicit/STARTTLS поддерживает, надо б проверить для интереса.
Не, работает
CDO+Implicit SSL по 25-му порту
System.Web.Mail +Explicit SSL по 25-му и 587-му порту
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851151
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Дмитрий77P.S. Hotmail кажется только Explicit/STARTTLS поддерживает, надо б проверить для интереса.
Не, работает
CDO+Implicit SSL по 25-му порту
System.Web.Mail +Explicit SSL по 25-му и 587-му порту

Всё работает, чуток только надо задействовать мозг и google:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
    public static bool SendGmail(string subject, string content, string[] recipients, string from)
    {
        bool success = recipients != null && recipients.Length > 0;

        if (success)           
        {
            SmtpClient gmailClient = new SmtpClient
            {
                Host = "smtp.gmail.com",
                Port = 587,
                EnableSsl = true,
                UseDefaultCredentials = false,
                Credentials = new System.Net.NetworkCredential("******", "*****")             
            };


            using (MailMessage gMessage = new MailMessage(from, recipients[0], subject, content))
            {
                for (int i = 1; i < recipients.Length; i++)
                    gMessage.To.Add(recipients[i]);

                try
                {
                    gmailClient.Send(gMessage);
                    success = true;
                }
                catch (Exception) { success = false; }
            }
        }
        return success;
    }




Искренние соболезнования людям, у которых на уровне провайдера отключены все поисковики, включая гугл, яндекс и майлру. Держитесь там.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851153
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё есть всякие разные NuGet пакеты, если чо-то там в Net.Mail не заводится, например http://opaquemail.org/
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851155
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851156
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Прочел бы тему внимательно :-) Никто не говорит, что не работает gmail... Речь о том, что на порту 465, который gmail поддерживает, smtpclient не работает, так как там реализован режим implicit ssl. А порты 25/587 - это exlicit ssl (через starttls).

Цитата по smtpclient
авторКласс SmtpClient поддерживает только расширение службы SMTP для Secure SMTP через протокол TLS, определенный в RFC 3207. В этом режиме сеанс SMTP начинается в незашифрованном канале, затем от клиента к серверу дается команда STARTTLS, чтобы переключиться на безопасное соединение с помощью протокола SSL. См. RFC 3207 опубликованный IETF для получения дополнительных сведений.
Методом альтернативного подключения называется тот, при котором сеанс SSL устанавливается заранее, до отправки команд протокола. Этот способ подключения иногда называют SMTP/SSL, SMTP через SSL или SMTPS. По умолчанию для него используется порт 465. Этот альтернативный способ подключения с помощью протокола SSL в настоящее время не поддерживается.

PS Приведи пример с mail.ru
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851157
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя лично я проблем, используя System.Net.Mail, не испытывал ни с одним почтовым сервером. Даже обидно как-то.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851158
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttХотя лично я проблем, используя System.Net.Mail, не испытывал ни с одним почтовым сервером
Arm79PS Приведи пример с mail.ru
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851161
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79PS Приведи пример с mail.ru

С хабора :

AigizKЗнакомая история. Mail.ru то же теперь работает только через SSL. И там та же проблема.
Причина из за того что SmtpClient поддерживает только Explicit SSL. Поэтому он должен сперва коннектиться к 25 порту, а потом начинать шифровать. Опять же, при условие что сервер так настроен. А если сервер настроен, чтоб получить сразу SSL/TLS, тогда без бубна отправить письмо не получиться.
Вдруг кому пригодится:
stackoverflow.com/questions/1011245/how-can-i-send-emails-through-ssl-smtp-with-the-net-framework
stackoverflow.com/questions/172811/is-there-a-way-i-can-tell-whether-an-smtp-server-is-expecting-a-client-to-connect/172860#172860

Я говорю лишь о том, что тема в интернетах уже обсосана до дыр. Даже не так. До ДЫР. Ну конечно, стоит ещё разочек помусолить
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851162
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

System.Net.Mail does support "explicit SSL" (also known as "StartTLS" - usually on port 465), but not "implicit SSL" (aka "SMTPS" - usually on port 587).
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851164
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttArm79,

System.Net.Mail does support "explicit SSL" (also known as "StartTLS" - usually on port 465), but not "implicit SSL" (aka "SMTPS" - usually on port 587).
сам то понял, что цитируешь?


System.Net.Mail does support "explicit SSL" (also known as "StartTLS" - usually on port 465), but not "implicit SSL" (aka "SMTPS" - usually on port 587) .
И при этом ты даешь код, где все работает с портом 587:

hVostt
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
SmtpClient gmailClient = new SmtpClient
            {
                Host = "smtp.gmail.com",
                Port = 587,
                EnableSsl = true,
                UseDefaultCredentials = false,
                Credentials = new System.Net.NetworkCredential("******", "*****")             
            };
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851169
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79И при этом ты даешь код, где все работает с портом 587:

Да, и этот код прекрасно работает!
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851171
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttArm79И при этом ты даешь код, где все работает с портом 587:

Да, и этот код прекрасно работает!
а ты попробуй с портом 465 :-)

в этой теме как раз таки и говорится, что с 587/25 портом все работает, но в "старом" режиме, с предварительной шифрацией канала, smtpclient не работает
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851175
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

На гуглопочту почта может не отправляться ещё по нескольким причинам:

1. Нужно подтверждение, если почтой давно не пользовались, например, через СМС.
2. Ещё нужно, чтобы был включён в настройках POP (вроде бы).
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851177
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79а ты попробуй с портом 465 :-)

в этой теме как раз таки и говорится, что с 587/25 портом все работает, но в "старом" режиме, с предварительной шифрацией канала, smtpclient не работает

А ты попробуй телнетом подключиться к гуглопочте

Код: powershell
1.
o smtp.gmail.com 465
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851197
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttArm79а ты попробуй с портом 465 :-)

в этой теме как раз таки и говорится, что с 587/25 портом все работает, но в "старом" режиме, с предварительной шифрацией канала, smtpclient не работает

А ты попробуй телнетом подключиться к гуглопочте

Код: powershell
1.
o smtp.gmail.com 465






Да вроде норм. telnet smtp.mail.com 465
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851198
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят, кончайте спор. Все уже и так ясно.

System.Web.Mail +Explicit SSL как правило работает через 25/587 порт
CDO+Implicit SSL как правило работает через 25/465 порт

Arm79PS Приведи пример с mail.ru
Давай я приведу.

System.Web.Mail работает 25-й либо 587-й порт
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Private Sub ButtonSendSimpleMailRu_Click(sender As Object, e As EventArgs) Handles ButtonSendSimpleMailRu.Click
    Try
      Dim client As New SmtpClient("smtp.bk.ru", 25) '25 либо 587
      client.Credentials = New System.Net.NetworkCredential("sender", "password")
      client.EnableSsl = True

      Dim message As New MailMessage(New MailAddress("sender@bk.ru"), New MailAddress("recipient@gmail.com"))
      message.Body = "Test body"
      message.Subject = "Test subject"

      client.Send(message)

      MsgBox("OK")
    Catch
      MsgBox(Err.Description)
    End Try
  End Sub



CDO работает через 25-й либо 465-й порт
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
  Private Sub ButtonSendCDOMailRu_Click(sender As Object, e As EventArgs) Handles ButtonSendCDOMailRu.Click
    Try
      Dim o_Mess As Object = CreateObject("CDO.Message")
      Dim v_Conf As String = "http://schemas.microsoft.com/cdo/configuration/"
      With o_Mess
        '===(В-1)код необходим для добавления utf-8 в Subject(если .AddAttachment стоит до .TextBodyPart.Charset)===
        .BodyPart.Charset = "utf-8"
        '===(В-1)код необходим для добавления utf-8 в Subject(если .AddAttachment стоит до .TextBodyPart.Charset)===
        .To = "Получатель<recipient@gmail.com"
        .From = "Отправитель<sender@bk.ru>;"
        .Subject = "Тема сообщения"
        .TextBody = "Текст сообщения"
        .TextBodyPart.Charset = "utf-8"
        .AddAttachment(IO.Path.Combine(Application.StartupPath, "readme.txt")) '.Charset = "utf-8"
        With .Configuration.Fields
          .item(v_Conf & "sendusing") = 2
          .item(v_Conf & "smtpserver") = "smtp.bk.ru"
          .item(v_Conf & "smtpserverport") = 25 '25 либо 465
          .item(v_Conf & "smtpauthenticate") = 1 '1-использовать
          .item(v_Conf & "sendusername") = "sender"
          .item(v_Conf & "sendpassword") = "password"
          .item(v_Conf & "smtpusessl") = True 'использовать SSL
          .item(v_Conf & "smtpconnectiontimeout") = 60 'пока считаем что 60, потом м.б. добавим параметр
          .Update()
        End With
        .Send()
      End With
      MsgBox("Test mail was sent successfully!", vbInformation + vbOKOnly, "Email was sent")
    Catch
      MsgBox("Sending mail...Failed." & vbCrLf & "Error code: " & Err.Number & vbCrLf & Err.Description, _
       vbCritical + vbOKOnly, "Sending mail failed.")
    End Try
  End Sub



Те же самые коды работают с теми же портами для gmail.com
Для Hotmail все тоже самое, но 465-й в нижнем варианте не работает (только 25-й).

В принципе System.Web.Mail с учетом сказанного как правило всегда работает.
"Как правило" тем не менее может однажды (с каким-нибудь SMTP) не сработать, поэтому разумно имплементировать оба метода.
Использовать сторонние компоненты считаю глупо, этих двух в совокупности с головой хватит.
Напишу наверно для себя универсальную ф-цию, объединяющую эти 2 метода чтоб в дальнейшем к этому не возвращаться, будет настроение выложу.

Вот с POP3 в отличии от SMTP в плане SSL (да и вообще с POP3) задница -явная нехватка "методов" и "классов".
Пока руки не дошли и использую стороннюю cmd-утилиту (без SSL).
С Winsock когда-то пытался, но нормально не завелось.
Когда-нибудь руки дойдут, буду думать какие сторонние компоненты или Native использовать.
Ток ради бога, счас не надо никаких советов про POP3.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851199
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Вот с POP3 в отличии от SMTP в плане SSL (да и вообще с POP3) задница -явная нехватка "методов" и "классов".
c pop3 проблем не было, своего клиента накатал, свой парсер mime сделал, все нравится :-) Вернее нравилось, около года в них нужны не было.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851201
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

...вот именно, не надо РОР3, берите сразу IMAP .. :)
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851202
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

так а что нужно-то? или это просто эксперименты без какой-то конкретной цели?
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851203
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Да вроде норм. telnet smtp.mail.com 465

Подключается? фигасе
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851204
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Исходники посмотрел smtpclient, в принципе их можно выдрать, и написать свой smtpclient с блекджеком и ssl. Там в итоге все равно работа сводится с stream. Берем SslStream и пихаем в MailWriter. Конечно не все так просто, как кажется, но задача решаемая...
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851206
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttArm79Да вроде норм. telnet smtp.mail.com 465

Подключается? фигасе

да :-)

если набрать telnet + enter + open smtp.gmail.com 465, то нет. А если в командной строке сразу набрать telnet smtp.gmail.com 465, то да
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851211
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

так работает:
Код: c#
1.
2.
3.
            using (var smtpClient = new SmtpClient("smtp.mail.ru", 25))
            {
                smtpClient.EnableSsl = true;



В итоге все равно получается, что все популярные почтовики (проверял на gmail, yandex, mail) поддерживают starttls, и в поддержке implicit ssl нет особой надобности.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851214
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79В итоге все равно получается, что все популярные почтовики (проверял на gmail, yandex, mail) поддерживают starttls, и в поддержке implicit ssl нет особой надобности.

Угу, а непопулярные вообще не требуют SSL
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851215
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79если набрать telnet + enter + open smtp.gmail.com 465, то нет. А если в командной строке сразу набрать telnet smtp.gmail.com 465, то да

у меня из командной строки тож работает, но команду не могу ввести ни одну.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851216
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttтак а что нужно-то? или это просто эксперименты без какой-то конкретной цели?
чтоб я чего-то делал без конкретной цели..
большая цель - я перекатываю VB6 проект на .Net
мелкая - в проге есть прикладная ф-ция отправки/приема почты (SMTP/POP3).
SMTP это в VB6 у меня CDO.Message.

>...вот именно, не надо РОР3, берите сразу IMAP .. :)
вы про стратегии, у меня POP3, с IMAP надо разбираться, цели разбираться счас не стоит

>c pop3 проблем не было, своего клиента накатал, свой парсер mime сделал, все нравится :-)
я тоже когда-то накатывал с парсерами и т.п. но 100% надежно это не работало, ты ж понимаешь что много частных случаев о которые подобные конструкции могут легко спотыкаться, что приводит в лучшем случае к невыполнению действия, в худшем - к зависанию/зацикливанию. У меня там вложения, плюс кодировки всякие и нерусские тексты. Короче промудохался лет несколько назад и принял решение пока не использовать в силу низкой отказоустойчивости.
Я счачиваю утилитой в eml-файлы, а потом делаю разбор .eml через CDO. Да и то, если имя файла-вложения не на EN и не соответствует не-Юникод языку OS, то там не без проблем.

P.S. Я ж просил тему приема почты здесь не обсуждать.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851217
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Дмитрий77,

так работает:
Код: c#
1.
2.
3.
            using (var smtpClient = new SmtpClient("smtp.mail.ru", 25))
            {
                smtpClient.EnableSsl = true;


не противоречит сказанному здесь:
17099830 .
Arm79В итоге все равно получается, что все популярные почтовики (проверял на gmail, yandex, mail) поддерживают starttls, и в поддержке implicit ssl нет особой надобности.
ДА. Но все инструкции к этим почтовикам напирают на 465-й порт без чуждых юзеру (да и мне до вчерашнего дня) слов implicit/explicit. Таким образом непонятки при настройке (глазами юзера) субъективно обеспечены.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851219
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77большая цель - я перекатываю VB6 проект на .Net
мелкая - в проге есть прикладная ф-ция отправки/приема почты (SMTP/POP3).
SMTP это в VB6 у меня CDO.Message.

Есть на примете какой-то почтовый сервак, с которым System.Net.Mail не хочет работать? Как бы со своей задачей — отправлять почту, он справляется, и настраивается как надо. Если в интерфейс юзера надо вынести настройки, то стандартных хватит вполне, порт вообще можно не спрашивать, или предложить на выбор из двух (25/587) или сделать режим «для продвинутых», позволяющий указать ещё и порт вручную. Большего-то для обычного юзера и не нужно. Это просто отправка почты, она работает.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851220
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77ДА. Но все инструкции к этим почтовикам напирают на 465-й порт без чуждых юзеру (да и мне до вчерашнего дня) слов implicit/explicit. Таким образом непонятки при настройке (глазами юзера) субъективно обеспечены.

Ниже скрин из Thunderbird, указан порт по умолчанию, его и надо рекомендовать пользователю, или вообще убрать. Настроек кот наплакал, хотя System.Net.Mail плохо подходит для реализации своего почтовика типа The Bat!, возможностей меньше, но сегодня покрывает практически все современные требования.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851221
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851222
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttУгу, а непопулярные вообще не требуют SSL
Люди часто сильно помешаны на "шифровании" всего и вся. А насколько тупа будет частная реализация SMTP/SSL сервера какой-либо случайно взятой конторы? Вы это можете предвидеть?
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851223
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Люди часто сильно помешаны на "шифровании" всего и вся. А насколько тупа будет частная реализация SMTP/SSL сервера какой-либо случайно взятой конторы? Вы это можете предвидеть?

Предвидеть нельзя, нужно столкнуться с проблемой, или хотя бы найти способ её воспроизвести. А то бороться с ветряными мельницами это как-то, не по-научному что-ли
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851224
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНиже скрин из Thunderbird, указан порт по умолчанию, его и надо рекомендовать пользователю,
Очень плохой и очень частный аргумент.
Классика - это Outlook Express, Outlook, Bat...
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851226
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Очень плохой и очень частный аргумент.
Классика - это Outlook Express, Outlook, Bat...

Настройки можно сразу затестить и предложить варианты:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
public static class SmtpHelper
{
    /// <summary>
    /// test the smtp connection by sending a HELO command
    /// </summary>
    /// <param name="config"></param>
    /// <returns></returns>
    public static bool TestConnection(Configuration config)
    {
        MailSettingsSectionGroup mailSettings = config.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup;
        if (mailSettings == null)
        {
            throw new ConfigurationErrorsException("The system.net/mailSettings configuration section group could not be read.");
        }
        return TestConnection(mailSettings.Smtp.Network.Host, mailSettings.Smtp.Network.Port);
    }

    /// <summary>
    /// test the smtp connection by sending a HELO command
    /// </summary>
    /// <param name="smtpServerAddress"></param>
    /// <param name="port"></param>
    public static bool TestConnection(string smtpServerAddress, int port)
    {
        IPHostEntry hostEntry = Dns.GetHostEntry(smtpServerAddress);
        IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], port);
        using (Socket tcpSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp))
        {
            //try to connect and test the rsponse for code 220 = success
            tcpSocket.Connect(endPoint);
            if (!CheckResponse(tcpSocket, 220))
            {
                return false;
            }

            // send HELO and test the response for code 250 = proper response
            SendData(tcpSocket, string.Format("HELO {0}\r\n", Dns.GetHostName()));
            if (!CheckResponse(tcpSocket, 250))
            {
                return false;
            }

            // if we got here it's that we can connect to the smtp server
            return true;
        }
    }

    private static void SendData(Socket socket, string data)
    {
        byte[] dataArray = Encoding.ASCII.GetBytes(data);
        socket.Send(dataArray, 0, dataArray.Length, SocketFlags.None);
    }

    private static bool CheckResponse(Socket socket, int expectedCode)
    {
        while (socket.Available == 0)
        {
            System.Threading.Thread.Sleep(100);
        }
        byte[] responseArray = new byte[1024];
        socket.Receive(responseArray, 0, socket.Available, SocketFlags.None);
        string responseData = Encoding.ASCII.GetString(responseArray);
        int responseCode = Convert.ToInt32(responseData.Substring(0, 3));
        if (responseCode == expectedCode)
        {
            return true;
        }
        return false;
    }
}



Пока проблемы не вижу. И проблемного хоста.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851227
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Классика - это Outlook Express, Outlook, Bat...

Классика это веб
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851236
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПредвидеть нельзя, нужно столкнуться с проблемой, или хотя бы найти способ её воспроизвести. А то бороться с ветряными мельницами это как-то, не по-научному что-ли

Ну не такие уж ветряные. Вот нашел к примеру.

user----- Original Message -----
...
Sent: Friday, June 01, 2012 11:25 AM
Subject: Question

Hello
I’m using ... trial period, wish to buy license but…


I’ve got a question regarding Email option
In the Pop3 there is no option to set secure connection and the email server does not provide not secure connection

In SMTP there is no option to use TLS

Adresses of the servers:
Pop3: pod51015.outlook.com
Port: 995
Using: SSL

smtp: pod51015.outlook.com
Port: 587
Using: TLS

Is there any workaroud ? or maybe you can implement somthing in new version of the program ?
...
Administrator Systemow IT
Akademia Leona Kozminskiego
ul. Jagiellonska 59 | 03-301 Warszawa|
Очевидно (сейчас стало) юзер хочет SSL для входящих и Explicit SSL (то что есть в System.Web.Mail) для исходящих.
А у меня в продакшн имплементировано только Implicit SSL для исходящих через CDO.

Обратного примера правда не нашел.

>Настройки можно сразу затестить и предложить варианты
Ну вот это уже пошли издержки и излишества.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851243
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77>Настройки можно сразу затестить и предложить варианты
Ну вот это уже пошли издержки и излишества.
Не совсем так. У меня в проге есть кнопка "Тест", которая позволяет юзеру отправить "тестовый email" на любой адрес (с любой темой, текстом, вложением) с текущими smtp-настройками и поглядеть лог ошибки, ибо наугад чего-то вводить а потом запущенная система не отправляет мыло - это неправильно, здесь согласен.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851246
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не важно что за контора. Важно какой у нее почтовый сервер. Все современные поддерживают 587 порт.

Я не встречался с почтой, которая ломала мой мире. Конечно, какие то специфичные случаи не учитываются, но за 7 лет прога ни разу не упала.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851268
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Очевидно (сейчас стало) юзер хочет SSL для входящих и Explicit SSL (то что есть в System.Web.Mail) для исходящих.
А у меня в продакшн имплементировано только Implicit SSL для исходящих через CDO.

Обратного примера правда не нашел.

Я считаю, если ты не делаешь свою версию The Bat!, тебе просто надо отправлять какую-то почту, то можно просто забить на это. Стандартная реализация System.Net.Mail покрывает 99% запросов. Корпоративную почту сейчас не будут делать на доисторическом ПО, и даже с учётом доисторического ПО, которое держит обычно 25 порт, решать проблему 0.0001% пользователей с какой-то кривой почтой, это лишнее считаю.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851285
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttСтандартная реализация System.Net.Mail покрывает 99% запросов.
Правильно. Поэтому System.Net.Mail надо с ходу добавить, коль я влез в .Net, а CDO оставить как дополнение, ибо код несложный, уже написанный и проверенный.

Не, bat не пишу, на этом денег не сделаешь.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851287
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77а CDO оставить как дополнение

Так эту вафлю ещё отдельно надо ставить, правильно я понимаю?
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851293
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttДмитрий77а CDO оставить как дополнение
Так эту вафлю ещё отдельно надо ставить, правильно я понимаю?
Не, неправильно понимаешь.
Попробуй, вот код.
17098674
Библиотека cdosys.dll присутствует во всех виндах начиная с XP(скорее с 2000-го) и кончая 8.1 в 32-битной и 64-битной версии, посему COM-объект CDO.Message всегда и везде доступен как из 32-битного так и из 64-битного кода.
Не путай с теми CDO которые растут из Exchange и Outlook (есть древние статьи на MS но этим не надо забивать голову).

Единственное я не знаю как делать на C# (мне это не надо)
Код: vbnet
1.
 Dim o_Mess As Object = CreateObject("CDO.Message")


но думаю это технический как-то решаемый стандартный вопрос.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851296
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Не, неправильно понимаешь.
Попробуй, вот код.
17098674
Библиотека cdosys.dll присутствует во всех виндах начиная с XP(скорее с 2000-го) и кончая 8.1 в 32-битной и 64-битной версии, посему COM-объект CDO.Message всегда и везде доступен как из 32-битного так и из 64-битного кода.
Не путай с теми CDO которые растут из Exchange и Outlook (есть древние статьи на MS но этим не надо забивать голову).

Видимо спутал, позырил на оф. сайте, там надо что-то качать и ставить.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851298
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Единственное я не знаю как делать на C# (мне это не надо)
Код: vbnet
1.
 Dim o_Mess As Object = CreateObject("CDO.Message")


но думаю это технический как-то решаемый стандартный вопрос.
В любом случае 2 варианта есть:
1) добавить ссылку на COM-библиотеку sdosys.dll. Но я бы не стал делать раннее связывание (особенно в .Net, будут проблемы "с версиями", проверено на ADODB)
2) Использовать System.Web.Mail (это то же самое) если не смущают подчеркивания компилятора.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851300
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttВидимо спутал, позырил на оф. сайте, там надо что-то качать и ставить.
Это тот случай когда не надо читать муть, а также не надо ничего "качать и ставить".
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851305
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77hVosttВидимо спутал, позырил на оф. сайте, там надо что-то качать и ставить.
Это тот случай когда не надо читать муть, а также не надо ничего "качать и ставить".

Просто в основном я делал COM-либы, а не использовал их
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851759
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Напишу наверно для себя универсальную ф-цию, объединяющую эти 2 метода чтоб в дальнейшем к этому не возвращаться, будет настроение выложу.
Ну вот, собственно написал. Вроде все учел, что мне во всяком случае на тек. момент нужно, в крайнем случае допилю потом.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
'-----
  Private Sub ButtonSendCDO_Click(sender As Object, e As EventArgs) Handles ButtonSendCDO.Click
    Dim str_err As String = vbNullString
    If SendMailMessage("sender@gmail.com", "Отправитель", "Получатель<recip@bk.ru>;", _
     , , _
     "Тема сообщения", "Текст сообщения", True, _
     IO.Path.Combine(Application.StartupPath, "readme.txt"), _
     "smtp.gmail.com", 465, True, "sender@gmail.com", "password", True, True, str_err) Then
      MsgBox("Test mail was sent successfully!", vbInformation + vbOKOnly, "Email was sent")
    Else
      MsgBox("Sending mail...Failed." & vbCrLf & str_err, _
       vbCritical + vbOKOnly, "Sending mail failed.")
    End If
  End Sub

  Private Sub ButtonSendNetMail_Click(sender As Object, e As EventArgs) Handles ButtonSendNetMail.Click
    Dim str_err As String = vbNullString
    If SendMailMessage("sender@gmail.com", "От меня, привет", _
     "recip@bk.ru;Вася<recip@mtu-net.ru>;", _
     "", , "Тема письма", "Письмо по-русски...", True, IO.Path.Combine(Application.StartupPath, "readme.txt"), _
     "smtp.gmail.com", 587, True, "sender@gmail.com", "password", True, False, str_err) Then
      MsgBox("Test mail was sent successfully!", vbInformation + vbOKOnly, "Email was sent")
    Else
      MsgBox("Sending mail...Failed." & vbCrLf & str_err, _
       vbCritical + vbOKOnly, "Sending mail failed.")
    End If
'-----

Imports System.Net.Mail

Module m_SendMail

  Public Function SendMailMessage(Optional ByVal m_msg_FromAddress As String = vbNullString,
                                  Optional ByVal m_msg_FromDisplayName As String = vbNullString,
                                  Optional ByVal m_msg_To As String = vbNullString,
                                  Optional ByVal m_msg_Cc As String = vbNullString,
                                  Optional ByVal m_msg_Bcc As String = vbNullString,
                                  Optional ByVal m_msg_Subject As String = vbNullString,
                                  Optional ByVal m_msg_TextBody As String = vbNullString,
                                  Optional ByVal m_msg_UseUTF8 As Boolean = True,
                                  Optional ByVal m_msg_Attachments As String = vbNullString,
                                  Optional ByVal m_smtp_Host As String = vbNullString,
                                  Optional ByVal m_smtp_Port As Integer = 25,
                                  Optional ByVal m_smtp_UseAuth As Boolean = False,
                                  Optional ByVal m_smtp_UserName As String = vbNullString,
                                  Optional ByVal m_smtp_Password As String = vbNullString,
                                  Optional ByVal m_smtp_UseSSL As Boolean = False,
                                  Optional ByVal m_smtp_UseCDO As Boolean = False,
                                  Optional ByRef str_error As String = vbNullString
                                  ) As Boolean
    ' m_msg_To,m_msg_Cc,m_msg_Bcc -
    ' - в формате "[recipient1<]recipient1@server1.com[>][;[recipient2<]recipient2@server2.com[>][;...]]"
    '(!)теоретически ';' допустимо в DisplayName
    ' m_msg_Attachments -в формате attach1[;attach2[;...]] (!)теоретически ';' допустимо в path
    ' AddLogCDO -полъзовательская ф-ция, которая выводит дебаг напр. в файл - может быть пустая
    SendMailMessage = False

    If m_smtp_UseCDO Then 'CDO.Message
      Try
        AddLogCDO("-------------------------")
        AddLogCDO(Now.ToString & Chr(9) & "Starting sending mail using CDO.Message")
        Dim o_Mess As Object = CreateObject("CDO.Message")
        AddLogCDO(Now.ToString & Chr(9) & "Creating CDO.Message object...Done")
        Dim v_Conf As String = "http://schemas.microsoft.com/cdo/configuration/"
        With o_Mess
          '===(В-1)код необходим для добавления utf-8 в Subject(если .AddAttachment стоит до .TextBodyPart.Charset)===
          If m_msg_UseUTF8 Then .BodyPart.Charset = "utf-8"
          '===(В-1)код необходим для добавления utf-8 в Subject(если .AddAttachment стоит до .TextBodyPart.Charset)===
          If (Strings.Len(m_msg_FromAddress) > 0) AndAlso (Strings.Len(m_msg_FromDisplayName) > 0) Then
            .From = m_msg_FromDisplayName & "<" & m_msg_FromAddress & ">"
          ElseIf Strings.Len(m_msg_FromAddress) > 0 Then
            .From = m_msg_FromAddress
          End If
          If Strings.Len(m_msg_To) > 0 Then .To = m_msg_To
          If Strings.Len(m_msg_Cc) > 0 Then .CC = m_msg_Cc
          If Strings.Len(m_msg_Bcc) > 0 Then .BCC = m_msg_Bcc
          If Strings.Len(m_msg_Subject) > 0 Then .Subject = m_msg_Subject
          .TextBody = m_msg_TextBody
          AddLogCDO(Chr(9) & Chr(9) & "From:" & .From.ToString & vbCrLf & _
           Chr(9) & Chr(9) & "To:" & .To.ToString)
          If Strings.Len(.CC.ToString) > 0 Then AddLogCDO(Chr(9) & Chr(9) & "CC:" & .CC.ToString)
          If Strings.Len(.BCC.ToString) > 0 Then AddLogCDO(Chr(9) & Chr(9) & "BCC:" & .BCC.ToString)
          AddLogCDO(Chr(9) & Chr(9) & "Subject:" & .Subject.ToString)
          If m_msg_UseUTF8 Then
            .TextBodyPart.Charset = "utf-8"
            AddLogCDO(Chr(9) & Chr(9) & "Encoding:" & .TextBodyPart.Charset.ToString)
          End If
          If Strings.Len(m_msg_Attachments) > 0 Then
            For i As Integer = 0 To ChNum(m_msg_Attachments, ";")
              Dim attach As String = Split(m_msg_Attachments, ";")(i)
              .AddAttachment(attach)
              AddLogCDO(Chr(9) & Chr(9) & "Attachment:" & attach)
            Next
          End If
          AddLogCDO(Now.ToString & Chr(9) & "Configuring SMTP")
          With .Configuration.Fields
            .item(v_Conf & "sendusing") = 2
            AddLogCDO(Chr(9) & Chr(9) & "smtpserver=" & m_smtp_Host)
            If Strings.Len(m_smtp_Host) > 0 Then .item(v_Conf & "smtpserver") = m_smtp_Host
            AddLogCDO(Chr(9) & Chr(9) & "smtpserverport=" & m_smtp_Port.ToString)
            .item(v_Conf & "smtpserverport") = m_smtp_Port
            If m_smtp_UseAuth And (Strings.Len(m_smtp_UserName) > 0) And (Strings.Len(m_smtp_Password) > 0) Then
              AddLogCDO(Chr(9) & Chr(9) & "smtpauthenticate=1;sendusername=" & m_smtp_UserName & _
               ";sendpassword=" & StrDup(Strings.Len(Trim(m_smtp_Password)), "*"))
              .item(v_Conf & "smtpauthenticate") = 1 '1 - использовать
              .item(v_Conf & "sendusername") = m_smtp_UserName
              .item(v_Conf & "sendpassword") = m_smtp_Password
            Else
              AddLogCDO(Chr(9) & Chr(9) & "smtpauthenticate=0")
              .item(v_Conf & "smtpauthenticate") = 0 '0 - не использовать
            End If
            If m_smtp_UseSSL Then
              AddLogCDO(Chr(9) & Chr(9) & "smtpusessl=True")
              .item(v_Conf & "smtpusessl") = True 'использовать SSL
            Else
              AddLogCDO(Chr(9) & Chr(9) & "smtpusessl=False")
              .item(v_Conf & "smtpusessl") = False
            End If
            AddLogCDO(Chr(9) & Chr(9) & "smtpconnectiontimeout=60")
            .item(v_Conf & "smtpconnectiontimeout") = 60 'пока считаем что 60, потом м.б. добавим параметр
            .Update()
            AddLogCDO(Now.ToString & Chr(9) & "Configuring SMTP...Done")
          End With
          AddLogCDO(Now.ToString & Chr(9) & "Sending mail")
          .Send()
        End With
        AddLogCDO(Now.ToString & Chr(9) & "Sending mail...Done")
        AddLogCDO("-------------------------")
        Return True
      Catch
        str_error = "Error code: " & Err.Number & " (" & Err.Description & ")"
        AddLogCDO(Now.ToString & Chr(9) & "Sending mail...Failed. " & str_error)
        AddLogCDO("-------------------------")
      End Try
    Else 'System.Net.Mail
      Try
        AddLogCDO("-------------------------")
        AddLogCDO(Now.ToString & Chr(9) & "Starting sending mail using System.Net.Mail")
        Dim message As New MailMessage()
        With message
          AddLogCDO(Now.ToString & Chr(9) & "Creating System.Net.Mail.MailMessage object...Done")
          If (Strings.Len(m_msg_FromAddress) > 0) AndAlso (Strings.Len(m_msg_FromDisplayName) > 0) Then
            If m_msg_UseUTF8 Then
              AddLogCDO(Chr(9) & Chr(9) & "From:" & m_msg_FromDisplayName & "<" & m_msg_FromAddress & ">")
              .From = New MailAddress(m_msg_FromAddress, m_msg_FromDisplayName, System.Text.Encoding.UTF8)
            Else
              AddLogCDO(Chr(9) & Chr(9) & "From:" & m_msg_FromDisplayName & "<" & m_msg_FromAddress & ">")
              .From = New MailAddress(m_msg_FromAddress, m_msg_FromDisplayName)
            End If
          ElseIf Strings.Len(m_msg_FromAddress) > 0 Then
            AddLogCDO(Chr(9) & Chr(9) & "From:" & m_msg_FromAddress)
            .From = New MailAddress(m_msg_FromAddress)
          Else
            AddLogCDO(Chr(9) & Chr(9) & "From:")
          End If
          AddLogCDO(Chr(9) & Chr(9) & "To:" & m_msg_To)
          If Strings.Len(m_msg_To) > 0 Then
            Dim [to_all] As String = m_msg_To
            For i As Integer = 0 To ChNum([to_all], ";")
              Dim [to] As String = Split([to_all], ";")(i)
              Dim [to_Address] As String = vbNullString, [to_DisplayName] As String = vbNullString
              If InStr([to], "<") > 0 Then
                [to_DisplayName] = Strings.Left([to], InStr([to], "<") - 1)
                [to_Address] = Strings.Right([to], Strings.Len([to]) - InStr([to], "<"))
                If InStr([to_Address], ">") > 0 Then [to_Address] = Strings.Left([to_Address], InStr([to_Address], ">") - 1)
              Else
                [to_Address] = [to]
              End If
              If (Strings.Len([to_Address]) > 0) AndAlso (Strings.Len([to_DisplayName]) > 0) Then
                If m_msg_UseUTF8 Then
                  .To.Add(New MailAddress([to_Address], [to_DisplayName], System.Text.Encoding.UTF8))
                Else
                  .To.Add(New MailAddress([to_Address], [to_DisplayName]))
                End If
              ElseIf Strings.Len([to_Address]) > 0 Then
                .To.Add(New MailAddress([to_Address]))
              End If
            Next
          End If
          If Strings.Len(m_msg_Cc) > 0 Then
            AddLogCDO(Chr(9) & Chr(9) & "CC:" & m_msg_Cc)
            Dim [cc_all] As String = m_msg_Cc
            For i As Integer = 0 To ChNum([cc_all], ";")
              Dim [cc] As String = Split([cc_all], ";")(i)
              Dim [cc_Address] As String = vbNullString, [cc_DisplayName] As String = vbNullString
              If InStr([cc], "<") > 0 Then
                [cc_DisplayName] = Strings.Left([cc], InStr([cc], "<") - 1)
                [cc_Address] = Strings.Right([cc], Strings.Len([cc]) - InStr([cc], "<"))
                If InStr([cc_Address], ">") > 0 Then [cc_Address] = Strings.Left([cc_Address], InStr([cc_Address], ">") - 1)
              Else
                [cc_Address] = [cc]
              End If
              If (Strings.Len([cc_Address]) > 0) AndAlso (Strings.Len([cc_DisplayName]) > 0) Then
                If m_msg_UseUTF8 Then
                  .CC.Add(New MailAddress([cc_Address], [cc_DisplayName], System.Text.Encoding.UTF8))
                Else
                  .CC.Add(New MailAddress([cc_Address], [cc_DisplayName]))
                End If
              ElseIf Strings.Len([cc_Address]) > 0 Then
                .CC.Add(New MailAddress([cc_Address]))
              End If
            Next
          End If
          If Strings.Len(m_msg_Bcc) > 0 Then
            AddLogCDO(Chr(9) & Chr(9) & "BCC:" & m_msg_Bcc)
            Dim [bcc_all] As String = m_msg_Bcc
            For i As Integer = 0 To ChNum([bcc_all], ";")
              Dim [bcc] As String = Split([bcc_all], ";")(i)
              Dim [bcc_Address] As String = vbNullString, [bcc_DisplayName] As String = vbNullString
              If InStr([bcc], "<") > 0 Then
                [bcc_DisplayName] = Strings.Left([bcc], InStr([bcc], "<") - 1)
                [bcc_Address] = Strings.Right([bcc], Strings.Len([bcc]) - InStr([bcc], "<"))
                If InStr([bcc_Address], ">") > 0 Then [bcc_Address] = Strings.Left([bcc_Address], InStr([bcc_Address], ">") - 1)
              Else
                [bcc_Address] = [bcc]
              End If
              If (Strings.Len([bcc_Address]) > 0) AndAlso (Strings.Len([bcc_DisplayName]) > 0) Then
                If m_msg_UseUTF8 Then
                  .Bcc.Add(New MailAddress([bcc_Address], [bcc_DisplayName], System.Text.Encoding.UTF8))
                Else
                  .Bcc.Add(New MailAddress([bcc_Address], [bcc_DisplayName]))
                End If
              ElseIf Strings.Len([bcc_Address]) > 0 Then
                .Bcc.Add(New MailAddress([bcc_Address]))
              End If
            Next
          End If
          If Strings.Len(m_msg_Subject) > 0 Then .Subject = m_msg_Subject
          If m_msg_UseUTF8 Then .SubjectEncoding = System.Text.Encoding.UTF8
          AddLogCDO(Chr(9) & Chr(9) & "Subject:" & .Subject.ToString)
          If Strings.Len(m_msg_TextBody) > 0 Then .Body = m_msg_TextBody
          If m_msg_UseUTF8 Then
            .BodyEncoding = System.Text.Encoding.UTF8
            AddLogCDO(Chr(9) & Chr(9) & "Encoding:" & .BodyEncoding.ToString)
          End If
          If Strings.Len(m_msg_Attachments) > 0 Then
            For i As Integer = 0 To ChNum(m_msg_Attachments, ";")
              Dim attach As String = Split(m_msg_Attachments, ";")(i)
              .Attachments.Add(New Attachment(attach))
              AddLogCDO(Chr(9) & Chr(9) & "Attachment:" & attach)
            Next
          End If
        End With
        AddLogCDO(Now.ToString & Chr(9) & "Configuring SMTP")
        Dim client As New SmtpClient()
        With client
          AddLogCDO(Chr(9) & Chr(9) & "Host=" & m_smtp_Host)
          If Strings.Len(m_smtp_Host) > 0 Then .Host = m_smtp_Host
          AddLogCDO(Chr(9) & Chr(9) & "Port=" & m_smtp_Port.ToString)
          .Port = m_smtp_Port
          If m_smtp_UseAuth And (Strings.Len(m_smtp_UserName) > 0) And (Strings.Len(m_smtp_Password) > 0) Then
            AddLogCDO(Chr(9) & Chr(9) & "useCredentials=1;userName=" & m_smtp_UserName & _
             ";password=" & StrDup(Strings.Len(m_smtp_Password), "*"))
            .Credentials = New System.Net.NetworkCredential(m_smtp_UserName, m_smtp_Password)
          Else
            AddLogCDO(Chr(9) & Chr(9) & "useCredentials=0")
          End If
          If m_smtp_UseSSL Then
            AddLogCDO(Chr(9) & Chr(9) & "EnableSsl=True")
            .EnableSsl = True 'использовать SSL
          Else
            AddLogCDO(Chr(9) & Chr(9) & "EnableSsl=False")
            .EnableSsl = False
          End If
          AddLogCDO(Chr(9) & Chr(9) & "Timeout=60sec")
          .Timeout = 60000
          AddLogCDO(Now.ToString & Chr(9) & "Configuring SMTP...Done")
          AddLogCDO(Now.ToString & Chr(9) & "Sending mail")
          .Send(message)
        End With
        AddLogCDO(Now.ToString & Chr(9) & "Sending mail...Done")
        AddLogCDO("-------------------------")
        Return True
      Catch
        str_error = "Error code: " & Err.Number & " (" & Err.Description & ")"
        AddLogCDO(Now.ToString & Chr(9) & "Sending mail...Failed. " & str_error)
        AddLogCDO("-------------------------")
      End Try
    End If
  End Function
End Module

'-----
  Public Sub AddLogCDO(ByVal str As String)
    Using file As System.IO.StreamWriter = _
       New System.IO.StreamWriter(IO.Path.Combine(Application.StartupPath, "maillog.txt"), True, System.Text.Encoding.UTF8)
      file.WriteLine(str)
      Debug.Print(str)
    End Using
  End Sub

  Public Function ChNum(ByVal the_str As String, ByVal ch As String) As Integer
    Dim count As Integer = 0
    For i As Integer = 0 To the_str.Length - 1
      If the_str(i) = ch Then count += 1
    Next
    Return count
  End Function
'

...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851793
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Public Sub AddLogCDO(ByVal str As String)
    Using file As System.IO.StreamWriter = _
       New System.IO.StreamWriter(IO.Path.Combine(Application.StartupPath, "maillog.txt"), True, System.Text.Encoding.UTF8)
      file.WriteLine(str)
      Debug.Print(str)
    End Using
  End Sub



Для лога лучше использовать какой-нибудь NLog, ну или в try/catch оборачивать как минимум запись в файл.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851812
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вместо батонкликов - тесты.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851817
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttДля лога лучше использовать какой-нибудь NLog,.NLog так понимаю какая-то система, типа логировать чего .Net делает.
Зачем она мне для простенького кастом-лога, цель которого в данном случае например просто ткнуть юзера в ошибку при настройке SMTP сервера. Т.е. не стоит цели искать ошибку в самой программе, стараюсь как бы писать "без ошибок".

hVosttну или в try/catch оборачивать как минимум запись в файл.
Зачем? Считаешь что этот код может вылететь? Типа кто-то уже открыл этот файл в "w"-режиме. Навряд ли это практически реально, если он открыт, то открыт в каком-нибудь блокноте, а на запись это никак не влияет.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851822
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Ну, обычно (особенно когда ясно что код стабилен) я эти дебаги делаю так (если уж "AddLog" заложена):

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Public Sub AddLogCDO(ByVal str As String)
  if debug=true then
    Using file As System.IO.StreamWriter = _
       New System.IO.StreamWriter(IO.Path.Combine(Application.StartupPath, "maillog.txt"), True, System.Text.Encoding.UTF8)
      file.WriteLine(str)
    End Using
  end if 
 End Sub



Или просто глушу пустой ф-цией:
Код: vbnet
1.
2.
3.
Public Sub AddLogCDO(ByVal str As String)
  'затычка-пустышка
End Sub
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851833
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77NLog так понимаю какая-то система, типа логировать чего .Net делает.
Зачем она мне для простенького кастом-лога, цель которого в данном случае например просто ткнуть юзера в ошибку при настройке SMTP сервера. Т.е. не стоит цели искать ошибку в самой программе, стараюсь как бы писать "без ошибок".

Это Nuget пакет. Бесплатно. Логирует, да, настраивается проще пареной репы. Попробуешь -- не пожалеешь. Всяко лучше чем стримврайтером в файл писать.

Дмитрий77Зачем? Считаешь что этот код может вылететь? Типа кто-то уже открыл этот файл в "w"-режиме. Навряд ли это практически реально, если он открыт, то открыт в каком-нибудь блокноте, а на запись это никак не влияет.

Может конечно! Файл может быть открыт в программе, которая блокирует доступ, просто может не быть доступа к файлу. Черт знает ещё почему. Правило железное -- работать с внешними ресурсами только через try/catch, особенно это касается лога, так как лог ни при каких обстоятельствах не должен выбивать приложение.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851835
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА вместо батонкликов - тесты.

Даёшь логику в батонклики!
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851884
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМожет конечно! Файл может быть открыт в программе, которая блокирует доступ, просто может не быть доступа к файлу. Черт знает ещё почему. Правило железное -- работать с внешними ресурсами только через try/catch, особенно это касается лога, так как лог ни при каких обстоятельствах не должен выбивать приложение.
Вообще-то везде утверждается, что если есть Using то Try Catch не надо:

http://msdn.microsoft.com/ru-ru/library/system.io.streamwriter(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2

ExamplesA good practice is to use these objects in a using statement so that the unmanaged resources are correctly disposed.

how to use StreamWriter class properly?

авторBut StreamWriter implements IDisposable interface, so you can let C# compiler do it automatically for you by wrapping writer usage into using block:

Какой-то подвох все-таки чувствую (если уж докапываться). Или все таки настаиваешь на Try Cath внутри Using.
Как по твоему должен выглядеть код? Кодом напиши.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851952
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Вообще-то везде утверждается, что если есть Using то Try Catch не надо:

Не-не-не. Не путай тёплое с мягким. Using отвечает за освобождение ресурсов, try/catch ловит исключения, а при записи в лог твоим способом ловить исключения надо обязательно, иначе самая несущественная операция — записи в лог, может повлиять на работу приложения. Важно этого не допускать ни в коем случае, даже при малейшей опасности. А лучше всего освоить NLog и больше никогда не заморачиваться никакими стримрайтерами для логгирования.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851953
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttДмитрий77Вообще-то везде утверждается, что если есть Using то Try Catch не надо:

Не-не-не. Не путай тёплое с мягким. Using отвечает за освобождение ресурсов, try/catch ловит исключения, а при записи в лог твоим способом ловить исключения надо обязательно, иначе самая несущественная операция — записи в лог, может повлиять на работу приложения. Важно этого не допускать ни в коем случае, даже при малейшей опасности. А лучше всего освоить NLog и больше никогда не заморачиваться никакими стримрайтерами для логгирования.

оставь using и оберни это всё еще в try/catch.
или NLog
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851969
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кончать надо с этой дискуссией.
hVosttоставь using и оберни это всё еще в try/catch.
Так достаточно?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Sub AddLogCDO(ByVal str As String)
    Try
      Using file As System.IO.StreamWriter = _
       New System.IO.StreamWriter(IO.Path.Combine(Application.StartupPath, "maillog.txt"), True, System.Text.Encoding.UTF8)
        file.WriteLine(str)
      End Using
    Catch
    End Try
End Sub

В VB6 еще было волшебное (оно и в .Net есть)
Код: vbnet
1.
On error Resume Next


Когда делать ничего не охота.
Потом правда хрен поймешь в чем проблема, когда она через год возникает.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851971
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Так достаточно?

Ага, норм.
...
Рейтинг: 0 / 0
Отправка email через gmail.com + System.Net.Mail фигня какая-то.
    #38851982
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

авторOn error Resume Next

...угу .. особенно, когда рекурсия по папкам или частям почтового сообщения .. :) .. глубина зависания не поддается астрономическим величинам ...
...
Рейтинг: 0 / 0
70 сообщений из 70, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Отправка email через gmail.com + System.Net.Mail фигня какая-то.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]