Пингование адреса электронной почты с использованием кодирования VB.Net

Есть ли в VB.Net способ «пропинговать» адрес электронной почты, чтобы убедиться, что это электронное письмо является реальным и не дает никаких ошибок?

Если да, можете ли вы показать, как выглядит код VB.Net для реализации этого?

Я планирую использовать это в приложении, для которого требуется электронная почта клиента, и было бы неплохо проверить его, когда принимающий вызов вводит его в форму перед сохранением сведений о клиенте.

Вот код, который мы используем для рассылки промо-акции по электронной почте всем клиентам в нашей таблице клиентов:

Private Sub RibbonButtonSendTestEmail_Click(sender As System.Object, e As System.EventArgs) Handles RibbonButtonSendTestEmail.Click

    Dim SmtpServer As New SmtpClient()
    Dim mail As New MailMessage()
    Dim strSqlStatement As String = "Select CustomerName, Email " & _
                               "From Customers "

    Using objSqlCommand As SqlCommand = New SqlCommand(strSqlStatement, ObjConnection)

        With objSqlCommand

            ' Open the SqlConnection before executing the query.
            '---------------------------------------------------
            Cursor = Cursors.WaitCursor

            ObjConnection.Open()

            Dim objDataReader As SqlDataReader = .ExecuteReader()

            ' Go through all the customers and send out the promotion emails.
            '----------------------------------------------------------------
            If objDataReader.HasRows Then

                SmtpServer.Host = TextBoxSMTPServer.Text
                SmtpServer.Port = TextBoxPort.Text

                If TextBoxUseSSL.Text = "Yes" Then
                    SmtpServer.EnableSsl = True
                Else
                    SmtpServer.EnableSsl = False
                End If

                If TextBoxUseDefaultCredentials.Text = "Yes" Then
                    SmtpServer.UseDefaultCredentials = True
                Else
                    SmtpServer.UseDefaultCredentials = False
                End If

                SmtpServer.Credentials = New Net.NetworkCredential(TextBoxUserName.Text, TextBoxPassword.Text)

                While objDataReader.Read()

                    Try
                        mail.To.Add(objDataReader("Email").ToString)
                        mail.From = New MailAddress(TextBoxEmailFrom.Text)
                        mail.Subject = "Promotion: " & TextBoxID.Text
                        mail.Body = "Dear " & objDataReader("CustomerName") & "," & vbCrLf & vbCrLf & TextBoxPromotionBodyText.Text

                        SmtpServer.Send(mail)

                    Catch exSMTP As SmtpException
                        MessageBox.Show("Sorry, I could not send an email for: " & _
                                    vbCrLf & objDataReader("CustomerName") & "." & vbCrLf & _
                                    "Please make sure it is correct.", _
                                    "Error")

                    Catch exFormat As FormatException
                        MessageBox.Show("Sorry, this customer's email is not properly formatted: " & _
                                    vbCrLf & objDataReader("CustomerName") & "." & vbCrLf & _
                                    "Please make sure it is correct.", _
                                    "Error")
                    End Try
                End While

                LabelEmail.Text = "Sent email promotions to the customers."
            End If

            objDataReader.Close()
            ObjConnection.Close()

            Cursor = Cursors.Default
        End With ' objSqlCommand
    End Using ' objSqlCommand
End Sub

person Emad-ud-deen    schedule 24.05.2012    source источник
comment
возможный дубликат Подтвердить электронную почту в PHP или другом языке программирования?   -  person Ken White    schedule 24.05.2012


Ответы (2)


Да вполне возможно:

1 DNS-поиск записей MX для домена

  • Их может быть несколько, вы можете выбрать любого, хотя технически предпочтительным является тот, у которого самый низкий показатель предпочтения.

2 TCP Подключение к почтовому серверу (порт 25)

  • Скажи привет: HELO
  • Назовите себя: mail from:<[email protected]>
  • Скажи, кому ты пишешь: rcpt to<[email protected]>
  • В этот момент сервер ответит ответом, вы получите сообщение об ошибке OK или 550 (например: The email account that you tried to reach does not exist)
  • Отключитесь, и сообщение будет удалено.

Но, чувак, ты хочешь, чтобы код VB делал это? Вам просто нужна говорящая часть DNS и часть построения TCP-соединения (или, вероятно, есть некоторые библиотеки SMTP, которые сделают все это за вас или вдохновят вас, чтобы понять это самостоятельно). Не забывайте, что вы, вероятно, можете найти пример кода C #, который делает это, и использовать инструмент преобразования Visual Studio, чтобы переключить его на VB.

Примечание

Во многих доменах есть черные дыры/перехватчики... первый примет любой адрес электронной почты и просто удалит его, если он недействителен, последний примет любой адрес электронной почты и перенаправит его на центральную учетную запись (никаких гарантий относительно того, что произойдет потом... .. продать адрес отправителя спамерам?) В обоих случаях вы не получите сообщение 550, так что вы никогда не можете быть уверены.

person Rudu    schedule 24.05.2012

Самый надежный способ сделать это — отправить тестовое электронное письмо и попросить получателя подтвердить получение, щелкнув ссылку, которую вы затем прочитаете и пометите электронное письмо как активное.

Вы должны выполнять примитивные проверки синтаксиса электронной почты с помощью регулярных выражений, но помимо этого наиболее надежный способ проверить электронную почту — попытаться доставить ее и подтвердить получение.

person Burhan Khalid    schedule 24.05.2012
comment
Спасибо всем за ответы. Я включаю обновление в публикацию, чтобы вы знали, как я рассылаю электронные письма. Это цикл, который проходит через каждого клиента в базе данных и отправляет электронные письма для рекламных акций, когда мы создаем эти рекламные акции. - person Emad-ud-deen; 25.05.2012