繁体   English   中英

如何从我的 C# windows 应用程序发送 email?

[英]How do I send an email from my C# windows application?

我正在开发一个 Windows 应用程序,用户必须在其中输入密码。 我还有一个“忘记密码”链接。 在 window 上。单击后,我让用户输入他们的 email 地址,然后单击“提交”按钮。 每次他们输入 email 地址并单击按钮时,我都会收到错误消息:

发生 SmtpException:SMTP 服务器需要安全连接或客户端未通过身份验证。 服务器响应为:5.7.0 需要身份验证。

我正在使用的代码是:

try
{
    Cursor = Cursors.WaitCursor;

    MailAddress from = new MailAddress("bgatt64@gmail.com", "Bob Gatto");
    MailAddress to = new MailAddress("bgatto64@yahoo.com", "Bob Gatto");

    MailMessage eMsg = new MailMessage(from, to);
    eMsg.Subject = "Your Password Renewal Request";
    eMsg.IsBodyHtml = true;
    eMsg.Body = "This is the body.";

    SmtpClient eClient = new SmtpClient("smtp.gmail.com", 587);
    eClient.EnableSsl = true;
    eClient.UseDefaultCredentials = true;gmail

    // The following email and password used is that of my own gmail email
    // that I use for my own personal email.

    eClient.Credentials = new System.Net.NetworkCredential("<MyOwnEmail@gmail.com>", "<MyPassword>");
    eClient.Send(eMsg);
}
catch (SmtpException ex)
{
    throw new ApplicationException("SmtpException has occurred: " + ex.Message);
}
catch (Exception ex)
{
    throw ex;
}

还有什么需要做的?

您不能再使用普通的谷歌帐户密码来验证 Gmail SMTP 服务器,因为谷歌现在需要两步验证。 您需要改用应用密码

在此处输入图像描述

您将获得包含 4 组字符的字符串。 现在您需要在代码中使用它:

eClient.Credentials = new System.Net.NetworkCredential("<MyOwnEmail@gmail.com>", "<App Password>");

您可以在此处找到更多信息

删除安全性较低的应用程序后,您将无法再使用实际的谷歌密码连接到您需要创建应用程序密码的 smpt 服务器。

如何创建用于连接到 Google 的 SMTP 服务器的 Apps 密码。

using System;
using System.Net;
using System.Net.Mail;

namespace GmailSmtpConsoleApp
{
    class Program
    {
        private const string To = "[redacted]@gmail.com";
        private const string From = "[redacted]@gmail.com";
        
        private const string GoogleAppPassword = "";
        
        private const string Subject = "Test email";
        private const string Body = "<h1>Hello</h1>";
        
        
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            
            var smtpClient = new SmtpClient("smtp.gmail.com")
            {
                Port = 587,
                Credentials = new NetworkCredential(From , GoogleAppPassword),
                EnableSsl = true,
            };
            var mailMessage = new MailMessage
            {
                From = new MailAddress(From),
                Subject = Subject,
                Body = Body,
                IsBodyHtml = true,
            };
            mailMessage.To.Add(To);

            smtpClient.Send(mailMessage);
        }
    }
}

注意:如果您尝试连接用户,那么您也可以使用 Xoauth2,但使用应用程序密码是更简单的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM