2013-08-09 21 views
5

Chcę wysłać wiadomość e-mail, ale powoduje to błąd.Jak wysłać wiadomość e-mail do gmail w witrynie vb.net?

mam ten kod:

Sub sendMail(ByVal title As String, ByVal content As String) 
    Dim SmtpServer As New SmtpClient("smtp.gmail.com", 25) 
    SmtpServer.Credentials = New Net.NetworkCredential("[email protected]", "password") 
    Dim mail As New MailMessage("[email protected]", "[email protected]", title, content) 
    SmtpServer.Send(mail) 
End Sub 

mam try catch, który próbuje wywołać tę metodę, ale to nie działa tak biegnie połowów i dostaję Tes wyjątek: System.Net.Mail.SmtpException: The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Must issue a STARTTLS command first. b6sm3176487lae.0 - gsmtp Dlaczego mam ten błąd? i jak to naprawić?

Odpowiedz

9

Gmail używa SMTP over SSL na porcie 465.

Spróbuj to zrobić:


    Dim SmtpServer As New SmtpClient("smtp.gmail.com", 465) 
    ... 
    SmtpServer.EnableSsl = True 
    ... 
+0

Tak, pomyślałem, że to był problem z portem, dzięki – Arbitur

+0

Ok, którego użyłem, był prawidłowy, ale był to EnableSsl, którego potrzebowałem. – Arbitur

4

Spróbuj tego - wiem, że to działa.

Dim Mail As New MailMessage 
    Dim SMTP As New SmtpClient("smtp.gmail.com") 

    Mail.Subject = "Security Update" 
    Mail.From = New MailAddress("[email protected]") 
    SMTP.Credentials = New System.Net.NetworkCredential("[email protected]", "password") '<-- Password Here 

    Mail.To.Add(address & "@gmail.com") 'I used ByVal here for address 

    Mail.Body = "" 'Message Here 

    SMTP.EnableSsl = True 
    SMTP.Port = "587" 
    SMTP.Send(Mail) 
+0

To jest tylko dłuższa wersja mojego kodu ... – Arbitur

+1

Należy zwrócić uwagę na port SMTP. Myślałem, że to 587, a nie 465 czy 25. – iasanator

+0

Czy to powinno być 587 czy 465? –

0

Jest jakiś problem z kontem Google, musisz wyłączyć niektóre ustawienia zabezpieczeń. Po wysłaniu wiadomości e-mail w kółko, otrzymałem e-mail na jeden z moim rachunku wsparcia (dla Google), e-mail to:

You recently changed your security settings so that your Google Account [[email protected]] is no longer protected by modern security standards. 

If you did not make this change 
Please review your Account Activity page at https://security.google.com/settings/security/activity to see if anything looks suspicious. Whoever made the change knows your password; we recommend that you change it right away. 

If you made this change 
Please be aware that it is now easier for an attacker to break into your account. You can make your account safer again by undoing this change at https://www.google.com/settings/security/lesssecureapps then switching to apps made by Google such as Gmail to access your account. 
Sincerely, 
The Google Accounts team 

Więc przeszedłem dodatkowego bezpieczeństwa i pracował w porządku.

0

Zmień port na 587. Port 25 nie obsługuje protokołu SSL.

0

super łatwy sposób to zrobić (bez zmiany ustawień zabezpieczeń) jest za pomocą IFTTT i mój IFTTT Maker.net libary

Po pierwsze, w IFTTT utworzyć nowy przepis, który jest wyzwalany przez kanał Maker i nazwać zdarzenie „send_gmail” .

Następnie wybierz silnik Gmail i kliknij "Wyślij e-mail", a zastąpić Aby z {{wartość1}}, z zastrzeżeniem z {{value2}} i komunikatów/body z {{wartość3}}

After w Visual Studio dodaj ifttt.vb do swojego projektu. Teraz wpisz kod:

 Try 
    makechannel.scode = "your account ID" 
    makechannel.fireevent("send_gmail", "TO", "SUBJECT", "MESSAGE") 
    'code goes here if done 
    Catch ex As Exception 
     'code goes here if it fails 
    End Try 

Następnie wpisz swój identyfikator konta. Można go znaleźć pod adresem ifttt.com/maker

I to wszystko!

0

Napisałem klasy, która może łatwo wykonać to zadanie.

