How to send mail In EF core Razor pages

Arnab 66 Reputation points
2022-07-25T12:44:50.923+00:00

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
224288-screenshot-2022-07-25-180840.jpg

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?

Entity Framework Core
Entity Framework Core
A lightweight, extensible, open-source, and cross-platform version of the Entity Framework data access technology.
698 questions
ASP.NET Core
ASP.NET Core
A set of technologies in the .NET Framework for building web applications and XML web services.
4,209 questions
{count} votes