从C#实用程序发送诊断文件

从C#实用程序发送诊断文件,c#,email-attachments,C#,Email Attachments,我有一个用C#编写的实用程序,它将收集一段软件诊断问题所需的大量信息(一些环境变量、安装的软件版本、其中的各种日志和配置文件等),并将它们打包在一个zip文件中。我想让最终用户尽可能容易地向我发送此文件。理想情况下,我希望在他们的默认邮件客户端中出现一封电子邮件,并预先设置为:字段、主题行等。。。并附上文件。然后他们可以做任何他们想要的修改,或者只是点击发送。遇到以下问题: 我不能使用mailto,因为我需要一个附件,这是不受支持的 我知道很多最终用户不使用Outlook,所以我不能专门为此编写

我有一个用C#编写的实用程序,它将收集一段软件诊断问题所需的大量信息(一些环境变量、安装的软件版本、其中的各种日志和配置文件等),并将它们打包在一个zip文件中。我想让最终用户尽可能容易地向我发送此文件。理想情况下,我希望在他们的默认邮件客户端中出现一封电子邮件,并预先设置为:字段、主题行等。。。并附上文件。然后他们可以做任何他们想要的修改,或者只是点击发送。遇到以下问题:

  • 我不能使用mailto,因为我需要一个附件,这是不受支持的

  • 我知道很多最终用户不使用Outlook,所以我不能专门为此编写代码(或者其他任何东西)

  • 我对最终用户的邮件系统/凭证等一无所知。。。所以我不能直接通过SMTP发送电子邮件。我不想只在gmail账户上写代码什么的,因为如果我们不得不更改密码什么的,我不想让它坏掉。此外,电子邮件应该来自最终用户

  • 据我所见,MAPI在.NET中不受支持。我发现了一些可以让它正常工作的代码,但我也看到了它可能导致内存泄漏等。。。另外,这是否适用于所有非Outlook邮件客户端

  • 这里有没有我错过的选择?谢谢


    ETA:对不起,我们应该补充一点——我们已经考虑过使用FTP,这是一种选择,但还远远不够理想,因为这意味着我们需要额外的步骤(我们有电子邮件的工作流程)。

    正如比尔在评论中所说,使用FTP可能是你最好的选择。 您可以使用
    FTPWebRequest
    类:

    FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm");
    request.Method = WebRequestMethods.Ftp.UploadFile;
    
    // This example assumes the FTP site uses anonymous logon.
    request.Credentials = new NetworkCredential ("anonymous","janeDoe@contoso.com");
    
    // Copy the contents of the file to the request stream.
    StreamReader sourceStream = new StreamReader("testfile.txt");
    byte [] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
    sourceStream.Close();
    request.ContentLength = fileContents.Length;
    
    Stream requestStream = request.GetRequestStream();
    requestStream.Write(fileContents, 0, fileContents.Length);
    requestStream.Close();
    
    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
    
    Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription);
    
    response.Close();
    

    您考虑过FTP吗?考虑过,但希望不会。请看下面的评论。我对它没有任何经验,但在其他地方我得到了使用UU编码的建议。1.据我所知,它似乎已经被base64取代了?二,。我不确定这对形势会有什么帮助……我想了想。希望找到一个替代方案,因为1。这意味着允许匿名FTP和2。然后我们有更多的步骤(当一封带有附件的电子邮件进来时,它都存储在用户帐户下的CRM中,而如果是FTP,那么我们必须去获取它,然后手动附加它,等等……除非我也能找到编写脚本的方法)。因此,这是一个选择,但如果有任何方法来处理电子邮件,肯定不会被优先考虑。不过,感谢您提供的示例代码-如果我们必须这样做的话,这绝对是一个不错的开始。@teleute00只要控制得当,我认为Anon FTP不会有任何问题。考虑到你的情况,我认为没有任何简单的方法可以通过电子邮件实现你所期望的目标。你的另一个选择是一个web服务,它会自动发布到……但这可能比设置FTP需要更多的工作。不过,我实际上没有权力在我们这边授权anon FTP,如果过去的经验可以作为指导,我将花很长时间说服TPTB。但如果这是唯一的选择…:-(@teleute00不必匿名。你可以随时将凭据添加到程序中-如果你想更改凭据,这当然很难管理。但这完全是可能的。因此我们将使用web服务,因为我们已经准备好了一些用于此目的的工具。这不是我想要的答案,但是也许这是我应得的答案。-)谢谢!