我知道有一些可以查看源代码的软件,但我不想让它们看到我的 Gmail 密码。
在运行别人的应用程序时,您不应该使用自己的用户名和密码。
修改应用程序,以便提示用户输入他们的电子邮件凭据并使用这些凭据。
这些凭据将需要存储在配置文件中,但除非您存储了散列加密密码,否则仍然可以被其他人读取。
第一选项:将用户名和密码存储在配置文件中
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);
}
<appSettings>
<add key="mail" value="somemail@gmail.com" />
<add key="pass" value="password" />
</appSettings>
向您的Web服务器进行HTTP POST请求,该请求将代表应用程序发送电子邮件。您可能需要某种方式来验证POST确实来自您的应用程序,因此您需要将一个密钥硬编码到应用程序中,但由于您控制服务器部分,因此可以阻止发现被滥用的密钥。
或者,创建一个次要的临时Gmail帐户,您可以使用它向您的主帐户发送电子邮件,然后再将其转发给预期的收件人。
尽管所有这些对我来说似乎很傻,但最终最佳解决方案取决于您打算如何发送电子邮件。
如果您正在运行ASP.NET,则可以使用aspnet_regiis.exe工具加密web.config文件的部分内容。
如果您正在运行带有app.config文件的常规应用程序,则可以像Jon Galloway在他的博客文章"Encrypting Passwords in a .NET app.config File"中所述那样加密整个文件或文件的某些部分。
一旦您在配置文件中完成了这些操作,您可以使用SecureString
类从配置文件中获取用户名/密码选项,并将它们加密保存在内存中,直到它们被需要/使用的最后一刻。
我在发表评论后进行了一些研究,现在感觉更有信心回答问题。
您可以使用配置文件,可以使用这些说明进行设置。
然后,您可以传递任何想要的变量信息。这将在程序外部存储它们,尽管它们仍以纯文本形式编写。
配置文件的示例类似于此:
<?xml version ="1.0"?>
</configuration>
</appSettings>
<add key="password" value="Jdas7#8SL" />
</appSettings>
</configuration>
关于将这些信息引入您的程序,在此提供一个链接,这应该是一个不错的例子。
如果您担心安全问题,不希望密码被写在任何地方,那么您需要使其每次由您个人输入。或者您可以使用我评论中提到的某些公式来转换密码。但正如评论中所述,您仍然会陷入困境。
祝好运。
将特定于环境的配置(特别是敏感配置,如凭据)外部化到配置文件中。