我正在构建一个WPF应用程序,其中一个要求是用户通过电子邮件向我发送反馈。
现在我开发了一个在Microsoft站点上找到的方法: -
http://support.microsoft.com/kb/310263
哪个有效。但是我对它有一些保留,因为如果用户没有安装Outlook怎么办?而且我也不喜欢弹出命令,它会询问你是否可以使用Outlook发送邮件。
还有其他解决方案吗?我不想要求用户提供他的SMTP主机,因为我的大多数用户都不知道如何获得它。
感谢您的帮助和时间
答案 0 :(得分:1)
我也遇到了这个问题,并决定通过从我的服务器发送电子邮件来绕过它。
问题是,要发送电子邮件,您需要用户的服务器信息(SMTP主机,用户名,密码,电子邮件地址),或者使用已经知道此信息的系统上的软件(outlook) - 和假设用户可以发送SMTP邮件(某些webmail服务没有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读取数据,将其格式化为电子邮件并将其发送到我使用自己的邮件服务器 - 但如果你想绕过整个电子邮件,你可以把它放在一个数据库中(我用电子邮件写它,因为它保存了我编写后端管理员并让我重用我的联系表格应用)