【发布时间】:2014-01-19 21:32:32
【问题描述】:
每当用户在我的网站上注册时,我想向他/她发送一封邮件。
我为此创建了我的 gmail 帐户,我尝试了许多来自网络的示例,但我还无法发送电子邮件。
请在这方面帮助我。
谢谢, 维姬
【问题讨论】:
标签: asp.net-mvc-4 smtp gmail
每当用户在我的网站上注册时,我想向他/她发送一封邮件。
我为此创建了我的 gmail 帐户,我尝试了许多来自网络的示例,但我还无法发送电子邮件。
请在这方面帮助我。
谢谢, 维姬
【问题讨论】:
标签: asp.net-mvc-4 smtp gmail
我在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();
希望这会对您有所帮助。 如果这对您有帮助,请标记为答案。
【讨论】:
这是我的解决方案,第一次发布答案。快乐编码
[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);
}
【讨论】:
除了 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>
【讨论】:
这是一个可以与 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;
}
}
【讨论】: