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

时间:2011-09-01 12:31:45

标签: c# email gmail

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

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

8 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:4)

第一个选项:在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>

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

第二个选项:从用户

读取用户名和密码

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

如果您在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从配置文件中获取用户名/密码选项,并将它们加密到内存中,直到它们需要/使用的最后一刻。< / p>

答案 4 :(得分:0)

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

Using Settings in C#

答案 5 :(得分:0)

在配置文件中外部化特定于环境的配置 - 尤其是像凭据这样的敏感配置。

答案 6 :(得分:0)

ASP.NET IIS注册工具可以帮您完成。你只需要输入一行。检查http://odetocode.com/blogs/scott/archive/2006/01/08/encrypting-custom-configuration-sections.aspx

答案 7 :(得分:0)

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

您可以使用可以使用这些Instructions

设置的配置文件

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

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

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

至于将这些信息输入你的程序,这里有一个链接,可以作为一个很好的例子。

C# using config settings

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

祝你好运。