2014-10-06 91 views
0

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

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

从C读取:\ WINDOWS \ SYSTEM32 \影像\ logo.jpg”

我想从解决方案层面的项目/图像/ logo.jpg

+0

你可能认为这是你想要的,但它可能不是。想想你在部署应用程序时会发生什么。 – Icemanind 2014-10-06 21:21:41

+0

你可以不使用资源文件位置吗?这里是关于MailMessage附件头的MSDN文档http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.headers(v=vs.110).aspx – MethodMan 2014-10-06 21:24:53

回答

1

这里就是你想要什么要做:

  1. 在解决方案中创建一个文件夹(说attachment)来存储您的附件文件。
  2. 使用~/attachment/filename来访问该文件。

由于~/attachment/filename是一个虚拟的路径,你必须把它转换为使用Control.ResolveUrl()或一个更合适的方式物理路径。检查了解更多关于它:ResolveUrl without an ASP.NET Page

0

我不认为你提到了你是从什么类型的解决方案。

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

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

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

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