c# - SMTP 发送锁定我的文件 - c#

标签 c# smtp locked-files

我有一个发送消息(很多消息)及其附件的功能。

它基本上遍历目录结构并从文件结构创建电子邮件

 c:\emails\message01
                \attachments
 c:\emails\message02
                \attachments

消息的创建使用 .net c#,标准的东西。

创建所有消息后...我有另一个功能可以直接运行,将消息文件夹复制到另一个位置。

问题是 - 文件被锁定...

注意:我不是移动文件,只是复制它们....

关于如何使用 C# 复制锁定的文件有什么建议吗?

更新

我有这个添加附件的方法

    private void AddAttachments(MailMessage mail)
    {
        string attachmentDirectoryPath = "c:\messages\message1";
        DirectoryInfo attachmentDirectory = new DirectoryInfo(attachmentDirectoryPath);
        FileInfo[] attachments = attachmentDirectory.GetFiles();
        foreach (FileInfo attachment in attachments)
        {
            mail.Attachments.Add(new Attachment(attachment.FullName));
        }
    }

最佳答案

您如何阅读文件以创建电子邮件?它们应该以只读方式打开,并将 FileShare 设置为 FileShare.ReadWrite... 然后它们不应被锁定。如果您使用的是 FileStream,您还应该将您的逻辑包装在 using 关键字中,以便正确处理资源。

更新:

我相信处理邮件消息本身会关闭其中的资源并解锁文件:

using (var mail = new MailMessage())
{
    AddAttachments(mail);
}
// File copy code should work here

关于c# - SMTP 发送锁定我的文件 - c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296380/

相关文章:

c# - LINQ 嵌套组性能

ssl - Go smtp.SendMail 的 X509 证书问题

api - 无法使用 Mailgun 接收传入邮件

C# Dapper - 这个 MySql 有什么问题?

c# - 数值类型的 "base class"是什么?

c# - 程序运行时创建文件后目录被锁定

java - 无法删除/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/appname/WEB-INF/lib。可能被另一个进程锁定

c# - 单元测试策略 - 验证私有(private)字段的状态

c# - 如何获取托管 asp.net 应用程序的计算机的 HostName、Ip