Imports System.Net.Mail 
Public Class GGSMTP_GMAIL 
    Dim Temp_GmailAccount As String 
    Dim Temp_GmailPassword As String 
    Dim Temp_SMTPSERVER As String 
    Dim Temp_ServerPort As Int32 
    Dim Temp_ErrorText As String = "" 
    Dim Temp_EnableSSl As Boolean = True 
    Public ReadOnly Property ErrorText() As String 
     Get 
      Return Temp_ErrorText 
     End Get 
    End Property 
    Public Property EnableSSL() As Boolean 
     Get 
      Return Temp_EnableSSl 
     End Get 
     Set(ByVal value As Boolean) 
      Temp_EnableSSl = value 
     End Set 
    End Property 
    Public Property GmailAccount() As String 
     Get 
      Return Temp_GmailAccount 
     End Get 
     Set(ByVal value As String) 
      Temp_GmailAccount = value 
     End Set 
    End Property 
    Public Property GmailPassword() As String 
     Get 
      Return Temp_GmailPassword 
     End Get 
     Set(ByVal value As String) 
      Temp_GmailPassword = value 
     End Set 
    End Property 
    Public Property SMTPSERVER() As String 
     Get 
      Return Temp_SMTPSERVER 
     End Get 
     Set(ByVal value As String) 
      Temp_SMTPSERVER = value 
     End Set 
    End Property 
    Public Property ServerPort() As Int32 
     Get 
      Return Temp_ServerPort 
     End Get 
     Set(ByVal value As Int32) 
      Temp_ServerPort = value 
     End Set 
    End Property 
    Public Sub New(ByVal GmailAccount As String, ByVal GmailPassword As String, Optional ByVal SMTPSERVER As String = "smtp.gmail.com", Optional ByVal ServerPort As Int32 = 587, Optional ByVal EnableSSl As Boolean = True) 
     Temp_GmailAccount = GmailAccount 
     Temp_GmailPassword = GmailPassword 
     Temp_SMTPSERVER = SMTPSERVER 
     Temp_ServerPort = ServerPort 
     Temp_EnableSSl = EnableSSl 
    End Sub 
    Public Function SendMail(ByVal ToAddressies As String(), ByVal Subject As String, ByVal BodyText As String, Optional ByVal AttachedFiles As String() = Nothing) As Boolean 
     Temp_ErrorText = "" 
     Dim Mail As New MailMessage 
     Dim SMTP As New SmtpClient(Temp_SMTPSERVER) 
     Mail.Subject = Subject 
     Mail.From = New MailAddress(Temp_GmailAccount) 
     SMTP.Credentials = New System.Net.NetworkCredential(Temp_GmailAccount, Temp_GmailPassword) '<-- Password Here 
     Mail.To.Clear() 
     For i As Int16 = 0 To ToAddressies.Length - 1 
      Mail.To.Add(ToAddressies(i)) 
     Next i 
     Mail.Body = BodyText 
     Mail.Attachments.Clear() 

     If AttachedFiles IsNot Nothing Then 
      For i As Int16 = 0 To AttachedFiles.Length - 1 
       Mail.Attachments.Add(New Attachment(AttachedFiles(i))) 
      Next 
     End If 

     SMTP.EnableSsl = Temp_EnableSSl 
     SMTP.Port = Temp_ServerPort 

     Try 
      SMTP.Send(Mail) 
      Return True 
     Catch ex As Exception 
      Me.Temp_ErrorText = ex.Message.ToString 
      Return False 
     End Try 

    End Function 
End Class 

Jego sposób jak wykorzystać klasę:

Dim GGmail As New GGSMTP_GMAIL("[email protected]", "AccPassword",) 

     Dim ToAddressies As String() = {"[email protected]", "[email protected]"} 
     Dim attachs() As String = {"d:\temp_Excell226.xlsx", "d:\temp_Excell224.xlsx", "d:\temp_Excell225.xlsx"} 
     Dim subject As String = "My TestSubject" 
     Dim body As String = "My text goes here ...." 
     Dim result As Boolean = GGmail.SendMail(ToAddressies, subject, body, attachs) 
     If result Then 
      MsgBox("mails sended successfully", MsgBoxStyle.Information) 
     Else 
      MsgBox(GGmail.ErrorText, MsgBoxStyle.Critical) 
     End If 

nadzieję, że to pomaga. Dobre kodowanie

Powiązane problemy