【问题标题】:How to send email from a C# program如何从 C# 程序发送电子邮件
【发布时间】:2020-01-20 01:15:11
【问题描述】:

我想在我用 C# 编写的 WinForm 程序中添加电子邮件功能。我有一个具有电子邮件功能的 Android 应用程序。它所做的是设置电子邮件,然后让用户选择电子邮件程序等。一旦选择了电子邮件正文,就完成了。但由用户选择他们想要使用的电子邮件应用程序。

我想在 Windows 中做同样的事情,但我不知道怎么做。我尝试了以下方法(基于此处的其他问题和回复):

        _from = new MailAddress("my email address", "xxxx");
        _to = new MailAddress("xxxx3333@gmail.com", "yyyy");
        SmtpClient smtp = new SmtpClient("smtp.gmail.com"); 
        smtp.UseDefaultCredentials = true;
        smtp.Port = 587; 
        smtp.EnableSsl = true;
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp msgMail = new MailMessage();
        smtp.Body = text; 
        msgMail.Subject = "Subject";
        msgMail.From = _from;
        msgMail.To.Add(_to); 
        smtp.EnableSsl = true;
        msgMail.Subject = _subject;
        msgMail.Body = Text;
        msgMail.IsBodyHtml = false;
        try
        {
            mailClient.Send(msgMail);
        }
        catch (Exception ex)
        {
            string msg = "Exception caught in sending the email: " + ex.ToString();
            showMessage(msg);
        }

        msgMail.Dispose();

但我明白了:

SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.5.1 Authentication Required。

在 Android 中使用类似的代码,我的程序只是获取一个电子邮件表单,但让用户决定他们将使用哪个电子邮件添加。

有没有办法在 Windows 中做到这一点?

这里有一个几乎相同的问题和回答:

C# Windows Form Application - Send email using gmail smtp

我想我已经遵循了这个但是......不起作用。

【问题讨论】:

标签: c# winforms email


【解决方案1】:

直接回答您的问题 - 您可能尚未在您使用的 gmail 帐户上启用less secure apps


不过,如果您想让用户选择一个邮件客户端来发送电子邮件,您可以调查mailto 的语法:https://www.labnol.org/internet/email/learn-mailto-syntax/6748/

来自链接:

向 Barack Obama 发送一封电子邮件,主题为“Congrats Obama”,并在邮件正文中包含一些文字

<a href=”mailto:obama@whitehouse.gov? 
subject=Congrats%20Obama&body=Enjoy%20your%20stay%0ARegards%20″>

这与 C#/Windows 没有直接关系 - 但我知道在运行提示符处输入 mailto:someone@somewhere.com 有效:

大概你可以这样做:(未经测试)

Process.Run("mailto:someone@somewhere.com");

【讨论】:

    【解决方案2】:

    从服务器响应消息看来,您必须在允许发送之前提供登录凭据。

    替换:

    smtp.UseDefaultCredentials = true;

    与:

    smtp.Credentials = new System.Net.NetworkCredential("yourusername", "yourpassword");

    这应该可以解决问题。

    【讨论】:

    • 正如我上面提到的,更好的解决方案是让应用程序不知道特定用户的凭据。如果我能得到一个简单地添加相关数据(消息)并让用户决定其余部分的表单。
    【解决方案3】:

    您可能忘记在代码中添加主机

    尝试使用这个:

    SmtpClient smtp = new SmtpClient();

    smtp.UseDefaultCredentials = true;

    smtp.Host = "SRVMAIL";

    【讨论】:

      猜你喜欢
      • 2015-06-28
      • 2015-06-07
      • 1970-01-01
      • 2012-03-08
      • 2010-09-26
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多