是否可以通过表单发送电子邮件

时间:2012-08-19 09:17:17

标签: c# asp.net webmatrix webmatrix-2

您好我在我的页面上设置了一个表单。如何通过电子邮件发送给定的电子邮件地址?

<form action="#">
    <p>Please contact us</p>
    <input type="text" maxlength="30" value="Name" class="textcontact" />
    <input type="text" maxlength="30" value="E-mail Address" class="textcontact" />
    <input type="text" maxlength="30" value="Subject" class="textcontact" />
    <textarea name="message" id="message" cols="30" rows="10"></textarea>
    <input type="submit" value="" class="submit" />
</form>

我知道这与表单操作有关。但是webmatrix 2(?)中没有控制器或任何东西。我如何使它工作?

2 个答案:

答案 0 :(得分:2)

以下是从Webforms 2中完全按照您的要求做的指南。

http://www.asp.net/web-pages/tutorials/email-and-search/11-adding-email-to-your-web-site

创建一个新网站。

添加名为EmailRequest.cshtml的新页面并添加以下标记:

<!DOCTYPE html>
<html>
<head>
   <title>Request for Assistance</title>
</head>
<body>
  <h2>Submit Email Request for Assistance</h2>
  <form method="post" action="ProcessRequest.cshtml">
    <div>
        Your name:
        <input type="text" name="customerName" />
    </div>

    <div>
        Your email address:
        <input type="text" name="customerEmail" />
    </div>

    <div>
        Details about your problem: <br />
        <textarea name="customerRequest" cols="45" rows="4"></textarea>
    </div>

    <div>
        <input type="submit" value="Submit" />
    </div>
  </form>
</body>
</html>

请注意,表单元素的action属性已设置为ProcessRequest.cshtml。这意味着表单将提交到该页面,而不是返回到当前页面。

在网站上添加一个名为ProcessRequest.cshtml的新页面,并添加以下代码和标记:

@{
    var customerName = Request["customerName"];
    var customerEmail = Request["customerEmail"]; 
    var customerRequest = Request["customerRequest"];
    var errorMessage = "";
    var debuggingFlag = false;
    try {
        // Initialize WebMail helper
        WebMail.SmtpServer = "your-SMTP-host";
        WebMail.SmtpPort = 25;
        WebMail.UserName = "your-user-name-here";
        WebMail.Password = "your-account-password";
        WebMail.From = "your-email-address-here";

        // Send email
        WebMail.Send(to: customerEmail,
                subject: "Help request from - " + customerName,
            body: customerRequest
        );
    }
    catch (Exception ex ) {
        errorMessage = ex.Message;
    }
}
<!DOCTYPE html>
<html>
<head>
  <title>Request for Assistance</title>
</head>
<body>
  <p>Sorry to hear that you are having trouble, <b>@customerName</b>.</p>
    @if(errorMessage == ""){
      <p>An email message has been sent to our customer service
         department regarding the following problem:</p>
      <p><b>@customerRequest</b></p>
    }
    else{
        <p><b>The email was <em>not</em> sent.</b></p>
        <p>Please check that the code in the ProcessRequest page has 
           correct settings for the SMTP server name, a user name, 
           a password, and a "from" address.
        </p>
        if(debuggingFlag){
            <p>The following error was reported:</p>
            <p><em>@errorMessage</em></p>
        }
    }
</body>
</html>

答案 1 :(得分:1)

您可以拥有以下网页并使用SmtpClient课程发送电子邮件:

@using System.Net.Mail;
@{
    if (IsPost)
    {
        var email = Request["Email"];       
        var subject = Request["Subject"];       
        var message = Request["Message"];       
        using (var client = new SmtpClient())
        {
             var msg = new MailMessage();
             msg.To.Add(email);
             msg.Subject = subject;
             msg.Body = message;
             client.Send(msg);
             <text>The email has been successfully sent</text>
         }
     }
}

<form action="" method="post">
    <p>Please contact us</p>
    <input type="text" name="email" maxlength="30" value="to@gmail.com" />
    <input type="text" name="subject" maxlength="30" value="Subject" />
    <textarea name="message" cols="30" rows="10"></textarea>
    <input type="submit" value="Send" class="submit" />
</form>

并在您的web.config中配置您的SMTP服务器。以下是Gmail的一个示例:

<system.net>
    <mailSettings>
        <smtp from="youraccount@gmail.com">
            <network 
                host="smtp.gmail.com" 
                password="secret" 
                port="587" 
                userName="youraccount@gmail.com"
                enableSsl="true"
            />
        </smtp>
    </mailSettings>
</system.net>