c#MailMessage附件位置

时间:2014-10-06 21:14:47

标签: c# asp.net

我想添加一个附件用作电子邮件中的标题图片。但是当我尝试附加文件时,路径是从Windows读取而不是从我的解决方案目录位置读取。我该怎么做?

 var msg = new MailMessage(fromMailAdress, toEmail) { Subject = subject, Body = emailBody };
            msg.Attachments.Add(new Attachment("../images/logo.jpg"));

从c:\ windows \ system32 \ images \ logo.jpg'

中读取

我想从解决方案级别项目/ images / logo.jpg

2 个答案:

答案 0 :(得分:1)

以下是您想要做的事情:

  1. 在解决方案中创建一个文件夹(例如attachment)以存储附件文件。
  2. 使用~/attachment/filename访问该文件。
  3. 由于~/attachment/filename是虚拟路径,因此您必须使用Control.ResolveUrl()或更合适的方式将其转换为物理路径。有关详细信息,请查看此内容:ResolveUrl without an ASP.NET Page

答案 1 :(得分:0)

我不认为你曾提到过你从中做过什么类型的解决方案。

在传统的Windows应用中,您有几个选择。您可以通过在项目浏览器中右键单击徽标文件,选择“属性”并设置“复制到输出目录”来确保将徽标文件复制到输出目录。功能到"复制如果更新"。然后,您需要修改上面的代码以从正在执行的程序集的路径中加载图像...我的经验是Visual Studio将创建"图像"项目文件夹。

string logopath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "images/logo.jpg");

如DJ KRAZE所述,更好的选择是将您的徽标添加为资源。如果将其作为资源添加到项目中,则可以将其写入临时文件(如果不存在)。然后,使用您为临时文件创建的路径附加它。然后,您可以在完成后删除它,或者保留它,只有在它不存在时才重新创建它。

第三个选项是将徽标上传到网站,然后通过网址在您的电子邮件中引用它,而不是将其作为附件包含在内。如果您要创建HTML邮件消息,这可能是最佳解决方案。