2

VB.Netで、電子メールアドレスを「ping」して、その電子メールがエラーを発生させない実際の電子メールであるかどうかを確認する方法はありますか?

はいの場合、これを実装するためのVB.Netコーディングがどのように見えるかを示すことができますか?

私はこれを顧客の電子メールを必要とするアプリで使用することを計画しており、顧客の詳細を保存する前に、電話の受け手がフォームに入力するときに検証するとよいでしょう。

これは、customerテーブルのすべての顧客にメールプロモーションを送信するために使用しているコードです。

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
4

2 に答える 2

4

はい、それは完全に可能です:

1 ドメインのMXレコードをDNSルックアップ

  • 複数ある場合がありますが、技術的には最も低い優先度インジケーターを持つものが優先されますが、誰でも選択できます。

2 TCPメールサーバーに接続します(ポート25)

  • こんにちはと言う:HELO
  • 自分自身を識別する:mail from:<test@example.com>
  • あなたが書いている相手を言ってください:rcpt to<testaddress@example.com>
  • この時点で、サーバーは応答で応答します。メッセージ(:)でエラーが発生しOKます。550The email account that you tried to reach does not exist
  • 切断すると、メッセージはドロップされます。

しかし、おい、あなたはVBコードにこれをさせたいですか?必要なのは、DNSトーキングピースとTCP接続構築ピースだけです(または、これらすべてを実行するSMTPライブラリがいくつかある可能性があります。または、自分で理解するためのインスピレーションを提供します)。おそらくそれを実行するC#コード例を見つけて、VisualStudioの変換ツールを使用してVBに切り替えることを忘れないでください。

ノート

多くのドメインにはブラックホール/キャッチオールがあります...前者は任意の電子メールアドレスを受け入れ、無効な場合はそれを削除します。後者は任意の電子メールアドレスを受け入れて中央アカウントに転送します(その後何が起こるかについての保証はありません。 。送信者のアドレスをスパマーに販売しますか?)どちらの場合も550メッセージが届かないため、確信が持てません。

于 2012-05-24T18:49:01.057 に答える
1

これを行う最も信頼できる方法は、テストメールを送信し、受信者にリンクをクリックして受信を確認させることです。リンクをクリックして、メールを読んでアクティブとしてマークします。

正規表現を使用して電子メールの構文を基本的にチェックする必要がありますが、それを超えると、電子メールを検証する最も信頼できる方法は、配信を試みて受信を確認することです。

于 2012-05-24T18:44:23.970 に答える