将文件附加到 MailMessage 而不保存到服务器

Posted

技术标签:

【中文标题】将文件附加到 MailMessage 而不保存到服务器【英文标题】:Attach File to MailMessage without Saving to Server 【发布时间】:2015-10-19 08:14:05 【问题描述】:

我在使用 C# MailMessage 将文件附加到邮件消息时遇到了困难。我已经对此进行了详细搜索,并尝试了很多我遇到的事情。目前的化身是:

string uploadFile1 = fulAttachment1.FileName;
MyMessage.Attachments.Add(
    new Attachment(fulAttachment1.PostedFile.InputStream, uploadFile1));

其中 fulAttachment1 是文件选择器控件。

我不断出现的错误是这样开始的:

System.IO.FileNotFoundException: 找不到文件 'C:\Windows\SysWOW64\inetsrv\neptun-300x299.jpg'

我完全不明白它为什么要查看文件系统。

我应该补充一点,我尝试过的许多技术在 Visual Studio 2012 中以及在部署到我的开发机器上的 IIS 时都有效。将其部署到 Internet 主机上的 IIS 时会出现问题。他们说站点配置没有问题,我对此不太了解。

这是错误消息的其余部分:

在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options , SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) at System.Net.Mail.AttachmentBase.SetContentFromFile(String fileName, String mediaType) at System.Net.Mail.AttachmentBase..ctor(String fileName) at System.Net.Mail.Attachment..ctor(String fileName) at RSG.Webforms.Contact.btnSubmit_Click(Object sender, EventArgs e)在 c:\Users\suser\Documents\Visual Studio 2012\Projects\RSA\Webforms\Contact.aspx.cs:40 行

我不明白的另一件事是为什么远程服务器上的 IIS 会引用我的本地 Visual Studio 项目

【问题讨论】:

看起来您正在使用FileUpload 控件。您是否尝试过fulAttachment1.FileContent 而不是fulAttachment1.PostedFile.InputStream?我不确定这是否只是PostedFile.InputStream 的捷径,但值得一试。 感谢您的建议,但这并没有解决问题。我正在将错误消息的全文添加到我的原始帖子中... 这不是指您当地的视觉工作室项目。它指的是使用您的程序编译的调试符号。那是.pdb 文件。该项目在发布之前已在本地编译,因此,它在 PDB 文件中包含本地路径。至于您的问题,我不确定它为什么尝试引用文件而不是使用流。 【参考方案1】:

如 cmets 中所述,fuAttachment1.FileName 指的是文件名;您必须改为访问文件字节流。

string uploadFile1 = System.IO.Path.GetFileName(fulAttachment1.FileName);
MyMessage.Attachments.Add(new Attachment(fulAttachment1.FileContent, uploadFile1)));

参考资料:

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload_properties(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/system.net.mail.attachment.attachment(v=vs.110).aspx

【讨论】:

谢谢,这对我来说很有意义。我会尝试这条路线并报告。 好的,这行失败了:string uploadFile1 = System.IO.Path.GetFileName(fulAttachment1.FileName);这使得附加文件看起来不是问题,因为控件认为文件在服务器上,而不是 Web 客户端上。我不明白。 这行得通。原来我有两个问题:当我尝试发布单个文件时,Visual Studio 没有将文件复制到服务器,即使它表明文件已成功发布,所以我认为我正在尝试的其他一些变体可能会也起作用了。这是不同线程的问题。感谢您的帮助。

以上是关于将文件附加到 MailMessage 而不保存到服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何将 MailMessage 对象作为 *.eml 或 *.msg 文件保存到磁盘

附加到 MailMessage 对象时的 C# 空文件

将 System.Net.mail.MailMessage 保存为 .msg 文件

将表单文件附加到电子邮件,Codeigniter

将数据附加到波形声音文件而不加载其当前内容

将文本附加到文本文件而不替换它Python [重复]