Страница содержимого Aspx, не удалось выполнить отправить код электронной почты - PullRequest
0 голосов
/ 27 мая 2019

Я использую страницу контента asp, в которой используется главный файл сайта. Я особенно запутался в runat=server с метками и получении vb.net для выполнения. Я пробовал это, но это не работает:

<div class="card-body">
    <asp:Label ID="Label1" runat="server" />
    <div class="form-group">
        <label for="name">Name</label>
        <input type="text" class="form-control" id="name" aria-describedby="emailHelp" placeholder="Enter name" required>
    </div>
    <div class="form-group" runat="server">
        <asp:Label for="email" runat="server" Text="Email address"></asp:Label>
        <input type="email" class="form-control" id="email" aria-describedby="emailHelp" placeholder="Enter email" required>
        <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
    </div>
    <div class="form-group">
        <label for="message">Message</label>
        <textarea class="form-control" id="message" rows="6" required></textarea>
    </div>
    <div class="mx-auto">
        <asp:Button type="submit" class="btn btn-primary text-right" ID="Btn_SendMessage" runat="server" Text="Submit"></asp:Button>
    </div>

Я пытался поместить код html в форму, но из-за ошибок не было вложенной формы, поэтому я не мог понять, как отправить html на код vb.net

VB.NET код:

Protected Sub Btn_SendMessage_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim Email As String = FindControl("email").ToString
    Dim Name As String = FindControl("name").ToString
    Dim Message As String = FindControl("message").ToString
    Dim Mail As New MailMessage
    Dim SMTP As New SmtpClient("smtp.gmail.com")

    Mail.Subject = Name
    Mail.From = New MailAddress(Email)
    SMTP.Credentials = New System.Net.NetworkCredential("xxxx@gmail.com", "xxxxxxxx") '<-- Password Here

    Mail.To.Add("xxxxxxx@gmail.com") 

    Mail.Body = Message

    SMTP.EnableSsl = True
    SMTP.Port = "587"

    Try
        SMTP.Send(Mail)
        Label1.Text = "Message sent"
    Catch ex As Exception
        Label1.Text = ex.ToString
    End Try
End Sub

Страница обновляется и ничего не происходит, я даже не думаю, что VB.NET выполняется.

1 Ответ

0 голосов
/ 27 мая 2019

Вот рабочий пример на основе вашего кода:

ASPX

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication2.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div class="card-body">
            <asp:Label ID="Label1" runat="server" />
            <div class="form-group">
                <label for="name">Name</label>
                <asp:Label ID="Label4" runat="server" AssociatedControlID="TextBoxName" Text="Name"></asp:Label>
                <asp:TextBox ID="TextBoxName" runat="server" CssClass="form-control" placeholder="Enter name"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidatorName" runat="server" ErrorMessage="*" ControlToValidate="TextBoxName"></asp:RequiredFieldValidator>
            </div>
            <div class="form-group" runat="server">                
                <asp:Label ID="Label3" runat="server" AssociatedControlID="TextBoxEmail" Text="Email address"></asp:Label>
                <asp:TextBox ID="TextBoxEmail" runat="server" CssClass="form-control" placeholder="Enter name"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidatorEmail" runat="server" ErrorMessage="*" ControlToValidate="TextBoxEmail"></asp:RequiredFieldValidator>
                <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
            </div>
            <div class="form-group">
                <asp:Label ID="Label2" runat="server" AssociatedControlID="TextBoxMessage" Text="Message"></asp:Label>
                <asp:TextBox ID="TextBoxMessage" runat="server" TextMode="MultiLine" CssClass="form-control" Rows="6"></asp:TextBox>                
            </div>
            <div class="mx-auto">
                <asp:Button type="submit" class="btn btn-primary text-right" ID="Btn_SendMessage" runat="server" Text="Submit" OnClick="Btn_SendMessage_Click"></asp:Button>
            </div>
        </div>
    </form>
</body>
</html>

Код позади

Protected Sub Btn_SendMessage_Click(sender As Object, e As EventArgs) Handles Btn_SendMessage.Click
    Dim Mail As New MailMessage
    Dim SMTP As New SmtpClient("smtp.gmail.com")

    Mail.Subject = TextBoxName.Text
    Mail.From = New MailAddress(TextBoxEmail.Text)
    SMTP.Credentials = New System.Net.NetworkCredential("xxxx@gmail.com", "xxxxxxxx") '<-- Password Here

    Mail.To.Add("xxxxxxx@gmail.com")

    Mail.Body = TextBoxMessage.Text

    SMTP.EnableSsl = True
    SMTP.Port = "587"

    Try
        SMTP.Send(Mail)
        Label1.Text = "Message sent"
    Catch ex As Exception
        Label1.Text = ex.ToString
    End Try
End Sub

Теги с атрибутом runat="server" являются серверными элементами управления ASP.NET, которые отображаются как их HTML-аналоги на полученной веб-странице, отправленной в браузер.Во время обработки страницы на стороне сервера вы можете получить к ним доступ в своем коде напрямую, используя их идентификаторы.

Обратите внимание, что для обязательных полей я использовал средства проверки на стороне сервера.Вам может потребоваться добавить следующую настройку в файл Web.config на случай, если вы получите ошибку времени выполнения о ненавязчивой проверке:

<appSettings>
  <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>

Надеюсь, это поможет.Я использую Visual Studio 2017 и целевой платформой является .NET 4.6.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...