es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo implementar un retraso en la bandeja de salida en un complemento de Outlook?

En mi complemento de Outlook, quiero implementar una función de devolución de llamada que funcione sin el servidor de Exchange. Con este propósito, todos los correos electrónicos, cuando se envían, deben moverse a la bandeja de salida durante un tiempo seleccionado por el usuario y solo entonces ser enviados. Durante el tiempo en que los correos electrónicos estén en la bandeja de salida, el proceso de envío puede ser cancelado por el usuario moviendo el correo electrónico a otra carpeta.

Desafortunadamente, no tengo idea de cómo implementar esto. Pero necesito el complemento para un proyecto universitario. ¿Alguien puede ayudar?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    ¡Claro, puedo ayudarte con esto!

    Para implementar una función de devolución de llamada en tu complemento de Outlook, puedes utilizar el evento ItemSend. Este evento se activa cada vez que se envía un correo electrónico desde Outlook.

    Para mover el correo a la carpeta Buzón de Salida durante un tiempo seleccionado por el usuario, puedes crear un nuevo objeto MailItem y establecer su propiedad DeferredDeliveryTime con el tiempo deseado. Luego puedes mover el correo original a la carpeta Buzón de Salida estableciendo su propiedad SaveSentMessageFolder en la carpeta Buzón de Salida.

    Aquí tienes un código de ejemplo para comenzar:

    private void Application_ItemSend(object item, ref bool cancel)
    {
        Outlook.MailItem mail = item as Outlook.MailItem;
        if (mail != null)
        {
            // Solicitar al usuario el tiempo de retraso (en minutos)
            int delayMinutes = 5; // Valor predeterminado de 5 minutos
            // TODO: Implementar un diálogo para que el usuario seleccione el tiempo de retraso
    
            // Crear un nuevo elemento de correo para enviarlo de forma diferida
            Outlook.MailItem deferredMail = (Outlook.MailItem)mail.Copy();
            deferredMail.DeferredDeliveryTime = DateTime.Now.AddMinutes(delayMinutes);
    
            // Guardar el correo original en la carpeta Elementos enviados
            mail.Save();
    
            // Mover el correo diferido a la carpeta Buzón de Salida
            Outlook.MAPIFolder outboxFolder = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderOutbox);
            deferredMail.SaveSentMessageFolder = outboxFolder;
            deferredMail.Move(outboxFolder);
    
            // Cancelar el proceso de envío original
            cancel = true;
        }
    }
    

    Con este código, cuando se activa el evento ItemSend, se le pedirá al usuario que seleccione un tiempo de retraso. Luego, el correo electrónico original se guardará en la carpeta Elementos enviados y se creará una copia con un tiempo de entrega diferida establecido en el tiempo seleccionado. Por último, el correo electrónico original se moverá a la carpeta Buzón de Salida, cancelando efectivamente el proceso de envío.

    Si el usuario cambia de opinión y desea enviar el correo electrónico de inmediato, simplemente puede moverlo desde la carpeta Buzón de Salida a otra carpeta y se enviará como de costumbre.

Comments are closed.