Skip to main content
 首页 » 编程设计

c#之如何通过电子邮件发送模态

2024年05月10日4098°冷暖

我是 asp .net MVC 的新手,我有一个模式希望接受用户名、电子邮件地址、评论,还有一个提交按钮。我正在寻找创建提交功能,以便在按下时发送电子邮件。

我有过使用 C# 发送电子邮件的经验,没问题,我遇到的麻烦是将两者联系在一起。

<div class="modal fade" id="contact" role="dialog"> 
  <div class="modal-dialog"> 
    <div class="modal-content"> 
      <form class="form-horizontal"> 
        <div class="modal-header"> 
          <h4>Contact Tech Site</h4> 
        </div> 
        <div class="modal-body"> 
 
          <div class="form-group"> 
            <label for="contact-name" class="col-lg-2 control-label">Name:</label> 
            <div class="col-lg-10"> 
 
              <input type="text" class="form-control" id="contact-name" placeholder="Full Name"> 
 
            </div> 
          </div> 
 
          <div class="form-group"> 
 
            <label for="contact-email" class="col-lg-2 control-label">Email:</label> 
            <div class="col-lg-10"> 
 
              <input type="email" class="form-control" id="contact-email" placeholder="you@example.com"> 
 
            </div> 
 
          </div> 
 
          <div class="form-group"> 
 
            <label for="contact-msg" class="col-lg-2 control-label">Message:</label> 
            <div class="col-lg-10"> 
 
              <textarea class="form-control" rows="8"></textarea> 
 
            </div> 
 
          </div> 
 
        </div> 
        <div class="modal-footer"> 
          <a class="btn btn-default" data-dismiss="modal">Close</a> 
          <button class="btn btn-primary" type="submit">Send</button> 
        </div> 
      </form> 
    </div> 
  </div> 
</div> 

电子邮件代码

var SMTP_USERNAME = User.EmailUsername; 
var SMTP_PASSWORD = EncryptionHelper.Decrypt(User.EmailPassword); 
Mail.Subject = Subject; 
Mail.Body = EmailText; 
foreach (var to in SelectedUsers) 
{ 
    foreach (var contactMethod in to.ContactMethods.Where(x => x.Primary && x.Channel == ContactMethod.Channels.Email)) 
    { 
        Mail.To.Add(contactMethod.Value); 
    } 
 } 
 
 Mail.From = new MailAddress(SMTP_USERNAME, User.FullName()); 
 
 //Server 
 var HOST = unitOfWork.SettingRepository.GetString(KnownKeys.SMTPServer); 
 
 //Port 
 var PORT = int.Parse(unitOfWork.SettingRepository.GetString(KnownKeys.SMTPPort)); 
 
 
 // Create an SMTP client with the specified host name and port. 
 var emailSent = false; 
 using (SmtpClient client = new SmtpClient(HOST, PORT)) 
 { 
     // Create a network credential with your SMTP user name and password. 
     client.Credentials = new System.Net.NetworkCredential(SMTP_USERNAME, SMTP_PASSWORD); 
 
     // Use SSL when accessing Amazon SES. The SMTP session will begin on an unencrypted connection, and then  
     // the client will issue a STARTTLS command to upgrade to an encrypted connection using SSL. 
     client.EnableSsl = true; 
 
 
     // Send the email.  
     try 
     { 
         client.Send(Mail); 
         emailSent = true; 
     } 
     catch (Exception ex) 
     { 
         MessageBox.Show("Error message: " + ex.Message); 
     } 
} 

请您参考如下方法:

创建模型 -

public class EmailViewModel 
{ 
    public string Username { get; set; } 
    public string Email { get; set; } 
    public string Comments { get; set; } 
} 

然后创建你的 Controller -

public class HomeController : Controller 
{ 
    public ActionResult GetEmailForm() 
    { 
        return View(); 
    } 
 
    public ActionResult SubmitEmail(EmailViewModel model) 
    { 
        var result = SendEamil(model); 
        return View(); 
    } 
 
    private bool SendEamil(EmailViewModel model) 
    { 
        // Use model and send email with your code. 
        return true; 
    } 
} 

基本上 GetEmailForm 操作会返回一个带有表单的 View -

@model MvcApplication1.Controllers.EmailViewModel 
 
@{ 
    ViewBag.Title = "GetEmailForm"; 
} 
 
<h2>GetEmailForm</h2> 
 
<link href="../../Content/bootstrap.css" rel="stylesheet" /> 
 
 
@using (Html.BeginForm("SubmitEmail", "Home", FormMethod.Post)) 
{ 
   <div id="contact"> 
      <div class="modal-dialog"> 
          <div class="modal-content"> 
              <form class="form-horizontal"> 
                  <div class="modal-header"> 
                    <h4>Contact Tech Site</h4> 
                    </div> 
                    <div class="modal-body"> 
 
                        <div class="form-group"> 
                            <label for="contact-name" class="col-lg-2 control-label">Name:</label> 
                            <div class="col-lg-10"> 
                                @Html.TextBoxFor(m => m.Username, new { @placeholder = "Full Name"}) 
                            </div> 
                        </div> 
 
                        <div class="form-group"> 
                            <label for="contact-email" class="col-lg-2 control-label">Email:</label> 
                            <div class="col-lg-10"> 
                                @Html.TextBoxFor(m => m.Email, new { @placeholder = "you@example.com"}) 
                            </div> 
                        </div> 
 
                        <div class="form-group"> 
                            <label for="contact-msg" class="col-lg-2 control-label">Message:</label> 
                            <div class="col-lg-10"> 
                                @Html.TextAreaFor(m => m.Comments, new { @placeholder = "Comments"}) 
                            </div> 
                        </div> 
 
                    </div> 
                    <div class="modal-footer"> 
                        <a class="btn btn-default" data-dismiss="modal">Close</a> 
                        <button class="btn btn-primary" type="submit">Send</button> 
                    </div> 
                </form> 
            </div> 
        </div> 
    </div> 
} 

当您输入数据并单击提交时,它会将带有数据的 View 模型发布到同一 Controller 的 SubmitEmail 操作。

页面输出如下所示,抱歉样式,我没有时间删除了一些样式。

当您输入数据并点击提交时,您将获得如下所示的数据 -

获得数据后,您可以在私有(private)方法 SendEmail(其中包含您的代码)中使用它来发送电子邮件。