【问题标题】:c# MailMessage attachment locationc# MailMessage 附件位置
【发布时间】:2014-10-07 06:39:10
【问题描述】:

我想添加一个附件以用作电子邮件中的标题图像。但是当我尝试附加文件时,路径是从 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 中获得它

【问题讨论】:

  • 您可能认为这是您想要的,但可能不是。想想当你去部署你的应用程序时会发生什么。
  • 你能不能不使用资源文件位置来代替..?这是关于 MailMessage Attachment Header msdn.microsoft.com/en-us/library/… 的 MSDN 文档

标签: c# asp.net


【解决方案1】:

这是你想要做的:

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

由于~/attachment/filename 是虚拟路径,您必须使用Control.ResolveUrl() 或更合适的方式将其转换为物理路径。查看更多信息:ResolveUrl without an ASP.NET Page

【讨论】:

    【解决方案2】:

    我认为您没有提到您使用哪种类型的解决方案。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-02
      • 2015-04-29
      • 2011-07-17
      • 1970-01-01
      • 2013-12-31
      • 2011-09-27
      相关资源
      最近更新 更多