Feedback Form to receive an email in Mvc - asp.net-mvc

Actually in my application i have a feedback form to get the complaints through email. So how can i achieve to get an email from each users to some particular email ("abed#gmail.com").
Usually, i use user account credentials to send email to others.
Code to send email
public ActionResult SendEmail(string SentTo, string Text)
{
MailMessage msg = new MailMessage();
msg.From = new MailAddress("senderemail");
msg.To.Add(SentTo);
msg.Subject = "Password";
msg.Body = Text;
msg.Priority = MailPriority.High;
msg.IsBodyHtml = true;
SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
client.UseDefaultCredentials = false;
//client.EnableSsl = false;
client.Credentials = new NetworkCredential("emailaddress", "password");
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.EnableSsl = true;
bool result = false;
try
{
client.Send(msg);
}
catch (Exception)
{
result = false;
}
return View();
}
But how can i receive an email from contact form?
Looking for some help to get the solution for my issue. Any help appreciated. Thanks in advance !!!

Related

.net mvc SendAsync - How to find error logs if a message can't be sent?

I have the following class to send emails.
public class EmailService : IIdentityMessageService
{
public Task SendAsync(IdentityMessage message)
{
if (message != null)
{
MailMessage mail = new MailMessage();
mail.To.Add(message.Destination);
mail.From = new MailAddress("test#test.com");
mail.Subject = message.Subject;
string Body = message.Body;
mail.Body = Body;
mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.test.com";
smtp.Port = 587;
smtp.UseDefaultCredentials = false;
//
smtp.Credentials = new System.Net.NetworkCredential("username", "pass");
smtp.EnableSsl = true;
return smtp.SendMailAsync(mail);
}
return Task.FromResult(0);
}
}
Our IT informed us that he open the port 587 on the firewall. However, the emails can't be sent.
In C:\inetpub\logs\LogFiles\W3SVC2 logs I have the following messages without getting an error.
2021-02-08 12:02:13 192.168.1.2 GET /signalr/connect transport=serverSentEvents&clientProtocol=1.5&connectionToken=1%2FM7LMZNVeWfN1mD1D9geTBdC7vVjo6nQRtD%2BrQv%2BVwUUdC6eE6jbKaIq2CUlrUsaylRVyJgz6fFqoQDsxJ9%2F77L8kizNCyZYkAs5nxK2T6Crz4xlKu9lAS1z9%2FHDen84sd7IVBASCnCm46jfQlrdg%3D%3D&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D&tid=0 81 test#gmail.com 192.168.1.1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/88.0.4324.146+Safari/537.36 http://192.168.1.2:81/Account/ReSendEmailConfirmationTokenAsync?userID=51abfa03-6d09-40bb-8e4c-89117515ff&subject=Confirm%20your%20account 200 0 0 494899
Can you please help me?

Error while sending email using SMTP & exchange server office365.com

I am trying to send email from my controller (MVC4) through exchange server i.e. (outlook.office365.com as I can see it from my outlook settings) using SMTP but could not succeed. I tried solution from many previous posts but cant get any clue. I sincerely appreciate any help from you guys..
Here is my mail configuration:
<system.net>
<mailSettings>
<smtp>
<network host="smtp.office365.com" userName="no-reply#mydomain.com" password="defaultPassword"/>
</smtp>
</mailSettings>
</system.net>
Here is my class for email:
public class eMail
{
public eMail() { }
private string Sender{ get; set; }
private List<string> Recipients { get; set; }
private string Subject { get; set; }
private string Body { get; set; }
public bool SendEmail()
{
try
{
var smptClient = new SmtpClient { EnableSsl = true };
MailMessage newEmail = new MailMessage();
foreach (var reciepent in this.Recipients )
newEmail.To.Add(new MailAddress(recipient));
newEmail.From = new MailAddress(this.Sender);
newEmail.Subject = this.Subject;
newEmail.Body = this.Body;
newEmail.IsBodyHtml = false;
smptClient.Send(newEmail);
return true;
}
catch { return false; }
}
}
in above code if I use "EnableSsl = true", I get error "Server does not support secure connections.". Still if I disable ssl, I get following error:
The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM
use this piece of code:
MailMessage msg = new MailMessage();
msg.To.Add(new MailAddress("someone#somedomain.com", "SomeOne"));
msg.From = new MailAddress("you#yourdomain.com", "You");
msg.Subject = "This is a Test Mail";
msg.Body = "This is a test message using Exchange OnLine";
msg.IsBodyHtml = true;
SmtpClient client = new SmtpClient();
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("your user name", "your password");
client.Port = 25; // give 587 if 25 is blocked
client.Host = "smtp.office365.com";
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.EnableSsl = true;
try
{
client.Send(msg);
lblText.Text = "Message Sent Succesfully";
}
catch (Exception ex)
{
lblText.Text = ex.ToString();
}
Finally I'd resolve the issue which was related to domain we have.
For the person who are facing similar problem, here is how I had fixed it. Follwoing were my email settings:
<network host="smtp.office365.com" userName="no-reply#mydomain.com" password="defaultPassword"/>
If you are on domain then your username must have domain mentioned in your username i.e. no-reply#domain.mydomain.com and bang :)
Cheers!!

