使用 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);