通过Gmail发送支持电子邮件

时间:2015-01-28 17:07:22

标签: c# winforms email

我已经通过gmail实现了发送的电子邮件支持,一切都很好。但是这个代码看起来很奇怪,因为例如客户要求程序员通过gmail提供电子邮件支持,一旦完成,程序员就会将源代码与程序一起提供给客户。当客户打开它(源代码)时,客户将知道用于发送电子邮件支持的电子邮件以及密码。我怎么能防止这种情况?在没有透露源代码中的电子邮件密码的情况下,提供电子邮件支持的任何好解决方案?

以下是我正在使用的代码:

public void SendRecoverCredentials(string _to)
    {
        try
        {
            SmtpClient _smtp = new SmtpClient();

            MailMessage _message = new MailMessage();

            _message.From = new MailAddress("credentialhelper@gmail.com", "Credential Helper - Support -");
            _message.To.Add(new MailAddress(_to, "To whom it may concern"));
            _message.Subject = "Credentials Recover";
            _message.Body = "Dear to whom it may concern" +
                "\n\n\nBelow are your credentials info:" + "\n\n\n\n" + "Please copy the Password and paste it to the program where the Old Password field is." + "\n\n\n\n" + "Username: " + UserInformation.Name + "\nPassword: " + UserInformation.Password +
                "\n\n\n\nTo avoid for future messages being moved to the spam or junk folder, please add credentialhelper@gmail.com to be your contact list." +
                "\n\n\n*** This is an automatically computer generated e-mail, please do not reply to this message ***";

            _smtp.Port = 587;
            _smtp.Host = "smtp.gmail.com";
            _smtp.EnableSsl = true;
            _smtp.UseDefaultCredentials = false;
            _smtp.Credentials = new NetworkCredential("support's e-mail address", "support's e-mail password");

            _smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
            _smtp.Send(_message);

            ShowMessageBox("Your message has been successfully sent.", "Success", 2);
        }

        catch (Exception ex)
        {
            ShowMessageBox("Message : " + ex + "\n\nEither your e-mail or password incorrect. (Are you using Gmail account?)", "Error", 1);
        }
    }

谢谢!

1 个答案:

答案 0 :(得分:2)

简单地说,没有办法完全按照你的要求去做。您无法向客户端发送您的凭据并使其安全。将它们编译成DLL将只会阻止技术上最不精明的潜在攻击者。

但是,有几种方法可以实现您的目标:

  1. 让客户提供自己的电子邮件用户名和密码并通过这些用户名和密码发送。这可能是最简单的,因为它不需要太多设置。

  2. 使用OAuth。这与选项1基本相同,只是不是让他们提供密码,而是让他们点击Google页面上的“授予访问权限”或其他任何内容。可能不是要走的路。

  3. 创建您控制的存储凭据的Web服务,然后让您的应用程序联系该Web服务。您的Web服务可以确保它是您应用程序的有效请求,然后为您发送电子邮件。虽然这是最好的解决方案,但也可能需要最多的工作。

  4. 此外,虽然它与您的问题没有直接关系,但这段代码是一个严重的问题:

    "Username: " + UserInformation.Name + "\nPassword: " + UserInformation.Password

    首先,你甚至不能解密任何人的密码。您应该使用单向哈希。有很多文章在谈论为什么会这样,我不会在这里重复。无论如何,这是一个坏主意。此外,通过电子邮件发送敏感信息也不理想。