confirmation email in mvc5

i am new to mvc and i am trying to make confirmation email on registration in mvc5. i have followed sometutorials. lots of them use sendgrid but i want to use smtp. i have done the tutorials step by step by i cant get email after registration. i cant find the problem becuase i have done what i was read in tutorials.
any help is appritiated.
in identityConfig.cs
public class EmailService : IIdentityMessageService
{
public Task SendAsync(IdentityMessage message)
{
// Plug in your email service here to send an email.
//return Task.FromResult(0);
// Credentials:
var credentialUserName = "[myEmail]";
var sentFrom = "[myEmail]";
var pwd = "[myPassword]";
// Configure the client:
System.Net.Mail.SmtpClient client =
new System.Net.Mail.SmtpClient("smtp.gmail.com");
client.Port = 587;
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
// Create the credentials:
System.Net.NetworkCredential credentials =
new System.Net.NetworkCredential(credentialUserName, pwd);
client.EnableSsl = true;
client.Credentials = credentials;
// Create the message:
var mail =
new System.Net.Mail.MailMessage(sentFrom, message.Destination);
mail.Subject = message.Subject;
mail.Body = message.Body;
// Send:
return client.SendMailAsync(mail);
}
}
public ApplicationUserManager(IUserStore<ApplicationUser> store)
: base(store)
{
this.UserTokenProvider = new TotpSecurityStampBasedTokenProvider<ApplicationUser, string>();
this.EmailService = new EmailService();
}
and in my AccontController.cs
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
// For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
// Send an email with this link
string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking here");
return RedirectToAction("Index", "Home");
}
AddErrors(result);
}
// If we got this far, something failed, redisplay form
return View(model);
}
and i havnt change anything else. am i missing something?
thank you very much.

ASP.Net MVC File Upload and Attach to Email

I'm developing an ASP.Net MVC 3 web application. One of my Razor Views allows a user to upload a file (selected from their computer) and then this is attached to an outgoing email.
Below is my code to date, but unfortunately it does not work. By this I mean the email (and of course the attachment) never gets sent. Although, when I step threw/ debug my code locally no errors occur, and none as well on the live server.
Does anyone see what I'm missing? Any advice would be greatly appreciated.
Thanks.
Controller
[HttpPost]
public ActionResult CvUpload(HttpPostedFileBase file)
{
//Get logged in user
User user = _accountService.GetUser(_formsAuthService.GetLoggedInUserID());
if (file != null && file.ContentLength > 0)
{
_emailService.SendUpload(user, file);
return RedirectToAction("CvUpload", new { feedBack = "Success" });
}
return RedirectToAction("CvUpload", new { feedBack = "Failed" });
}
Email Service
public void SendUpload(User user, HttpPostedFileBase file)
{
string messageBody = "";
string subject = "Upload";
string[] toAddress = new string[1];
string ToBCC = "";
if (isProduction.Equals("true"))
{
toAddress[0] = "myemail#test.com";
sendEmail(toAddress, ToBCC, adminFromEmail, adminFromEmail, subject, messageBody, true, emailServer, file);
}
else
{
// DO NOT SEND EMAIL
}
}
private bool sendEmail(string[] toAddresses, string ToBCC, string fromAddress, string replyto, string subject, string body, bool ishtml, string emailHost, HttpPostedFileBase file)
{
bool mailSent = false;
try
{
MailMessage mail = new MailMessage();
foreach (string addresss in toAddresses)
mail.To.Add(addresss);
mail.From = new MailAddress(fromAddress);
mail.ReplyToList.Add(replyto);
mail.Bcc.Add(ToBCC);
mail.Subject = subject;
mail.Body = body;
if(file != null && file.ContentLength > 0)
{
string fileName = Path.GetFileName(file.FileName);
mail.Attachments.Add(new Attachment(file.InputStream, fileName));
}
if (ishtml)
mail.IsBodyHtml = true;
else
mail.IsBodyHtml = false;
SmtpClient smtp = new SmtpClient();
smtp.Host = emailHost;
smtp.Send(mail);
mailSent = true;
}
catch (Exception)
{
mailSent = false;
}
return mailSent;
}
I have a similar service and this is what I have although the attachments are saved so they can be reused later.
var attachment = new Attachment(path);
ContentDisposition disposition = attachment.ContentDisposition;
disposition.CreationDate = File.GetCreationTime(path);
disposition.ModificationDate = File.GetLastWriteTime(path);
disposition.ReadDate = File.GetLastAccessTime(path);
disposition.FileName = attachmentName.Name;
disposition.Size = new FileInfo(path).Length;
disposition.DispositionType = DispositionTypeNames.Attachment;
mailMessage.Attachments.Add(attachment);

