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

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

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

Ответы [ 8 ]

7 голосов
/ 01 сентября 2011

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

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

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

4 голосов
/ 01 сентября 2011

Первый вариант: сохранить имя пользователя и пароль в конфигурации

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 голосов
/ 01 сентября 2011

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

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

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

1 голос
/ 01 сентября 2011

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

Если вы запускаете обычное приложение с файлом app.config, то вы можете зашифровать весь файл или только его части, как описано Джоном Гэллоуэем в его записи в блоге «Шифрование паролей в. NET app.config File ".

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

0 голосов
/ 01 сентября 2011

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

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

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

Пример файла конфигурации выглядит примерно так:

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

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

C # с использованием настроек конфигурации

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

Удачи.

0 голосов
/ 01 сентября 2011

ASP.NET IIS Registration-Tool может сделать это за вас.Вам просто нужно набрать одну строку.Чек http://odetocode.com/blogs/scott/archive/2006/01/08/encrypting-custom-configuration-sections.aspx.

0 голосов
/ 01 сентября 2011

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

0 голосов
/ 01 сентября 2011

Сохранить имя пользователя и пароль в файле конфигурации ...

Использование настроек в C #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...