从WPF应用程序发送电子邮件

时间:2011-04-14 12:54:53

标签: wpf email system.net.mail

我正在构建一个WPF应用程序,其中一个要求是用户通过电子邮件向我发送反馈。

现在我开发了一个在Microsoft站点上找到的方法: -

http://support.microsoft.com/kb/310263

哪个有效。但是我对它有一些保留,因为如果用户没有安装Outlook怎么办?而且我也不喜欢弹出命令,它会询问你是否可以使用Outlook发送邮件。

还有其他解决方案吗?我不想要求用户提供他的SMTP主机,因为我的大多数用户都不知道如何获得它。

感谢您的帮助和时间

1 个答案:

答案 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读取数据,将其格式化为电子邮件并将其发送到我使用自己的邮件服务器 - 但如果你想绕过整个电子邮件,你可以把它放在一个数据库中(我用电子邮件写它,因为它保存了我编写后端管理员并让我重用我的联系表格应用)