发送电子邮件没有硬编码的用户名和密码

本文关键字:用户 密码 编码 电子邮件 | 更新日期: 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

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

好运。