Compartilhar via


Limitar o tamanho de um anexo a uma mensagem de Email do Outlook

Este tópico descreve como você pode criar um suplemento gerenciado para o Outlook que cancela o envio de email se o tamanho total do anexo for maior que um limite fixo.

Fornecido por: Ken Getz, MCW Technologies, LLC

Uma determinada mensagem de email pode conter um ou mais anexos de arquivo e talvez você queira limitar o tamanho total do anexo em mensagens de email enviadas. O código de exemplo neste tópico demonstra como você pode lidar com o evento ItemSend em um suplemento do Outlook e, no manipulador de eventos, cancelar o envio da mensagem de email se o tamanho combinado de todos os anexos for maior que um valor específico (2 MB, neste exemplo).

O evento Outlook ItemSend recebe como seus parâmetros uma referência ao item que está sendo enviado e uma variável booliana que é passada por referência e que permite cancelar a operação de envio. Cabe ao seu próprio código no manipulador de eventos determinar se você deseja cancelar o evento; você o fará definindo o parâmetroCancel como True se desejar cancelar o evento.

Neste exemplo, para determinar se o tamanho total do anexo é maior que um tamanho específico, o código passa por cada anexo na coleção Anexos do item. Para cada item, o código recupera a propriedade Size , resumindo como ela é loops. Se a soma exceder o tamanho da constante maxSize , o código definirá a tooLarge variável como True e sairá do loop. Após o loop, se a tooLarge variável for True, o código alertará o usuário e definirá o parâmetro Cancelar para o manipulador de eventos (que foi passado por referência) para True, fazendo com que o Outlook cancele o envio do item.

The following managed code samples are written in C# and Visual Basic. To run a .NET Framework managed code sample that needs to call into a Component Object Model (COM), you must use an interop assembly that defines and maps managed interfaces to the COM objects in the object model type library. For Outlook, you can use Visual Studio and the Outlook Primary Interop Assembly (PIA). Before you run managed code samples for Outlook 2013, ensure that you have installed the Outlook 2013 PIA and have added a reference to the Microsoft Outlook 15.0 Object Library component in Visual Studio.

You should use the following code samples in the ThisAddIn class of an Outlook add-in (using Office Developer Tools for Visual Studio). The Application object in the code must be a trusted Outlook Application object provided by ThisAddIn.Globals. For more information about using the Outlook PIA to develop managed Outlook solutions, see the Outlook 2013 Primary Interop Assembly Reference on MSDN.

O código a seguir mostra como cancelar o envio de um email se o tamanho total do anexo for maior que o limite especificado. Para demonstrar essa funcionalidade, no Visual Studio, crie um novo suplemento gerenciado do Outlook chamado LimitAttachmentSizeAddIn. Substitua o código em ThisAddIn.cs ou ThisAddIn.vb pelo código de exemplo mostrado aqui.

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

Confira também

Anexar um arquivo a um item de emailAnexar um item de contato do Outlook a uma mensagem de EmailModificar um anexo de uma mensagem do Outlook Email

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.