【问题标题】:How can I send email using Gmail SMTP in asp.net mvc application?如何在 asp.net mvc 应用程序中使用 Gmail SMTP 发送电子邮件?
【发布时间】:2014-01-19 21:32:32
【问题描述】:

每当用户在我的网站上注册时,我想向他/她发送一封邮件。

我为此创建了我的 gmail 帐户,我尝试了许多来自网络的示例,但我还无法发送电子邮件。

请在这方面帮助我。

谢谢, 维姬

【问题讨论】:

    标签: asp.net-mvc-4 smtp gmail


    【解决方案1】:

    我在https://askgif.com 网站上找到了一篇关于使用 C# 使用 Gmail SMTP 的非常好的文章,因此与您分享:https://askgif.com/blog/122/seding-email-using-gmail-smtp-in-asp-net-mvc-application/

    创建 Gmail 类包含所有需要的数据类型和成员函数,如下所示

    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);
            }
        }
    }
    

    然后只需使用以下代码将电子邮件发送到所需的电子邮件帐户。

    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();
    

    希望这会对您有所帮助。 如果这对您有帮助,请标记为答案。

    【讨论】:

    • 帮助很大,谢谢!
    【解决方案2】:

    这是我的解决方案,第一次发布答案。快乐编码

    [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);
    }
    

    【讨论】:

      【解决方案3】:

      除了 fredo 清除 web.config 部分的答案

      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;
      }
      

      现在添加 web.config 文件

      <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>
      

      【讨论】:

        【解决方案4】:

        这是一个可以与 ASP.NET MVC4 利用依赖注入的电子邮件类。可以在我的 github 空间https://github.com/fredo007/i6technology/tree/master/InsuranceSales 中找到使用此类的完整运行示例应用程序和单元测试。

        我还整理了一篇文章解释方法和使用在这里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;
            }
        }
        

        【讨论】:

        • 能否请您添加 web.config 部分。这将使这个答案完整。 :)
        猜你喜欢
        • 1970-01-01
        • 2015-05-06
        • 1970-01-01
        • 2013-03-10
        • 1970-01-01
        • 2014-12-24
        • 2016-10-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多