powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Отправка email через gmail.com + System.Net.Mail фигня какая-то.
20 сообщений из 70, страница 3 из 3
Отправка 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
20 сообщений из 70, страница 3 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Отправка email через gmail.com + System.Net.Mail фигня какая-то.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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