C#:安全地从程序发送错误报告

时间:2009-02-06 19:26:09

标签: c# email bug-tracking

我希望我的程序在失败时向我发送错误报告。有没有办法这样做......安全吗?我发现我可以使用System.Net.Mail MailMessage和SmtpClient等,但当然,我必须提供一个用户名和密码(除非有人知道不需要它的人吗?)。把它放在代码中我发现了一点......我不知道。从技术上讲,这意味着任何人都可以查看源代码或编译的IL代码(或它被称为),并找到该用户名和密码,并将其用于垃圾邮件或其他不太好的活动。哪个不太好!

有什么想法吗?对这个问题有更好的和/或不同的方法吗?真的不一定要通过电子邮件。但我想要的是程序在发生我应该修复的事情时通知的方式。并且使该通知对用户来说尽可能少麻烦。甚至可能看不见(虽然YesNo消息框可能很有礼貌)。

任何?

4 个答案:

答案 0 :(得分:8)

您可以设置可接收报告的网络服务,而不是发送邮件。如果要保护数据,Web服务可以通过https运行。

我曾为客户做过一次这样做,效果很好。

唯一的问题是如果程序在没有互联网访问的地方运行。

编辑:

不要告诉任何人这个,但我们甚至在程序崩溃时拍下了该程序的屏幕截图,并将其与我们可以收集的错误的所有信息一起发布。这非常有用!

答案 1 :(得分:3)

您无需提供密码即可通过电子邮件发送给自己,因为您无需其他人的密码即可向他们发送电子邮件。

如果您通过第三方的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上的流量到所有服务器,但阻止垃圾邮件等。

您最好制作一个Web服务器,在程序中创建System.Net.WebClient的实例,并通过HTTP发送错误报告。它更可靠,您可以轻松使用客户端的代理设置。

答案 2 :(得分:1)

您可以输入用户名& web.config / app.config文件中的密码。您还可以加密.config文件的内容(请参阅here)。

答案 3 :(得分:0)

我做同样的事情,当我们的邮件服务器移动到需要经过身份验证的SMTP时,我们计划为某些地址的邮件添加例外,以便我们的自动流程不需要提供凭据。如果您遇到经过身份验证的SMTP,则需要与您的邮件服务提供商合作,以设置相同类型的例外或提供您的凭据。