it-swarm.com.de

So senden Sie eine E-Mail aus der MVC 5-Anwendung

Ich habe ein Formular, das ein Kunde ausfüllen muss. Sobald das Formular gesendet wurde, möchte ich die grundlegenden Informationen aus der Indexansicht des Formulars (Vorname, Nachname, Telefonnummer usw.) an eine E-Mail senden. Ich verwende derzeit GoDaddy für meine Hosting-Site. Ist das wichtig oder kann ich die E-Mail direkt aus meiner MVC-Anwendung senden? Ich habe folgendes für mein Model, View, Controller. Ich habe das noch nie gemacht und bin mir wirklich nicht sicher, wie ich vorgehen soll. 

Modell: 

public class Application
{
    public int Id { get; set; }

    [DisplayName("Marital Status")]
    public bool? MaritalStatus { get; set; }


    [Required]
    [DisplayName("First Name")]
    public string FirstName { get; set; }

    [DisplayName("Middle Initial")]
    public string MiddleInitial { get; set; }
     [Required]
    [DisplayName("Last Name")]
    public string LastName { get; set; }
}

Controller: 

public ActionResult Index()
{
        return View();
}

// POST: Applications/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for 
// more details see http://go.Microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index([Bind(Include = "Id,FirstName,MiddleInitial,LastName")] Application application)
{
    ViewBag.SubmitDate = DateTime.Now;

    if (ModelState.IsValid)
    {
        application.GetDate = DateTime.Now;
        db.Applications.Add(application);
        db.SaveChanges();
        return RedirectToAction("Thanks");
    }

    return View(application);
}

Aussicht

<table class="table table-striped">
    <tr>
        <th>
           @Html.ActionLink("First Name", "Index", new { sortOrder = ViewBag.NameSortParm })
        </th>

        <th>
            @Html.ActionLink("Last Name", "Index", new { sortOrder = ViewBag.NameSortParm })
        </th>

        <th>
            @Html.ActionLink("Date Submitted", "Index", new { sortOrder = ViewBag.NameSortParm})
        </th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.FirstName)
        </td>

        <td>
            @Html.DisplayFor(modelItem => item.LastName)
        </td>

        <td>
            @Html.DisplayFor(modelItem => item.GetDate)
        </td>
    </tr>
}
14
dc922

Sie benötigen einen SMTP-Server, um E-Mails senden zu können. Keine Ahnung, wie GoDaddy funktioniert, aber ich bin sicher, dass sie etwas liefern werden.

Um E-Mails von einer MVC-App zu senden, geben Sie Ihre SMTP-Details entweder im Code oder im web.config an. Ich empfehle es in der Konfigurationsdatei, da es wesentlich einfacher ist, es zu ändern. Mit allem in der web.config:

SmtpClient client=new SmtpClient();

Ansonsten mache es im Code:

SmtpClient client=new SmtpClient("some.server.com");
//If you need to authenticate
client.Credentials=new NetworkCredential("username", "password");

Jetzt erstellen Sie Ihre Nachricht:

MailMessage mailMessage = new MailMessage();
mailMessage.From = "[email protected]";
mailMessage.To.Add("[email protected]");
mailMessage.Subject = "Hello There";
mailMessage.Body = "Hello my friend!";

Schick es endlich:

client.Send(mailMessage);

Ein Beispiel für die Einrichtung von web.config:

<system.net>
    <mailSettings>
        <smtp>
            <network Host="your.smtp.server.com" port="25" />
        </smtp>
     </mailSettings>
</system.net>
27
DavidG

Sie können es versuchen


Regler

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult ContactDees(FormCollection form)
    {
        EmailBusiness me = new EmailBusiness();
        //string message = Session["Urgent Message"].ToString();
        string from = form["from"];
        string subj = form["sub"];
        string body = form["body"];
        me.from = new MailAddress(from);
        me.sub = subj;
        me.body = body;
        me.ToAdmin();
        return RedirectToAction("Feedback", "First");}

Geschäftslogik

