无需硬编码用户名和密码即可发送电子邮件

有没有办法从C#发送电子邮件而无需使用Gmail SMTP手动编码我的用户名和密码?

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

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

修改应用程序,以便提示用户输入电子邮件凭据并使用它们。

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

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

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中:

      

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

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

对您的Web服务器进行HTTP POST,该服务器将代表应用程序发送电子邮件。 您可能需要一些方法来validationPOST是否真的来自您的应用程序,因此您需要对应用程序的密钥进行硬编码,但由于您可以控制服务器部分,因此可以阻止发现被滥用的密钥。

或者,创建一个二次一次性Gmail帐户,您可以使用该帐户向主帐户发送电子邮件,然后将其转发给目标收件人。

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

如果您在ASP.NET中运行,则可以使用aspnet_regiis.exe工具 加密web.config文件的各个部分 。

如果您正在运行带有app.config文件的常规应用程序,那么您可以加密整个文件,或者仅加密文件的一部分,如Jon Galloway在其博客文章“加密.NET app.config文件中的密码”中所述 。

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

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

在C#中使用设置

在配置文件中外部化特定于环境的配置 – 尤其是诸如凭据之类的敏感配置。

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

自从我的评论以来,我做了一些研究,所以我现在感觉更好。

您可以使用可以使用这些说明进行设置的配置文件

然后,您可以传递所需变量的信息。 这会将它们存储在程序之外,尽管它们仍然以纯文本forms编写。

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

       

至于将这些信息添加到您的程序中,这是一个链接,可以作为一个体面的例子。

C#使用配置设置

如果您担心安全性并且不希望在任何地方写入,那么您需要将其设置为每次都亲自输入。 或者您可以使用我的评论中提到的某些公式来翻译密码。 但结论那里你还是在泡菜中。

祝好运。