Compartir a través de


Limitar el tamaño de los datos adjuntos de un mensaje de correo electrónico de Outlook

En este tema se explica cómo crear un complemento administrado para Outlook que cancele el envío de correo electrónico si el tamaño total de los datos adjuntos supera un límite fijo.

Proporcionado por: Ken Getz, MCW Technologies, LLC

Un mensaje de correo electrónico determinado puede contener uno o más archivos adjuntos y puede que usted desee limitar el tamaño total de los datos adjuntos de los mensajes de correo electrónico que envía. El código de ejemplo de este tema muestra cómo puede controlar el evento ItemSend en un complemento de Outlook y, en el controlador de eventos, cancelar el envío del mensaje de correo electrónico si el tamaño combinado de todos los datos adjuntos es mayor que un valor específico (2 MB, en este ejemplo).

El evento ItemSend de Outlook recibe como parámetros una referencia al elemento que se envía y una variable booleana que se pasa por referencia y que permite cancelar la operación de envío. Depende de su propio código en el controlador de eventos determinar si desea cancelar el evento; para ello, establezca el parámetroCancel en True si desea cancelar el evento.

En este ejemplo, para determinar si el tamaño total de los datos adjuntos es mayor que un tamaño específico, el código recorre en bucle cada dato adjunto de la colección Attachments del elemento. En cada elemento, el código recupera la propiedad Size y va sumando a medida que realiza el recorrido. Si la suma supera alguna vez el tamaño de la constante maxSize , el código establece la tooLarge variable en True y sale del bucle. Después del bucle, si la tooLarge variable es True, el código alerta al usuario y establece el parámetro Cancel en el controlador de eventos (que se pasó por referencia) en True, lo que hace que Outlook cancele el envío del elemento.

Los siguientes ejemplos de código administrado están escritos en C# y Visual Basic. Para ejecutar un ejemplo de código administrado de .NET Framework que necesita llamar un modelo de objetos componentes (COM), debe utilizar un ensamblado de interoperabilidad que defina y asigne interfaces administradas a los objetos COM de la biblioteca de tipos de modelos de objetos. Para Outlook, puede utilizar Visual Studio y el ensamblado de interoperabilidad primario (PIA) de Outlook. Antes de ejecutar ejemplos de código administrado para Outlook 2013, compruebe que tiene el PIA de Outlook 2013 instalado y que ha añadido una referencia al componente biblioteca de objetos de Microsoft Outlook 15.0 en Visual Studio.

Debe utilizar los códigos de ejemplo siguiente en la clase ThisAddIn de un complemento de Outlook (usando Office Developer Tools para Visual Studio). El objeto Application del código debe ser un objeto Application de Outlook de confianza proporcionado por ThisAddIn.Globals. Si desea más información sobre el uso del PIA de Outlook para desarrollar soluciones de Outlook administradas, consulte Outlook 2013 Primary Interop Assembly Reference en MSDN.

El código siguiente muestra cómo cancelar el envío de un mensaje de correo electrónico si el tamaño total de los datos adjuntos es mayor que el límite especificado. Para ilustrar esta funcionalidad, en Visual Studio cree un nuevo complemento administrado de Outlook denominado LimitAttachmentSizeAddIn. Sustituya el código de ThisAddIn.cs o ThisAddIn.vb por el código de ejemplo que se muestra aquí.

using Outlook = Microsoft.Office.Interop.Outlook;
 
namespace LimitAttachmentSizeAddIn
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
          Application.ItemSend +=new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
        }
 
        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }
 
        void Application_ItemSend(object Item, ref bool Cancel)
        {
            // Specify the maximum size for the attachments. For this example,
            // the maximum size is 2 MB.
            const int maxSize = 2 * 1024 * 1000;
            bool tooLarge = false;
 
            Outlook.MailItem mailItem = Item as Outlook.MailItem;
            if (mailItem != null)
            {
                var attachments = mailItem.Attachments;
                double totalSize = 0;
                foreach (Outlook.Attachment attachment in attachments)
                {
                    totalSize += attachment.Size;
                    if (totalSize > maxSize)
                    {
                        tooLarge = true;
                        break;
                    }
                }
            }
            if (tooLarge)
            {
                // If the sum of the attachment sizes is too large, alert the user
                // and cancel the send.
                System.Windows.Forms.MessageBox.Show(
                    "The total attachment size is too large. Sending canceled.", 
                    "Outlook Add-In");
                Cancel = true;
            }
        }
 
        #region VSTO generated code
 
        /// <summary>
        /// Required method for Designer support - don't modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }
        
        #endregion
    }
}
Public Class ThisAddIn
 
    Private Sub ThisAddIn_Startup() Handles Me.Startup
 
    End Sub
 
    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
 
    End Sub
 
    Private Sub Application_ItemSend(ByVal Item As Object, ByRef Cancel As Boolean) Handles Application.ItemSend
        ' Specify the maximum size for the attachments. For this example,
        ' the maximum size is 2 MB.
        Const maxSize As Integer = 2 * 1024 * 1000
        Dim tooLarge As Boolean = False
 
        Dim mailItem As Outlook.MailItem = TryCast(Item, Outlook.MailItem)
        If mailItem IsNot Nothing Then
            Dim attachments = mailItem.Attachments
            Dim totalSize As Double = 0
 
            For Each attachment As Outlook.Attachment In attachments
                totalSize += attachment.Size
                If totalSize > maxSize Then
                    tooLarge = True
                    Exit For
                End If
            Next attachment
        End If
 
        If tooLarge Then
            ' If the sum of the attachment sizes is too large, alert the user
            ' and cancel the send.
            System.Windows.Forms.MessageBox.Show(
                "The total attachment size is too large. Sending canceled.",
                "Outlook Add-In")
            Cancel = True
        End If
    End Sub
End Class

Consulte también

Adjuntar un archivo a un elemento de correoAdjuntar un elemento de contacto de Outlook a un mensaje de EmailModificar datos adjuntos de un mensaje de outlook Email

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.