C #: безопасно отправить отчет об ошибке из программы - PullRequest
7 голосов
/ 06 февраля 2009

Я бы хотел, чтобы моя программа отправляла мне сообщение об ошибке, если оно не работает. Есть ли способ сделать это ... безопасно? Я обнаружил, что могу использовать System.Net.Mail MailMessage и SmtpClient и т. Д., Но, конечно, мне придется предоставить ему имя пользователя и пароль (если кто-то не знает, кому это не нужно?) И помещая это в код, я нахожу немного ... я не знаю. Технически это будет означать, что любой может посмотреть на исходный код или скомпилированный код IL (или как он называется), найти это имя пользователя и пароль и использовать его для рассылки спама или других не очень хороших действий. Что не очень хорошо!

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

Любой

Ответы [ 4 ]

8 голосов
/ 06 февраля 2009

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

Я однажды сделал это для клиента, и это сработало хорошо.

Единственная проблема заключается в том, что программа работает где-то без доступа в Интернет.

Edit:

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

3 голосов
/ 06 февраля 2009

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

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

Если ваш SMTP клиент подключается прямо к example.com через порт 25 и отправляет электронное письмо на test@example.com, пароль не требуется.

example.com выше означает запись MX, а не запись A. Это особый тип записи, который содержит имя сервера, на который должны отправляться все электронные письма для example.com. Нет простого способа найти его с .NET, но если вы не собираетесь изменять адрес сервера SMTP, вы можете жестко закодировать его в свойство SmtpClient.Host.

Чтобы узнать адрес вашего почтового сервера, введите nslookup -q=MX example.com в командной строке.

SMTP не лучший способ сообщить об ошибках. Домашние провайдеры часто блокируют трафик через порт 25 ко всем серверам, кроме своих, для предотвращения спама и т. Д.

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

1 голос
/ 06 февраля 2009

Вы можете поместить имя пользователя и пароль в файл web.config / app.config. Вы также можете зашифровать содержимое вашего файла .config (см. здесь ).

0 голосов
/ 06 февраля 2009

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

...