public class EmailBusiness
{
    public MailAddress to { get; set; }
    public MailAddress from { get; set; }
    public string sub { get; set; }
    public string body { get; set; }
    public string ToAdmin()
    {
        string feedback = "";
        EmailBusiness me = new EmailBusiness();

        var m = new MailMessage()
        {

            Subject = sub,
            Body = body,
            IsBodyHtml = true
        };
        to = new MailAddress("[email protected]", "Administrator");
        m.To.Add(to);
        m.From = new MailAddress(from.ToString());
        m.Sender = to;


        SmtpClient smtp = new SmtpClient
        {
            Host = "pod51014.Outlook.com",
            Port = 587,
            Credentials = new NetworkCredential("[email protected]", "Dut930611"),
            EnableSsl = true
        };

        try
        {
            smtp.Send(m);
            feedback = "Message sent to insurance";
        }
        catch (Exception e)
        {
            feedback = "Message not sent retry" + e.Message;
        }
        return feedback;
    }

}

Aussicht

    <div class="form-horizontal">
        <div class="form-group">
            @Html.LabelFor(m => m.From, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(m => m.From, new { @class = "form-control MakeWidth" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.Subject, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(m => m.Subject, new { @class = "form-control MakeWidth" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.Body, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextAreaFor(m => m.Body, new { @class = "form-control MakeWidth" })
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" class="btn btn-primary" value="Send Email" />
            </div>
        </div>
    </div>

Web Config

6

Web Config:

<system.net>
  <mailSettings>
    <smtp from="[email protected]">
      <network Host="smtp-mail.Outlook.com" 
               port="587" 
               userName="[email protected]"
               password="password" 
               enableSsl="true" />
    </smtp>
  </mailSettings>
</system.net>

Controller:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Contact(EmailFormModel model)
{
    if (ModelState.IsValid)
    {
        var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
        var message = new MailMessage();
        message.To.Add(new MailAddress("[email protected]")); //replace with valid value
        message.Subject = "Your email subject";
        message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
        message.IsBodyHtml = true;
        using (var smtp = new SmtpClient())
        {
            await smtp.SendMailAsync(message);
            return RedirectToAction("Sent");
        }
    }
    return View(model);
}
3
Anup Shetty
    public static async Task SendMail(string to, string subject, string body)
    {
        var message = new MailMessage();
        message.To.Add(new MailAddress(to));
        message.From = new MailAddress(WebConfigurationManager.AppSettings["AdminUser"]);
        message.Subject = subject;
        message.Body = body;
        message.IsBodyHtml = true;

        using (var smtp = new SmtpClient())
        {
            var credential = new NetworkCredential
            {
                UserName = WebConfigurationManager.AppSettings["AdminUser"],
                Password = WebConfigurationManager.AppSettings["AdminPassWord"]
            };

            smtp.Credentials = credential;
            smtp.Host = WebConfigurationManager.AppSettings["SMTPName"];
            smtp.Port = int.Parse(WebConfigurationManager.AppSettings["SMTPPort"]);
            smtp.EnableSsl = true;
            await smtp.SendMailAsync(message);
        }
    }
0
user9817675
// This example uses SendGrid SMTP via Microsoft Azure
// The SendGrid userid and password are hidden as environment variables
private async Task configSendGridasyncAsync(IdentityMessage message)
    {
        SmtpClient client = new SmtpClient("smtp.sendgrid.net");
        var password = Environment.GetEnvironmentVariable("SendGridAzurePassword");
        var user = Environment.GetEnvironmentVariable("SendGridAzureUser");
        client.Credentials = new NetworkCredential(user, password);

        var mailMessage = new MailMessage();
        mailMessage.From = new MailAddress("[email protected]", "It's Me"); ;
        mailMessage.To.Add(message.Destination);
        mailMessage.Subject = message.Subject;
        mailMessage.Body = message.Body;
        mailMessage.IsBodyHtml = true;

        await client.SendMailAsync(mailMessage);
        await Task.FromResult(0);
    }
0
Jim Kay