7

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

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

任何人?

4

4 回答 4

8

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

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

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

编辑:

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

于 2009-02-06T19:51:46.223 回答
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上的流量,以防止垃圾邮件等。

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

于 2009-02-06T19:28:59.360 回答
1

您可以将用户名和密码放在 web.config/app.config 文件中。您还可以加密 .config 文件的内容(请参见此处)。

于 2009-02-06T19:30:12.443 回答
0

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

于 2009-02-06T19:32:00.337 回答