Как отправить сообщение электронной почты из программы _without_ с использованием существующей учетной записи?

Я хочу, чтобы моя программа могла отправлять мне сообщения об ошибках. Как я могу сделать это без жесткого кодирования имени пользователя/пароля/SMTP-сервера/etc. в код? (Это позволит пользователям декомпилировать программу и взять на себя эту учетную запись электронной почты.)

Мне сказали, что вы можете сделать кое-что с telneting до порта 25, но я очень нечеткий по деталям. Большинство фрагментов кода в Google предполагают, что у вас есть уже существовавшая учетная запись, которая не работает в этой ситуации.

Я использую .NET v3.5 (в частности, С#), но я бы предположил, что идеи достаточно похожи на большинстве языков. До тех пор, пока вы понимаете, что я делаю это для офлайн-приложения и не поставляю мне код PHP или что-то в этом роде, все должно быть хорошо.

Ответ 1

Пока ваша учетная запись находится на gmail.com, настройте gmail-smtp-in.l.google.com как исходящий SMTP-сервер в вашей программе. Вам не нужно указывать пароль для отправки электронной почты в учетные записи gmail при использовании этого сервера.

Ответ 2

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

Ответ 3

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

Считаете ли вы, что вы размещаете простую http-форму или веб-сервис где-нибудь, чтобы вы могли публиковать информацию, которая вам нужна там, из приложения (не требуется аутентификация), и либо сохранить его вручную, либо позже отправить по электронной почте этот сервер?

Ответ 4

Я думаю, что лучшим планом было бы отправить информацию об ошибке на какую-то службу (в простом случае, веб-форме), запущенную под вашим контролем, которая затем могла бы отправить электронное письмо (или зарегистрировать его каким-либо другим способом).

Если отправка сообщения считается полезной для конечного пользователя, другой вариант заключается в том, чтобы пользователь вводил свой собственный SMTP-сервер (и имя пользователя/пароль, если необходимо). В системах Unix вы можете просто использовать sendmail и полагайтесь на пользователя, чтобы он правильно настроил его. Я работал над системой, которая использовала этот подход для отправки пользовательских отчетов о запланированных задачах системы, и это работало достаточно хорошо.

Ответ 5

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

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

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

Ответ 6

MailMessage msg = new MailMessage("[email protected]", "[email protected]");
msg.Subject = "Check it out!";
msg.Body = "Visit stackoverflow.com!";
SmtpClient client = new SmtpClient("some.smtp.server", 25);
client.Send(msg);