【问题标题】:Sending email without hard-coding username and password发送没有硬编码用户名和密码的电子邮件
【发布时间】:2011-11-08 09:03:50
【问题描述】:

有没有什么方法可以在不使用 Gmail SMTP 手动编码我的用户名和密码的情况下从 C# 发送电子邮件?

我知道有些软件可以看到源代码,但我不太喜欢他们看到我的 Gmail 密码。

【问题讨论】:

  • 一个配置文件?只是一个想法,我不知道如何在c#中使用,所以我不会回答。
  • @harper89:与使用反射器相比,配置文件更容易查看用户名密码。
  • 将乱码存储在配置文件中,然后在程序中编写一些将其转换为密码的内容:)
  • @harper: :) 仍然可以使用反射器翻译给定配置文件和 exe 的密码 :)
  • 谨防所有将密码加密到配置文件中的建议。如果您的应用程序可以提取您的密码,以便将其用于验证 gmail 交易,那么不道德的用户可以提取该密码以访问您的 gmail 帐户。如果他们允许您这样做,您最好通过您的用户 SMTP 中继发送电子邮件。

标签: c# email gmail


【解决方案1】:

将用户名和密码存储在配置文件中...

Using Settings in C#

【讨论】:

    【解决方案2】:

    将特定于环境的配置(尤其是凭据等敏感配置)外部化到配置文件中。

    【讨论】:

      【解决方案3】:

      您不应该在其他人正在运行的应用程序中使用您的用户名和密码。

      修改应用程序,使其提示用户输入他们的电子邮件凭据并使用这些凭据。

      这必须存储在配置文件中,并且除非您存储 散列加密密码,否则其他人仍可以读取。

      【讨论】:

      • 使用散列 pswd 可以做什么?
      • 详细说明 ralu 的观点......不要散列密码,加密它。如果在 Windows 上,我会使用用户+机器 DPAPI 加密并存储在注册表中。
      • 谢谢,这也许是解决方案,但我也想试试 app.config 解决方案。
      【解决方案4】:

      向您的网络服务器发送 HTTP POST,它将代表应用程序发送电子邮件。您可能需要某种方式来验证 POST 是否真的来自您的应用程序,因此您需要硬编码应用程序的密钥,但由于您控制着服务器部分,您可以阻止发现被滥用的密钥.

      或者,创建一个备用 Gmail 帐户,您可以使用该帐户向您的主帐户发送电子邮件,然后将其转发给预期的收件人。

      不过,所有这些对我来说似乎都很愚蠢,最终最好的解决方案取决于您打算如何发送电子邮件。

      【讨论】:

        【解决方案5】:

        如果您在 ASP.NET 中运行,那么您可以使用 encrypt sections of the web.config file 使用 aspnet_regiis.exe tool

        如果您使用 app.config 文件运行常规应用程序,则可以加密整个文件,或仅加密文件的一部分,如 Jon Galloway 在他的博客文章 "Encrypting Passwords in a .NET app.config File" 中所述。

        一旦你在配置文件中有了这个,你可以使用SecureString class从配置文件中获取你的用户名/密码选项,并将它们加密在内存中,直到它们被需要/使用它们的绝对最后时刻。

        【讨论】:

        • @askingDude:见第二段和第三段。
        【解决方案6】:

        ASP.NET IIS 注册工具可以为您做到这一点。您只需键入一行。检查http://odetocode.com/blogs/scott/archive/2006/01/08/encrypting-custom-configuration-sections.aspx

        【讨论】:

          【解决方案7】:

          第一个选项:将用户名和密码存储在配置中

          using System.Net.Mail;
          
          var fromEmail = ConfigurationSettings.AppSettings[ "mail" ]; 
          var fromPassword = ConfigurationSettings.AppSettings[ "pass" ]; 
          
          var fromAddress = new MailAddress(fromEmail, "From Name");
          var toAddress = new MailAddress("to@example.com", "To Name");
          const string subject = "Subject";
          const string body = "Body";
          
          var smtp = new SmtpClient
                     {
                         Host = "smtp.gmail.com",
                         Port = 587,
                         EnableSsl = true,
                         DeliveryMethod = SmtpDeliveryMethod.Network,
                         UseDefaultCredentials = false,
                         Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
                     };
          using (var message = new MailMessage(fromAddress, toAddress)
                               {
                                   Subject = subject,
                                   Body = body
                               })
          {
              smtp.Send(message);
          }
          

          在 app.config 中:

            <appSettings>
              <add key="mail" value="somemail@gmail.com" />
              <add key="pass" value="password" />
            </appSettings>
          

          您还可以通过加密来制作安全的配置文件。

          第二个选项:从用户那里读取用户名和密码

          【讨论】:

          • web.config 文件有一个用于 SMTP 设置的特殊部分。这比在 appsettings 中更可取:blog.dotnetclr.com/archive/2009/08/18/511.aspx
          • 据我所知,仅当应用程序是 ASP.Net (web.config) 时,加密配置中的部分才是无缝的。如果您选择为 windows.Net 应用程序加密 app.config 中的某个部分,您可能必须编写代码来解密它。
          【解决方案8】:

          自从我发表评论后,我做了一些研究,所以我现在对回答感觉更好。

          您可以使用可以使用这些Instructions 设置的配置文件

          然后您可以为您想要的任何变量传递信息。这会将它们存储在您的程序之外,尽管它们仍以纯文本形式编写。

          配置文件的示例与此类似。

          <?xml version ="1.0"?>
              </configuration>
                      </appSettings>     
                         <add key="password" value="Jdas7#8SL" />    
                      </appSettings>       
              </configuration>
          

          至于将这些信息输入您的程序,这里有一个链接,应该作为一个不错的例子。

          C# using config settings

          如果您担心安全性并且不希望将其写在任何地方,那么您需要制作它以便您每次都亲自输入它。或者您可以使用我评论中提到的一些公式来翻译密码。但正如那里得出的结论,你仍然处于困境中。

          祝你好运。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-15
            • 1970-01-01
            • 2020-05-15
            • 2019-01-20
            • 1970-01-01
            • 2020-11-08
            相关资源
            最近更新 更多