ASP.NET (VB) Contact Mailer Ошибка Ошибка: MailObj.Send (myMessage) не удалось выполнить. - PullRequest
1 голос
/ 16 июля 2011

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

   MailObj.Send(myMessage)

Я поместил фиктивные учетные данные в фрагменте ниже, но трижды проверил мой smtp un / pw ине могу понять вещи.

VB CODE

Imports System.Web.Mail
Imports System.Net.Mail

Partial Class Contact
    Inherits System.Web.UI.Page

    Protected Sub SubmitForm_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        If Not Page.IsValid Then Exit Sub

        Dim SendResultsTo As String = "myemail@email.com"
        Dim smtpMailServer As String = "stmp.mysite.com"
        Dim smtpUsername As String = "myusername"
        Dim smtpPassword As String = "mypassword"
        Dim MailSubject As String = "Customer Message"

        Try
            Dim txtQ As TextBox = Me.FormContent.FindControl("TextBoxQ")
            If txtQ IsNot Nothing Then
                Dim ans As String = ViewState("hf1")
                If ans.ToLower <> txtQ.Text.ToLower Or ans.ToUpper <> txtQ.Text.ToUpper Then
                    Me.YourForm.ActiveViewIndex = 3
                    Exit Sub
                End If
            End If

            Dim FromEmail As String = SendResultsTo
            Dim msgBody As StringBuilder = New StringBuilder()
            Dim sendCC As Boolean = False


            For Each c As Control In Me.FormContent.Controls
                Select Case c.GetType.ToString
                    Case "System.Web.UI.WebControls.TextBox"
                        Dim txt As TextBox = CType(c, TextBox)
                        If txt.ID.ToLower <> "textboxq" Then
                            msgBody.Append(txt.ID & ": " & txt.Text & vbCrLf & vbCrLf)
                        End If
                        If txt.ID.ToLower = "email" Then
                            FromEmail = txt.Text
                        End If
                        If txt.ID.ToLower = "subject" Then
                            MailSubject = txt.Text
                        End If
                    Case "System.Web.UI.WebControls.CheckBox"
                        Dim chk As CheckBox = CType(c, CheckBox)
                        If chk.ID.ToLower = "checkboxcc" Then
                            If chk.Checked Then sendCC = True
                        Else
                            msgBody.Append(chk.ID & ": " & chk.Checked & vbCrLf & vbCrLf)
                        End If

                    Case "System.Web.UI.WebControls.RadioButton"
                        Dim rad As RadioButton = CType(c, RadioButton)
                        msgBody.Append(rad.ID & ": " & rad.Checked & vbCrLf & vbCrLf)
                    Case "System.Web.UI.WebControls.DropDownList"
                        Dim ddl As DropDownList = CType(c, DropDownList)
                        msgBody.Append(ddl.ID & ": " & ddl.SelectedValue & vbCrLf & vbCrLf)
                End Select
            Next
            msgBody.AppendLine()

            msgBody.Append("Browser: " & Request.UserAgent & vbCrLf & vbCrLf)
            msgBody.Append("IP Address: " & Request.UserHostAddress & vbCrLf & vbCrLf)
            msgBody.Append("Server Date & Time: " & DateTime.Now & vbCrLf & vbCrLf)

            Dim myMessage As System.Net.Mail.MailMessage = New System.Net.Mail.MailMessage()
            myMessage.To.Add(SendResultsTo)
            myMessage.From = New System.Net.Mail.MailAddress(FromEmail)
            myMessage.Subject = MailSubject
            myMessage.Body = msgBody.ToString
            myMessage.IsBodyHtml = False
            If sendCC Then myMessage.CC.Add(FromEmail)


            Dim basicAuthenticationInfo As New System.Net.NetworkCredential(smtpUsername, smtpPassword)
            Dim MailObj As New System.Net.Mail.SmtpClient(smtpMailServer)
            MailObj.Credentials = basicAuthenticationInfo

           'problem occurs here.  The error details state "Failure to send mail"
            MailObj.Send(myMessage)

            Me.YourForm.ActiveViewIndex = 1
        Catch
            Me.YourForm.ActiveViewIndex = 2
        End Try

    End Sub
