发送电子邮件没有硬编码的用户名和密码
本文关键字:用户 密码 编码 电子邮件 | 更新日期: 2023-09-27 18:07:10
是否有任何方式从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: <appSettings>
<add key="mail" value="somemail@gmail.com" />
<add key="pass" value="password" />
</appSettings>
也可以通过加密使配置文件安全。
第二个选项:从用户
向web服务器发送HTTP POST,它将代表应用程序发送电子邮件。您可能需要某种方式来验证POST是否真的来自您的应用程序,因此您需要将密钥硬编码到应用程序,但是由于您控制了服务器部分,因此您可以阻止发现被滥用的密钥。
或者,创建一个次要的一次性Gmail帐户,你用它来发送电子邮件到你的主帐户,它会把它转发给预期的收件人。
所有这些对我来说似乎都很愚蠢,但最终最好的解决方案取决于你打算如何发送电子邮件。
如果您在ASP中运行。NET,然后你可以加密网络的部分。
使用aspnet_regiis.exe工具配置文件。如果你正在运行一个带有app.config文件的常规应用程序,那么你可以加密整个文件,或者只是部分文件,正如Jon Galloway在他的博客文章"在. net app.config文件中加密密码"中所描述的那样。
一旦你在配置文件中有了这个,你可以使用SecureString
类从配置文件中获得你的用户名/密码选项,并将它们加密在内存中,直到它们被需要/使用的最后一刻。
将用户名和密码保存在配置文件中…
使用c#中的设置
在配置文件中外部化特定于环境的配置——尤其是像凭证这样的敏感配置。
. NET IIS注册工具可以为您做到这一点。你只需要输入一行。检查http://odetocode.com/blogs/scott/archive/2006/01/08/encrypting-custom-configuration-sections.aspx。
在我发表评论后我做了一些调查,所以我现在感觉更好回答
您可以使用配置文件,该文件可以使用以下说明进行设置
然后你可以传递你想要的任何变量的信息。这将把它们存储在程序之外,尽管它们仍然以纯文本形式编写。
配置文件的示例如下:
<?xml version ="1.0"?>
</configuration>
</appSettings>
<add key="password" value="Jdas7#8SL" />
</appSettings>
</configuration>
关于在程序中获取这些信息,这里有一个链接,可以作为一个很好的例子。
c# using config settings
如果你担心安全,不希望这个写在任何地方,那么你需要使它,以便你亲自输入它每次。或者你可以使用我评论中提到的一些公式来翻译密码。但正如结论那样,你仍然处于困境。
好运。