Я получаю прерывистое сообщение об ошибке сохранения электронной почты, может ли кто-нибудь помочь?
У меня есть приложение с элементом управления документами, частью этого элемента является надстройка Outlook, которая позволяет сохранять электронные письма в расположение сервера и обновляет базу данных моих приложений.
Когда пользователь выбирает сохранение сообщения электронной почты, ему предоставляется форма windows, в которой он вводит дополнительные сведения перед сохранением сообщения электронной почты. Периодически они получают сообщение об ошибке "операция не удалась", когда код пытается использовать MailItem.Метод SaveAs (), как только возникает ошибка, любая дальнейшая попытка сохранить электронные письма вызовет то же самое исключение.
Если пользователь перезапустит Outlook и попытается сохранить то же самое письмо снова, это, в основном, удастся.
Пользователь испытывает эту ошибку в различных операционных системах и версиях Office (2010 и выше), ничего необычного в именах пользователей или настройках профиля нет.
Любые указания будут приняты с большой благодарностью.
Что я уже пробовал:
Проведенные мною онлайн-исследования показывают, что это, как правило, проблема с путями к файлам или именами файлов, содержащими недопустимые символы, и на основании этого я изменил исходный код, чтобы гарантировать, что имена файлов могут содержать только буквенные и цифровые символы. Файлы сохраняются в локальном временном каталоге пользователя перед перемещением на сервер.
Метод, используемый для сохранения электронной почты, можно увидеть ниже.
Параметр fileName-это Guid.Метод newguid().ToString().Replace("-","")+".msg", параметр includeAttachments всегда имеет значение True. прогноз.MailItem передается в конструктор класса и присваивается переменной mailItem.
public void Save(string fileName, bool includeAttachments) { if (string.IsNullOrWhiteSpace(fileName)) throw new ArgumentNullException(fileName); if (this.mailItem == null) return; try { if (includeAttachments) { this.mailItem.SaveAs(fileName, 3); <--- This line throws the "Operation Failed" exception return; } var mailItemCopy = new MailItem(this.mailItem.Copy()); mailItemCopy.RemoveAttachments(); mailItemCopy.Item.SaveAs(fileName, 3); mailItemCopy.Item.Close(Outlook.OlInspectorClose.olDiscard); mailItemCopy.Item.Move(mailItemCopy.Item.Application.GetNamespace("MAPI").GetDefaultFolder(Outlook.OlDefaultFolders.olFolderDeletedItems)); } catch (Exception ex) { throw new Exception(ex.Message + "(FileName:" + fileName + "; IncludeAttachments:" + includeAttachments.ToString()); } }
Richard MacCutchan
Убедитесь, что имя файла содержит допустимый путь.
Paul Devereux UK
Привет, Ричард, пути генерируются с помощью Path.Combine(Path.GetTempPath(), "ILBWorkingDocs") и во всех случаях, которые я видел, папка существует, и ни один из символов не является недопустимым. Моя первоначальная мысль была о том, что имя файла было недопустимым, но, как я уже упоминал, я гарантировал, что они содержат только буквенные и цифровые символы
Richard MacCutchan
Просто потому, что они содержат только буквенные и цифровые символы, не гарантирует, что они являются допустимыми путями. У меня есть имена путей, которые включают в себя+, #, пробелы и т. д.
Кроме того, я подозреваю, что в некоторых случаях "<somepath>\ILBWorkingDocs" может быть недопустимым в качестве имени файла.
Paul Devereux UK
Последний экземпляр отчетов об ошибках C:\Users\gemma\AppData\Local\Temp\ILBWorkingDocs\3f6d9988510f4d80be28bf30a59060a7.msg как путь к файлу/имя, которое приложение пытается сохранить. Я проверил с пользователем, что эта папка существует (хотя приложение закодировано таким образом, чтобы создать папку, если нет), я не вижу, в чем проблема.
Richard MacCutchan
Без дополнительной информации невозможно догадаться, что происходит под одеялом. Загляните в эту папку, чтобы увидеть, есть ли там какие-нибудь подсказки.