asp.net mvc send multiple email with different subject and body asynchronously

Folks,
I wanted to send a few emails with different subject and body asynchronously. here is my code
Email.cs
public string To;
public string CC;
public string Subject;
public string Host;
public string Port;
public string Body;
public MailMessage mail;
public SmtpClient smtp;
public void send()
{
smtp = new SmtpClient();
mail = new MailMessage();
mail.To.Add(To);
if (this.CC !="" && this.CC !=null) mail.CC.Add(CC);
mail.CC.Add(CCIDBizzMail);
mail.Subject = this.Subject;
mail.From = new MailAddress(From);
mail.IsBodyHtml = true;
smtp.Host = this.SMTPAddress;
mail.Body = this.Body;
smtp.Credentials = new System.Net.NetworkCredential
(this.From, this.Password);
smtp.EnableSsl = false;
smtp.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
smtp.SendAsync(mail, null);
}
private void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
String token = (string)e.UserState;
if (e.Cancelled)
{
}
if (e.Error != null)
{
}
else
{
mail.Dispose();
smtp.Dispose();
}
}
here is my code to send an email:
Email objEmail = new Email();
objEmail.Subject = "Thank You for Your Order!";
objEmail.Body = "first email";
objEmail.To: "ssss#mail.com"
objEmail.Send();
objEmail.Subject = "Thank You for Your Order!";
objEmail.Body = "second email";
objEmail.To: "tttt#mail.com"
objEmail.Send();
However, tttt#mail.com never received an email. my website always send to ssss#mail.com
can you help me to solve this issue?
Here you try to send an email with Asynchronous type with out making a new object Email.
I suggest to try two thinks.
Make new on every email send
{
Email objEmail = new Email();
objEmail.Subject = "Thank You for Your Order!";
objEmail.Body = "first email";
objEmail.To: "ssss#mail.com"
objEmail.Send();
}
{
Email objEmail = new Email();
objEmail.Subject = "Thank You for Your Order!";
objEmail.Body = "second email";
objEmail.To: "tttt#mail.com"
objEmail.Send();
}
Or change the Email routine to
public string To;
public string CC;
public string Subject;
public string Host;
public string Port;
public string Body;
public void send()
{
using(var smtp = new SmtpClient())
{
using(mail = new MailMessage())
{
mail.To.Add(To);
if (this.CC !="" && this.CC !=null) mail.CC.Add(CC);
mail.CC.Add(CCIDBizzMail);
mail.Subject = this.Subject;
mail.From = new MailAddress(From);
mail.IsBodyHtml = true;
smtp.Host = this.SMTPAddress;
mail.Body = this.Body;
smtp.Credentials = new System.Net.NetworkCredential
(this.From, this.Password);
smtp.EnableSsl = false;
// maybe here you place extra code for the errors
// http://msdn.microsoft.com/en-us/library/swas0fwc.aspx
smtp.Send(mail);
}
}
}
If the email is send using localhost and if you like to send many emails, is better to send them right way and not asynchronous.

Resources