我正在构建一个 WPF 应用程序,其中一项要求是用户通过电子邮件向我发送反馈。
现在我开发了一种在 Microsoft 网站上找到的方法:-
http://support.microsoft.com/kb/310263
这有效。但是我对此有所保留,因为如果用户没有安装 Outlook 怎么办?而且我不喜欢弹出命令,它询问您是否可以使用 Outlook 发送邮件。
还有其他解决方案吗?我不想向用户询问他的 SMTP 主机,因为我的大多数用户都不知道如何获得它。
感谢您的帮助和时间
我正在构建一个 WPF 应用程序,其中一项要求是用户通过电子邮件向我发送反馈。
现在我开发了一种在 Microsoft 网站上找到的方法:-
http://support.microsoft.com/kb/310263
这有效。但是我对此有所保留,因为如果用户没有安装 Outlook 怎么办?而且我不喜欢弹出命令,它询问您是否可以使用 Outlook 发送邮件。
还有其他解决方案吗?我不想向用户询问他的 SMTP 主机,因为我的大多数用户都不知道如何获得它。
感谢您的帮助和时间
我也遇到了这个问题,并决定通过从我的服务器发送电子邮件来绕过它。
问题是,要发送电子邮件,您需要用户的服务器信息(SMTP 主机、用户名、密码、电子邮件地址),或者使用系统上已经知道该信息的软件(outlook) - 并且假设用户完全可以发送 SMTP 邮件(一些网络邮件服务没有 SMTP 选项)。
所以我所做的是将我的应用程序中的内容发布到我网站上的一个简单的 ASP.net 应用程序,然后从那里发送邮件——这样我就不需要担心 SMTP,它也适用于我的垃圾邮件过滤(该应用程序只向我发送电子邮件,因此垃圾邮件发送者无法使用它,它绕过了我自己的垃圾邮件过滤,因此我不必担心丢失反馈消息)。
更新 - 这是您要求的示例:
这是我进行简单 HTTP POST 的辅助方法:
public static string HttpPost(string URI, string Parameters)
{
System.Net.WebRequest req = System.Net.WebRequest.Create(URI);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(Parameters);
req.ContentLength = bytes.Length;
System.IO.Stream os = req.GetRequestStream();
os.Write(bytes, 0, bytes.Length);
os.Close();
System.Net.WebResponse resp = req.GetResponse();
if (resp == null) return null;
System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
return sr.ReadToEnd().Trim();
}
用法是:
HttpPost("http://example.com/Default.aspx",
"&email=" + Uri.EscapeDataString(form.EMail) +
"&data=" + Uri.EscapeDataString(errorText));
在此示例中,errorText 是 Exception.ToString() 的多行返回值
在服务器端有一个简单的 IHttpHandler(但它可以是任何服务器端应用程序,最初它是一个 WebForms 页面),它从 HttpContext.Request.Params 读取数据,将其格式化为电子邮件并使用我的自己的邮件服务器 - 但如果你想绕过整个电子邮件,你可以把它放在数据库中(我使用电子邮件编写它,因为它节省了我编写后端管理员并让我重用我的联系表单应用程序)