使用 gmail 作为 smtp 从 mvc 控制器发送电子邮件
using gmail as smpt for deliver email from mvc controller
我正在尝试从 asp.net mvc 控制器发送电子邮件。此处用于 smpt 的 Gmail 帐户被配置为使用安全性较低,因此这不是这里的问题。
but I don't get any error message neither any exception, but it not
deliver at my expected email address.
我正在使用代码
var text = "email body to deliver";
SendEmail("mydeliverEmailAddress@gmail.com", text);
public static bool SendEmail(string SentTo, string Text)
{
SmtpClient client = new SmtpClient();
client.Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPass");
client.Port = 465;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
try
{
MailAddress
maFrom = new MailAddress("sender_email@domain.tld", "Sender's Name", Encoding.UTF8),
maTo = new MailAddress(SentTo, "Recipient's Name", Encoding.UTF8);
MailMessage mmsg = new MailMessage(maFrom.Address, maTo.Address);
mmsg.Body = "<html><body><h1>Some HTML Text for Test as BODY</h1></body></html>";
mmsg.IsBodyHtml = true;
mmsg.Subject = "Some Other Text as Subject";
mmsg.SubjectEncoding = Encoding.UTF8;
client.Send(mmsg);
}
catch (Exception ex)
{
}
return true;
}
等一下。您正在使用您的 gmail 帐户:myemail@gmail.com
并试图代表 sender_email@domain.tld
?
发送电子邮件
出于显而易见的原因,这是行不通的。因此,请确保您使用的电子邮件地址与您要验证的电子邮件地址相同:
maFrom = new MailAddress("myemail@gmail.com", "Sender's Name", Encoding.UTF8),
您只能从经过身份验证的帐户发送电子邮件。当然,收件人电子邮件可以是 gmail 可以发送到的任何地址。
您的代码还有另一个问题。您在这里使用的是接线端口:
client.Port = 465;
gmail SMTP 使用的正确端口如下:
client.Port = 587;
此外,您可能需要确保在您的 gmail 帐户中启用了不太安全的应用程序,否则您将无法使用 .NET 中的 SmtpClient 来使用此 SMTP 发送电子邮件:https://www.google.com/settings/security/lesssecureapps?pli=1
but I don't get any error message neither any exception, but it not
deliver at my expected email address.
当你做了最糟糕的事情时,你期望得到什么错误信息?您将代码包装在 try/catch 块中,而在 catch
块中您什么也没做。您刚刚使用了异常:
catch (Exception ex)
{
}
因此,如果您要捕获异常,请确保您做了一些有用的事情。例如,记录此异常并向用户发送一条错误消息,说明发生了一些不好的事情,您无法发送电子邮件,并且您现在正在调查该问题。
var smtpClient = new SmtpClient("YourSMTPServer", "SMTPServerPort"))
{
Credentials = new NetworkCredential("YourEmail",
"Password"),
EnableSsl = false
};
string fromEmail = "YourEmail";
var mailMessage = new MailMessage();
mailMessage.From = new MailAddress(fromEmail);
mailMessage.To.Add("Recipient's EMail");
mailMessage.Subject = "Test Mail";
mailMessage.Body = "This is test Mail";
mailMessage.IsBodyHtml = true;
smtpClient.Send(mailMessage);
我正在尝试从 asp.net mvc 控制器发送电子邮件。此处用于 smpt 的 Gmail 帐户被配置为使用安全性较低,因此这不是这里的问题。
but I don't get any error message neither any exception, but it not deliver at my expected email address.
我正在使用代码
var text = "email body to deliver";
SendEmail("mydeliverEmailAddress@gmail.com", text);
public static bool SendEmail(string SentTo, string Text)
{
SmtpClient client = new SmtpClient();
client.Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPass");
client.Port = 465;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
try
{
MailAddress
maFrom = new MailAddress("sender_email@domain.tld", "Sender's Name", Encoding.UTF8),
maTo = new MailAddress(SentTo, "Recipient's Name", Encoding.UTF8);
MailMessage mmsg = new MailMessage(maFrom.Address, maTo.Address);
mmsg.Body = "<html><body><h1>Some HTML Text for Test as BODY</h1></body></html>";
mmsg.IsBodyHtml = true;
mmsg.Subject = "Some Other Text as Subject";
mmsg.SubjectEncoding = Encoding.UTF8;
client.Send(mmsg);
}
catch (Exception ex)
{
}
return true;
}
等一下。您正在使用您的 gmail 帐户:myemail@gmail.com
并试图代表 sender_email@domain.tld
?
出于显而易见的原因,这是行不通的。因此,请确保您使用的电子邮件地址与您要验证的电子邮件地址相同:
maFrom = new MailAddress("myemail@gmail.com", "Sender's Name", Encoding.UTF8),
您只能从经过身份验证的帐户发送电子邮件。当然,收件人电子邮件可以是 gmail 可以发送到的任何地址。
您的代码还有另一个问题。您在这里使用的是接线端口:
client.Port = 465;
gmail SMTP 使用的正确端口如下:
client.Port = 587;
此外,您可能需要确保在您的 gmail 帐户中启用了不太安全的应用程序,否则您将无法使用 .NET 中的 SmtpClient 来使用此 SMTP 发送电子邮件:https://www.google.com/settings/security/lesssecureapps?pli=1
but I don't get any error message neither any exception, but it not deliver at my expected email address.
当你做了最糟糕的事情时,你期望得到什么错误信息?您将代码包装在 try/catch 块中,而在 catch
块中您什么也没做。您刚刚使用了异常:
catch (Exception ex)
{
}
因此,如果您要捕获异常,请确保您做了一些有用的事情。例如,记录此异常并向用户发送一条错误消息,说明发生了一些不好的事情,您无法发送电子邮件,并且您现在正在调查该问题。
var smtpClient = new SmtpClient("YourSMTPServer", "SMTPServerPort"))
{
Credentials = new NetworkCredential("YourEmail",
"Password"),
EnableSsl = false
};
string fromEmail = "YourEmail";
var mailMessage = new MailMessage();
mailMessage.From = new MailAddress(fromEmail);
mailMessage.To.Add("Recipient's EMail");
mailMessage.Subject = "Test Mail";
mailMessage.Body = "This is test Mail";
mailMessage.IsBodyHtml = true;
smtpClient.Send(mailMessage);