How can I send email using Gmail SMTP in asp.net mvc application?

前端 未结 4 814
长发绾君心
长发绾君心 2020-12-14 04:19

I want to send one mail to user whenever he/she register at my website.

I have created my gmail account for that, I\'ve tried many samples from net but i\'m not abl

相关标签:
4条回答
  • 2020-12-14 04:24

    I found a very good article on a website https://askgif.com about using Gmail SMTP with C#, so am sharing with you : https://askgif.com/blog/122/seding-email-using-gmail-smtp-in-asp-net-mvc-application/

    Create Gmail Class comprises of all needed data type and member function as below

    public class GMailer
    {
        public static string GmailUsername { get; set; }
        public static string GmailPassword { get; set; }
        public static string GmailHost { get; set; }
        public static int GmailPort { get; set; }
        public static bool GmailSSL { get; set; }
    
        public string ToEmail { get; set; }
        public string Subject { get; set; }
        public string Body { get; set; }
        public bool IsHtml { get; set; }
    
        static GMailer()
        {
            GmailHost = "smtp.gmail.com";
            GmailPort = 25; // Gmail can use ports 25, 465 & 587; but must be 25 for medium trust environment.
            GmailSSL = true;
        }
    
        public void Send()
        {
            SmtpClient smtp = new SmtpClient();
            smtp.Host = GmailHost;
            smtp.Port = GmailPort;
            smtp.EnableSsl = GmailSSL;
            smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtp.UseDefaultCredentials = false;
            smtp.Credentials = new NetworkCredential(GmailUsername, GmailPassword);
    
            using (var message = new MailMessage(GmailUsername, ToEmail))
            {
                message.Subject = Subject;
                message.Body = Body;
                message.IsBodyHtml = IsHtml;
                smtp.Send(message);
            }
        }
    }
    

    Then just used the following code wherever you want to send the email to the required email account.

    GMailer.GmailUsername = "youremailid@gmail.com";
            GMailer.GmailPassword = "YourPassword";
    
            GMailer mailer = new GMailer();
            mailer.ToEmail = "sumitchourasia91@gmail.com";
            mailer.Subject = "Verify your email id";
            mailer.Body = "Thanks for Registering your account.<br> please verify your email id by clicking the link <br> <a href='youraccount.com/verifycode=12323232'>verify</a>";
            mailer.IsHtml = true;
            mailer.Send();
    

    Hope this will help you. Mark as answer if this helps you.

    0 讨论(0)
  • Here is a Email class that can be used with ASP.NET MVC4 leveraging dependency injection. A full running sample application & unit tests that use this class can be found here in my github space https://github.com/fredo007/i6technology/tree/master/InsuranceSales.

    I've also put together an article explaining methodology & use here http://prestoasp.net/how-to-send-email-using-gmail-smtp-in-an-asp-net-mvc-application/

    public class GmailEmailService : IEmailService
    {
        private readonly SmtpConfiguration _config;
    
        private const string GmailUserNameKey = "GmailUserName";
        private const string GmailPasswordKey = "GmailPassword";
        private const string GmailHostKey = "GmailHost";
        private const string GmailPortKey = "GmailPort";
        private const string GmailSslKey = "GmailSsl";
    
        public GmailEmailService()
        {
            _config = new SmtpConfiguration();
            var gmailUserName = ConfigurationManager.AppSettings[GmailUserNameKey];
            var gmailPassword = ConfigurationManager.AppSettings[GmailPasswordKey];
            var gmailHost = ConfigurationManager.AppSettings[GmailHostKey];
            var gmailPort = Int32.Parse(ConfigurationManager.AppSettings[GmailPortKey]);
            var gmailSsl = Boolean.Parse(ConfigurationManager.AppSettings[GmailSslKey]);
            _config.Username = gmailUserName;
            _config.Password = gmailPassword;
            _config.Host = gmailHost;
            _config.Port = gmailPort;
            _config.Ssl = gmailSsl;
        }
    
        public bool SendEmailMessage(EmailMessage message)
        {
            var success = false;
            try
            {
                var smtp = new SmtpClient
                {
                    Host = _config.Host,
                    Port = _config.Port,
                    EnableSsl = _config.Ssl,
                    DeliveryMethod = SmtpDeliveryMethod.Network,
                    UseDefaultCredentials = false,
                    Credentials = new NetworkCredential(_config.Username, _config.Password)
                };
    
                using (var smtpMessage = new MailMessage(_config.Username, message.ToEmail))
                {
                    smtpMessage.Subject = message.Subject;
                    smtpMessage.Body = message.Body;
                    smtpMessage.IsBodyHtml = message.IsHtml;
                    smtp.Send(smtpMessage);
                }
    
                success = true;
            }
            catch (Exception ex)
            {
                //todo: add logging integration
                //throw;
            }
    
            return success;
        }
    }
    
    0 讨论(0)
  • 2020-12-14 04:40

    Here is my solution for it, first time posting an answer. Happy coding

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task < ActionResult > Contact(EmailFormModel model) {
        if (ModelState.IsValid) {
            var body = "<p>Email From: {0} ({1})Message:</p><p>{2}</p>";
            var message = new MailMessage();
            //message.To.Add(new MailAddress("recipient@gmail.com"));  // replace with valid value 
            message.To.Add(new MailAddress("haha")); // replace with valid value 
            //message.From = new MailAddress("sender@outlook.com");  // replace with valid value
            message.From = new MailAddress("hahaha"); // replace with valid value,you cannot commend it, since it's required
            message.Subject = "Your email subject";
            message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
            message.IsBodyHtml = true;
    
            using(var smtp = new SmtpClient()) {
                var credential = new NetworkCredential {
                    UserName = "emailAddress", // replace with valid value
                        Password = "yourPassword" // Password = "password"  // replace with valid value
                };
                //smtp.Credentials = credential;
                smtp.UseDefaultCredentials = false;
                smtp.Credentials = new System.Net.NetworkCredential("your emailAddress", "Password"); //You will be receive email from this email address
                //smtp.Host = "smtp-mail.outlook.com";
                smtp.Host = "smtp.gmail.com";
                smtp.Port = 587;
                smtp.EnableSsl = true;
                await smtp.SendMailAsync(message);
                return RedirectToAction("Sent");
            }
        }
        return View(model);
    }
    
    0 讨论(0)
  • 2020-12-14 04:47

    In addition to fredo Answer to clear web.config section

    public GmailEmailService()
    {
        _config = new SmtpConfiguration();
        var gmailUserName = ConfigurationManager.AppSettings[GmailUserNameKey];
        var gmailPassword = ConfigurationManager.AppSettings[GmailPasswordKey];
        var gmailHost = ConfigurationManager.AppSettings[GmailHostKey];
        var gmailPort = Int32.Parse(ConfigurationManager.AppSettings[GmailPortKey]);
        var gmailSsl = Boolean.Parse(ConfigurationManager.AppSettings[GmailSslKey]);
        _config.Username = gmailUserName;
        _config.Password = gmailPassword;
        _config.Host = gmailHost;
        _config.Port = gmailPort;
        _config.Ssl = gmailSsl;
    }
    

    Now add in web.config file

    <configuration>
        <appSettings>
            <add key="GmailUserNameKey" value="sender@gmail.com"/>
            <add key="GmailPasswordKey" value="senderPassword"/>
            <add key="GmailHostKey" value="smtp.gmail.com"/>
            <add key="GmailPortKey" value="25"/>
            <add key="GmailSslKey" value="true"/>
    </appSettings>
    
    0 讨论(0)
提交回复
热议问题