如何在asp.net mvc应用程序中使用Gmail SMTP发送电子邮件?

14

我希望用户在注册我的网站时,我能够向他/她发送一封邮件。

我已经为此创建了我的Gmail账户,我从网上尝试了许多示例,但是我还不能成功地发送电子邮件。

请在这方面帮助我。

谢谢, Vicky

4个回答

23

我在一个网站上发现了一篇关于如何使用C#与Gmail SMTP的非常好的文章:https://askgif.com,所以在这里分享给你们: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();

希望这可以帮助到你。 如果有帮助,请将其标记为答案。


非常感谢,帮助很大! - Mark

3
这里有一个 Email 类,可与 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部分,这样答案就完整了。 :) - Zameer Ansari

2
除了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>

-1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接