Отправка электронной почты без жесткого кодирования имени пользователя и пароля

Есть ли способ отправить электронное письмо с С# без ручного кодирования имени пользователя и пароля с помощью Gmail SMTP?

Я знаю, что есть некоторое программное обеспечение, которое может видеть исходный код, и мне не очень нравится, что они видят мой пароль Gmail.

Ответ 1

Вы не должны использовать свое имя пользователя и пароль в приложении, в котором работает кто-то еще.

Измените приложение, чтобы он запрашивал у пользователя свои учетные данные электронной почты и использовал их.

Это должно быть сохранено в файле конфигурации и все еще может быть прочитано кем-то другим, если вы не сохраните зашифрованный <хэшированный пароль.

Ответ 2

Первая опция: сохранить имя пользователя и пароль в 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("[email protected]", "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="[email protected]" />
    <add key="pass" value="password" />
  </appSettings>

Также вы можете сделать безопасный файл конфигурации, зашифровав его.

Вторая опция: читать имя пользователя и пароль от пользователя

Ответ 3

Сделайте HTTP POST на свой веб-сервер, который отправит электронное письмо от имени приложения. Вероятно, вам нужен какой-то способ аутентификации, что POST действительно приходит из вашего приложения, поэтому вам нужно будет жестко указать ключ для приложения, но поскольку вы контролируете часть сервера, вы можете заблокировать ключи, которые, как считается, используются неправильно.

В качестве альтернативы создайте вторичную учетную запись Gmail, которую вы используете для отправки электронной почты в свою основную учетную запись, которая отправит ее предполагаемому получателю.

Все это кажется мне глупым, но в конечном итоге лучшее решение зависит от того, что вы намерены делать с отправкой писем.

Ответ 4

Если вы работаете в ASP.NET, вы можете зашифровать разделы файла web.config, используя инструмент aspnet_regiis.exe.

Если вы используете обычное приложение с файлом app.config, вы можете зашифровать весь файл или только части файла, как описано Jon Galloway в его записи в блоге Шифрование паролей в файле .NET app.config.

После этого в файле конфигурации вы можете использовать класс SecureString, чтобы получить свои параметры имени пользователя и пароля из файла конфигурации и держать их зашифрованными в памяти до абсолютного последнего момента, когда они необходимы/используются.

Ответ 6

Внешняя конфигурация, специфичная для конкретной среды - особенно конфиденциальная конфигурация, такая как учетные данные - в файле конфигурации.

Ответ 8

Я сделал небольшое исследование с момента моего комментария, поэтому мне стало лучше отвечать на него.

Вы можете использовать конфигурационный файл, который можно настроить с помощью Инструкции

Затем вы можете передать информацию для любых переменных, которые вы хотите. Это сохранит их вне вашей программы, хотя они все еще написаны простым текстом.

Пример файла конфигурации похож на этот.

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

Что касается получения этой информации в вашей программе, здесь есть ссылка, которая shoudl служит достойным примером.

С# с настройками конфигурации

Если вы беспокоитесь о безопасности и не хотите, чтобы это было написано в любом месте, вам нужно сделать это так, чтобы вы лично вносили его каждый раз. Или вы можете перевести пароль, используя некоторую формулу, как указано в моем комментарии. Но, как было заключено, вы все еще в рассоле.

Удачи.