我希望我的程序在失败时向我发送错误报告。有没有办法这样做......安全吗?我发现我可以使用System.Net.Mail MailMessage和SmtpClient等,但当然,我必须提供一个用户名和密码(除非有人知道不需要它的人吗?)。把它放在代码中我发现了一点......我不知道。从技术上讲,这意味着任何人都可以查看源代码或编译的IL代码(或它被称为),并找到该用户名和密码,并将其用于垃圾邮件或其他不太好的活动。哪个不太好!
有什么想法吗?对这个问题有更好的和/或不同的方法吗?真的不一定要通过电子邮件。但我想要的是程序在发生我应该修复的事情时通知的方式。并且使该通知对用户来说尽可能少麻烦。甚至可能看不见(虽然YesNo消息框可能很有礼貌)。
任何?
答案 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,则需要与您的邮件服务提供商合作,以设置相同类型的例外或提供您的凭据。