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

StackOverflow https://stackoverflow.com/questions/29988

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

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

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

MailMessage msg = new MailMessage("someone@foo.com", "someoneelse@bar.com");
msg.Subject = "Check it out!";
msg.Body = "Visit stackoverflow.com!";
SmtpClient client = new SmtpClient("some.smtp.server", 25);
client.Send(msg);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top