Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从WPF应用程序发送电子邮件_Wpf_Email_System.net.mail - Fatal编程技术网

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

从WPF应用程序发送电子邮件,wpf,email,system.net.mail,Wpf,Email,System.net.mail,我正在构建一个WPF应用程序,其中一个要求是用户通过电子邮件向我发送反馈 现在,我在Microsoft网站上开发了一种方法:- 这起作用了。但是我对此有所保留,因为如果用户没有安装Outlook怎么办?而且我也不喜欢弹出命令,它会询问您是否可以使用Outlook发送邮件 还有其他解决办法吗?我不希望要求用户提供他的SMTP主机,因为我的大多数用户都不知道如何获得它 感谢您的帮助和时间我也遇到了这个问题,决定通过从服务器发送电子邮件来绕过它 问题在于,要发送电子邮件,您需要用户的服务器信息(SM

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

现在,我在Microsoft网站上开发了一种方法:-

这起作用了。但是我对此有所保留,因为如果用户没有安装Outlook怎么办?而且我也不喜欢弹出命令,它会询问您是否可以使用Outlook发送邮件

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


感谢您的帮助和时间

我也遇到了这个问题,决定通过从服务器发送电子邮件来绕过它

问题在于,要发送电子邮件,您需要用户的服务器信息(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读取数据,将其格式化为电子邮件,并使用我自己的邮件服务器发送给我,但如果你想绕过整个电子邮件,你可以将它放在数据库中(我是用电子邮件写的,因为它省去了我写后台管理员的时间,让我可以重新使用我的联系人表单应用程序)

我也遇到了这个问题,决定通过从服务器发送电子邮件来绕过它

问题在于,要发送电子邮件,您需要用户的服务器信息(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读取数据,将其格式化为电子邮件,并使用我自己的邮件服务器发送给我,但如果你想绕过整个电子邮件,你可以将它放在数据库中(我是用电子邮件写的,因为它省去了我写后台管理员的时间,让我可以重用我的联系人表单应用程序)

Hi-Nir,你有没有关于如何做到这一点的例子?我基本上是将所有数据放在一个XML文件中并附加该文件。我正在考虑使用一个简单的FTP连接到我的服务器,将文件放在那里,然后构建一个小的管理应用程序来下载和处理这些文件。@Johann-我添加了一个例子,用于向我们上传数据ing HTTP POST感谢NIR示例。我已经决定使用WCF Rest和Stream示例,我就快到了,只是需要一些调整来允许大文件流。你可以在这里看到我的线程:-@Johann-这是旧代码,如果我今天写了,我可能会做些其他事情,但我不知道我是否会使用Heavyware对于WebClient.UploadString这样一个简单的工作,8个WCF就可以了(除非你得到很长的反馈)@Nir,实际上我“可以”获得长时间的反馈,因为用户有能力附加屏幕截图,我将其转换为流以转换为XML。我想说我现在对这个解决方案非常满意,但正如我所说的,我是这些方面的新手,所以我必须调查并发现moreHi Nir,你有任何关于如何做到这一点的例子吗?我基本上把所有的XML文件中的数据并附加该文件。我正在考虑使用一个简单的FTP连接到我的服务器,将文件放在那里,然后构建一个小型管理应用程序来下载和处理这些文件。@Johann-我添加了使用HTTP POST上传数据的示例感谢NIR示例。我决定使用WCF Rest和S例如,我就快到了,只是需要一些调整来允许大文件流。你可以在这里看到我的线程:-@Johann-这是旧代码,如果我今天写的话,我可能会做一些其他的事情,但我不知道我是否会使用重量级WCF来完成WebClient.UploadString可以完成的简单工作(除非你得到很长的反馈)@Nir,实际上我“可以”得到很长的反馈,因为用户有能力附加屏幕截图,我将其转换为流以转换为XML。我想说我现在对这个解决方案很满意,但正如我所说的,我是这些东西的新手,所以我必须进行更多的调查和发现