c# outlook vsto outlook-addin

OpenSharedItem para abrir archivos.MSG que muestran Error en Outlook C#



vsto outlook-addin (4)

Outlook administra su propio caché de elementos cuando abre y cierra mensajes. Su mejor opción sería usar un nombre de archivo generado al azar ( es decir, Path.GetRandomFilename ) al abrir a través de OpenSharedItem para que no tenga problemas. También usaría una ruta temporal en lugar de la raíz c:/ ( es decir, Path.GetTempPath ).

Puede probar y liberar la referencia de MailItem ( es decir, establecerla en nulo ), pero no hay garantía de que Outlook libere el elemento de su caché.

Estoy usando el siguiente código para abrir los mensajes de Outlook firmados / no firmados y mostrar el contenido en WebBrowser control WebBrowser .

Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application(); var item = app.Session.OpenSharedItem(msgfile) as Microsoft.Office.Interop.Outlook.MailItem; string message = item.HTMLBody; app.Session.Logoff();

Está funcionando bien la primera vez que se abre el archivo, pero después de cerrar el archivo de Outlook que intentaba volver a abrir el archivo muestra el siguiente error:

"No se puede abrir el archivo: C: / tion.msg. Es posible que el archivo no exista, que no tenga permiso para abrirlo o que esté abierto en otro programa. Haga clic con el botón derecho en la carpeta que contiene el archivo y luego en Propiedades para verificar tus permisos para la carpeta ".

Después de un tiempo, se está abriendo bien. Por este extraño comportamiento, ¿cuál podría ser el motivo y cómo rectificar el mensaje de error?


Puede usar Redención para eso - llame a RDOSession .GetMessageFromMsgFile.
Si necesita liberar el mensaje inmediatamente después de que haya terminado, use Marshal.ReleaseComObject ()
En caso de redención, también puede lanzar el objeto RDOMail a la interfaz IDisposable y llamar a IDisposable.Dispose ().


¿Funcionaría para usted alguna combinación de los métodos Quit [1], Close [2] o ReleaseComObject [3]? Mi código funcionó mejor, pero no perfecto después de que los usé. [4]

using Outlook = Microsoft.Office.Interop.Outlook; . . . var app = new Outlook.Application(); var item = app.Session.OpenSharedItem(msgfile) as Outlook.MailItem; //Do stuff with the mail. item.Close(OlInspectorClose.olDiscard); app.Quit(); Marshal.ReleaseComObject(item);

Otra solución, según Microsoft - Ayuda y soporte técnico [5], es retrasar la apertura del archivo. Sin embargo, no me parece una buena solución ya que, como también dijo @SliverNinja, nunca se sabrá cuándo Outlook libera el bloqueo del archivo.

notas y referencias

  1. http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook._application.quit.aspx , lea 2014-10-14, 16:19.
  2. http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook._mailitem.close%28v=office.15%29.aspx , lea 2014-10-14, 16:19.
  3. http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.releasecomobject.aspx , lea 2014-10-14, 16:19.
  4. Por ejemplo, si abrí Outlook para un trabajo normal, el método Quit cerraría esa ventana también.
  5. http://support2.microsoft.com/kb/2633737 , lea 2014-10-08, 16:19.

Hola, tienes dos opciones.

  • establecer el atributo de solo lectura en el archivo msg

o

  • deshabilite los siguientes permisos para los usuarios o grupos de usuarios en la carpeta principal:

    • Escribir atributos
    • Escribir atributos extendidos

el archivo msg ahora puede abrirse varias veces, pero está protegido contra escritura