End Class

ASP.NET CODE

  <asp:MultiView ID="YourForm" runat="server" ActiveViewIndex="0">
            <asp:View ID="FormContent" runat="server">
                <label for="Email">
                    Enter your Email Address:<br />

                    <asp:TextBox ID="Email" runat="server" Columns="35">
                    </asp:TextBox>
                </label>
                <%--make sure they enter an email--%>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="Email"
                    Display="Dynamic" ErrorMessage="Please enter your email address." SetFocusOnError="True"
                    CssClass="ValidateMessage" ForeColor="">* Required</asp:RequiredFieldValidator>
                <%--<make sure its a valid email--%>
                <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="Email"
                    ErrorMessage="Please enter a valid email address." SetFocusOnError="True" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
                    CssClass="ValidateMessage" ForeColor="">* Please enter a valid email address.</asp:RegularExpressionValidator>
                <br />
                <br />

                <label for="Message">
                    Please type your message below:
                    <%--make sure user enters a message--%>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="Message"
                        ErrorMessage="Please enter a message" SetFocusOnError="True" CssClass="ValidateMessage"
                        ForeColor="">* Required</asp:RequiredFieldValidator>
                    <br />
                    <%-- text box that users can type their message--%>
                    <asp:TextBox ID="Message" runat="server" TextMode="MultiLine" Columns="55" Rows="10">
                    </asp:TextBox>
                </label>
                <br />
               <% %>
                <asp:ValidationSummary ID="ValidationSummary1" runat="server" ShowMessageBox="True"
                    ShowSummary="True" CssClass="ValidateMessage" ForeColor="" />
                <br />
                <br />
                <%-- submit button--%>
                <asp:Button ID="SubmitForm" runat="server" OnClick="SubmitForm_Click" Text="Submit Form" />
                <br />
            </asp:View>

            <asp:View ID="FormConfirmationMessage" runat="server">
                Your message has been sent. Thank you for contacting us. One of our dedicated staff
                members will contact you shortly.<br />
            </asp:View>
            <asp:View ID="FormErrorMessage" runat="server">
                We're sorry, there was an error sending your message. Please give us a call at 1-877-302-5604
                or email us at team@acupuncturepainpros.com.
            </asp:View>
        </asp:MultiView>

1 Ответ

2 голосов
/ 16 июля 2011

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

Вы пытаетесь ретранслировать через SMTP-сервер без надлежащей аутентификации / правил и т. Д.?

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

-

Ну, вы всегда можете заглянуть вSMTP-сервер регистрирует (если у вас есть к ним доступ), чтобы определить причину, по которой ваше сообщение не отправляется.

В противном случае вы можете «вручную» отправить электронное письмо на сервер с того же компьютера, что и ваше приложение.запускается из.Это может сказать вам, в чем проблема.

Итак, вы делаете это:

С того же компьютера, на котором размещено ваше приложение (и, если предположить, что мы имеем дело с окнами здесь), Telnet кпочтовый сервер, выполнив следующую команду:

telnet smtp.siteA.com 25

Если вы используете Win7 и не хотите включать telnet, вы можете использовать PuTTY .

После подключения к серверу вы должны увидеть какое-то приветственное сообщение.Затем введите следующие команды, по одной в каждой строке, заканчивая каждую строку нажатием Enter.

EHLO example.com
MAIL FROM: <example@example.com>
RCPT TO: <admin@siteA.com>
DATA
Subject:Test Subject
Test Body
.
QUIT

Каждая из этих команд должна получить подтверждение от сервера.Если с одним из них возникнет проблема, вам сообщат столько же.

Если в ответе на первую строку (в том числе с EHLO) есть проблема, попробуйте:

HELO example.com

Я использовал example.com для представления домена и адреса, по которому, кстати, приходит электронное письмо.Это можно изменить на что угодно, и, как правило, это не будет иметь большого значения для результата.

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

...