How to send mail In EF core Razor pages
Arnab
66
Reputation points
I tried to send email when I create a IT tracker Request here In input fields I am Choosing The Mails in which I want To send The Mails.so My Entity class is
public class Ittracker
{
//[Required]
[Required]
[RegularExpression("([a-zA-Z][a-zA-Z ]+)", ErrorMessage = "Only alphabets are allowed")]
public string Name { get; set; }
public int Id { get; set; }
[Required]
[RegularExpression("(^EST\\d+$)", ErrorMessage = "Invalid EmployeCode ")]
public string EmployeCode { get; set; }
[Required]
[EmailAddress]
public string EmailId { get; set; }
[Required]
public string Priority { get; set; }
[Required]
public string SupportType { get; set; }
[Required]
public string RequestDescription { get; set; }
public string Requeststatus { get; set; }
public string caseDetails { get; set; }
public string OptionalText { get; set; }
[DataType(DataType.Date)]
[BindProperty]
public DateTime? StartDate { get; set; }
[DataType(DataType.Date)]
[BindProperty]
public DateTime? EndDate { get; set; }
[BindProperty]
public DateTime? RequestDate { get; set; }
[BindProperty,EmailAddress, Required] //egulo pore add korei.migration e nei.
public string MainEmailRecever { get; set; }
[BindProperty, EmailAddress,Required]
public string CCEmailRecever { get; set; }
}
my CreateModel is
public class CreateModel : PageModel
{
private readonly ApplicationDbContext _db;
[BindProperty]
public DateTime? RequestDate { get; set; }
[BindProperty]
public Ittracker Ittracker { get; set; }
[BindProperty]
public List<SelectListItem> PriorityList { get; set; }
[BindProperty]
public List<SelectListItem> SupportTypeList { get; set; }
[BindProperty]
public List<SelectListItem> RequeststatusList { get; set; }
//[BindProperty, EmailAddress, Required]
//public string MainEmailRecever { get; set; }
//[BindProperty, EmailAddress,Required]
//public string CCEmailRecever { get; set; }
//[BindProperty]
//public string EmployeCode { get; set; }
public CreateModel(ApplicationDbContext db)
{
_db = db;
}
public IActionResult OnGet(/*int? id*/)
{
//if (id == null)
//{
// return NotFound();
//}
List<string> p = new List<string> { "Critical Priority", "High Priority", "Medium Priority", "Low Priority" };
PriorityList = p.Select(x => new SelectListItem { Text = x, Value = x }).ToList();
List<string> s = new List<string> { "Account Locked", "access Permission", "Email", "Desk Phone","Workstation","Application","VPN Access","FTP Account","Manex","Voyager" ,"Printing","Other"};
SupportTypeList = s.Select(x => new SelectListItem { Text = x, Value = x }).ToList();
List<string> l = new List<string> { "Active", "In Progress", /*"Resolved",*/ "Closed"/*, "Waiting" */};
RequeststatusList = l.Select(x => new SelectListItem { Text = x, Value = x }).ToList();
return Page();
}
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
var body = $@"<p>Thank you, we have received your Request for User Code {Ittracker.EmployeCode} unit(s) of {Ittracker.Name}!</p>
We will contact you if we have questions about your Request. Thanks!<br/>";
using (var smtp = new SmtpClient())
{
smtp.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
smtp.PickupDirectoryLocation = @"D:\mailpickup";
var message = new MailMessage();
message.To.Add(Ittracker.MainEmailRecever);
message.CC.Add(Ittracker.CCEmailRecever);
message.Subject = "Ticket - New Issue";
message.Body = body;
message.IsBodyHtml = true;
message.From = new MailAddress("Arnab@eslatetech.com");
await smtp.SendMailAsync(message);
}
_db.Ittracker.Add(Ittracker);
await _db.SaveChangesAsync();
return RedirectToPage("Index");
}
and My create.cshtml is
@page
@model New11.Pages.Ittrackers.CreateModel
@{
ViewData["Title"] = "Create";
Layout = "~/Pages/Shared/_Layout.cshtml";
}
<br />
<h2 class="text-info">Raise Request </h2>
<br />
<form method="post">
<div class="border backgroundWhite">
<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.Name">RequesterName<span class="required">*</span></label>
</div>
<div class="col-5">
<input asp-for="Ittracker.Name" class="form-control" />
</div>
<span asp-validation-for="Ittracker.Name" class="text-danger"></span>
</div>
<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.EmployeCode">RequesterEmpCode<span class="required">*</span></label>
</div>
<div class="col-5">
<input asp-for="Ittracker.EmployeCode" class="form-control" />
</div>
<span asp-validation-for="Ittracker.EmployeCode" class="text-danger"></span>
</div>
<!--<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.StartDate">StartDate</label>
</div>
<div class="col-5">
<input asp-for="Ittracker.StartDate" class="form-control" />
</div>-->
@*<span asp-validation-for="Ittracker.StartDate" class="text-danger"></span>*@
<!--</div>
<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.EndDate">EndDate</label>
</div>
<div class="col-5">
<input asp-for="Ittracker.EndDate" class="form-control" />
</div>-->
@*<span asp-validation-for="Ittracker.EndDate" class="text-danger"></span>*@
<!--</div>-->
<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.EmailId">RequesterEmailId<span class="required">*</span></label>
</div>
<div class="col-5">
<input asp-for="Ittracker.EmailId" class="form-control" />
</div>
<span asp-validation-for="Ittracker.EmailId" class="text-danger"></span>
</div>
<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.RequestDate">RequestDate</label>
</div>
<div class="col-5">
<input asp-for="Ittracker.RequestDate" class="form-control" />
</div>
<span asp-validation-for="Ittracker.RequestDate" class="text-danger"></span>
</div>
@*<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.Priority">Priority</label>
</div>
<div class="col-5">
<input asp-for="Ittracker.Priority" class="form-control" />
</div>
<span asp-validation-for="Ittracker.Priority" class="text-danger"></span>
</div>*@
<div class="form-group">
<div class="row">
<div class="col-2">
<label>Priority<span class="required">*</span></label>
</div>
<div class="col-8">
<select asp-for="Ittracker.Priority" asp-items="Model.PriorityList"></select>
<span class="text-info row">
Critical Priority – Immediate - 30 minutes: Production down
<br />
High Priority– Immediate - 2 business hours: Loss of a major job duty
<br />
Medium Priority- Within 4 business hours: No production impact
<br />
Low Priority- Within 8 business hours: General request
</span>
</div>
<span asp-validation-for="Ittracker.Priority" class="text-danger"></span>
</div>
</div>
@*<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.SupportType"></label>
</div>
<div class="col-5">
<input asp-for="Ittracker.SupportType" class="form-control" />
</div>
<span asp-validation-for="Ittracker.SupportType" class="text-danger"></span>
</div>*@
<div class="form-group">
<div class="row">
<div class="col-2">
<label>SupportType<span class="required">*</span></label>
</div>
<div class="col-8">
<select asp-for="Ittracker.SupportType" asp-items="Model.SupportTypeList"></select>
</div>
<span asp-validation-for="Ittracker.SupportType" class="text-danger"></span>
</div>
</div>
<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.RequestDescription">Request Description<span class="required">*</span></label>
</div>
<div class="col-5">
<textarea asp-for="Ittracker.RequestDescription" class="form-control " rows="6" cols="40"></textarea>
@*<input asp-for="Ittracker.RequestDescription" class="form-control" />*@
<span class="text-info row">
Please add as much detail as possible such as your computer name (look for a white label) and location (box build, RMA, shipping, ect...). The more the better! You can also include screenshots by using the file attachment option.
</span>
</div>
<span asp-validation-for="Ittracker.RequestDescription" class="text-danger"></span>
</div>
@*<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.Requeststatus"></label>
</div>
<div class="col-5">
<input asp-for="Ittracker.Requeststatus" class="form-control" />
</div>
<span asp-validation-for="Ittracker.Requeststatus" class="text-danger"></span>
</div>*@
<div class="form-group">
<div class="row">
<div class="col-2">
<label>Request Status <span class="required">*</span></label>
</div>
<div class="col-8">
<select asp-for="Ittracker.Requeststatus" asp-items="Model.RequeststatusList"></select>
</div>
<span asp-validation-for="Ittracker.Requeststatus" class="text-danger"></span>
</div>
</div>
@*<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.StartDate">StartDate</label>
</div>
<div class="col-5">
<input asp-for="Ittracker.StartDate" class="form-control" />
</div>
<span asp-validation-for="Ittracker.EmployeCode" class="text-danger"></span>
</div>
<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.EndDate">EndDate</label>
</div>
<div class="col-5">
<input asp-for="Ittracker.EndDate" class="form-control" />
</div>
<span asp-validation-for="Ittracker.EndDate" class="text-danger"></span>
</div>*@
<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.caseDetails"></label>
</div>
<div class="col-5">
<textarea asp-for="Ittracker.caseDetails" class="form-control " rows="6" cols="40"></textarea>
@*<input asp-for="Ittracker.caseDetails" class="form-control" />*@
</div>
<span asp-validation-for="Ittracker.caseDetails" class="text-danger"></span>
</div>
<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.OptionalText">Text(Optional)</label>
</div>
<div class="col-5">
<textarea asp-for="Ittracker.OptionalText" class="form-control " rows="3" cols="40"></textarea>
@*<input asp-for="Ittracker.OptionalText" class="form-control" />*@
</div>
<span asp-validation-for="Ittracker.OptionalText" class="text-danger"></span>
</div>
<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.MainEmailRecever"></label>
</div>
<div class="col-5">
<input asp-for="Ittracker.MainEmailRecever" class="form-control" />
</div>
<span asp-validation-for="Ittracker.MainEmailRecever" class="text-danger"></span>
</div>
<div class="form-group row">
<div class="col-2">
<label asp-for="Ittracker.CCEmailRecever"></label>
</div>
<div class="col-5">
<input asp-for="Ittracker.CCEmailRecever" class="form-control" />
</div>
<span asp-validation-for="Ittracker.CCEmailRecever" class="text-danger"></span>
</div>
<div class="form-group row">
<div class="col-5 offset-2">
<partial name="_CreateAndBackToListButton" />
</div>
</div>
</div>
</form>
@section Scripts{
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}
so now while I am executing this in my PickupDirectoryLocation the mails are being Created but it not Sending The mails
when I was Debugging In smtp it is throwing A exception named " ServicePoint = 'smtp.ServicePoint' threw an exception of type 'System.InvalidOperationException'".
Can anyone suggest what I am doing wrong?