Pregunta

De acuerdo, las especificaciones han cambiado en este caso un tanto. Tal vez alguien me puede ayudar con este nuevo problema.

manualmente, lo que el usuario está haciendo es abrir un mensaje nuevo en Outlook (2007 ahora), que tiene el campo "De ..." expuesta. Se abren con esto, seleccionar una cuenta determinada de la lista global de direcciones, y enviar el mensaje en nombre de esa cuenta.

¿Es posible hacer?

Me puede conseguir el AddressEntry de la lista de direcciones global de esta manera:

AddressList list = null;
foreach (AddressList addressList in _outlookApp.Session.AddressLists)
{
    if (addressList.Name.ToLower().Equals("global address list"))
    {
        list = addressList;
        break;
    }
}

if (list != null)
{
    AddressEntry entry = null;
    foreach (AddressEntry addressEntry in list.AddressEntries)
    {
        if (addressEntry.Name.ToLower().Equals("outgoing mail account"))
        {
            entry = addressEntry;
            break;
        }
    }
}

Pero no estoy seguro de que puedo hacer un tipo de cuenta de la entrada de dirección. Parece ocurrir de forma manual, cuando seleccionan la dirección para enviar a. ¿Cómo hago un retrovisor de esto en la interoperabilidad?

Gracias!

(Mi pregunta original):

he desarrollado un pequeño programa en C # para enviar correo electrónico utilizando la interoperabilidad de Outlook 2007. El cliente requiere que el correo no se envía utilizando la cuenta predeterminada - tenían una cuenta secundaria que necesitaban utilizan.

No hay problema -. Yo utiliza la clase Microsoft.Office.Interop.Outlook.Account acceder a las cuentas availabled, y elegir la correcta

Ahora, resulta que ellos necesitan que esto funcione en Outlook 2003. Por supuesto, la clase de cuenta no existe en la Perspectiva de interoperabilidad 11.0.

¿Cómo puedo lograr lo mismo con Outlook 2003?

Gracias de antemano.

¿Fue útil?

Solución

Sigh ... parece contesto más de mis propias preguntas sobre stackoverflow ...

De todos modos, esto es cómo se hace:

(creo que funciona para la Perspectiva Interops 2003 y 2007, y no utiliza la redención. Incluso puede ser la forma en esta parte de las obras de reembolso, aunque no he mirado a eso.)

message.PropertyAccessor
    .SetProperty("http://schemas.microsoft.com/mapi/proptag/0x00410102",
    message.PropertyAccessor.StringToBinary(entry.ID));

Esta entrada de esquema y de identificador hexadecimal corresponde al PR_SENT_REPRESENTING_ENTRYID propiedad MAPI. La variable 'entrada' fue adquirida en el fragmento de código en la pregunta.

Tomó un poco de la pesca de arrastre a través de la web para encontrar las piezas para hacer ese trabajo. Encontrado que tuve que utilizar la propiedad PR_SENT_REPRESENTING_ENTRYID en un solo lugar, el hecho de que 0x00410102 == PR_SENT_REPRESENTING_ENTRYID en otro, y el hecho de que usted tiene que llamar 'StringToBinary'? ... ni siquiera preguntan ... :) Gracias a las personas que tenían todas las piezas publicadas!

Otros consejos

¿Tiene que usar el OOM en absoluto, se puede utilizar System.Net.Mail? si ts sólo simple envío de correo. Supongo que depende de lo demás que está haciendo?

Si no creo que tendrá que utilizar MAPI extendido y estaría en los reinos de librarys como redención .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top