Ограничить размер вложения сообщением электронной почты Outlook

В этом разделе описывается возможность создания управляемой надстройки для Outlook, которая отменяет отправку электронной почты, если общий размер вложения превышает фиксированный предел.

Предоставлено: Ken Getz, MCW Technologies, LLC

Заданное сообщение электронной почты может содержать один или несколько вложений файлов, и может потребоваться ограничить общий размер вложений в сообщениях электронной почты, которые вы отправляете. Пример кода в этом разделе демонстрирует, как можно обрабатывать событие ItemSend в надстройке Outlook, а в обработнике событий отменять отправку сообщения электронной почты, если совокупный размер всех вложений превышает определенное значение (2 МБ, в этом примере).

Событие Outlook ItemSend получает в качестве параметров ссылку на отправленный элемент, а также переменную Boolean, которая передается по ссылке и которая позволяет отменить операцию отправки. Решение об отмены события зависит от вашего собственного кода в обработнике событий. Это необходимо, установив параметрCancel для True , если вы хотите отменить событие.

В этом примере, чтобы определить, превышает ли общий размер вложения определенный размер, код проходит циклы через каждое вложение в коллекции вложений элемента. Для каждого элемента код извлекает свойство Size , подводя итоги по мере его циклов. Если сумма когда-либо превышает размер константы maxSize , tooLarge код задает переменную значение True и выходит из цикла. После цикла, tooLarge если переменная является True, код оповещает пользователя и задает параметр Cancel обработителю событий (который был передан по ссылке) true, в результате чего Outlook отменяет отправку элемента.

Следующие примеры управляемого кода написаны на C# и Visual Basic. Для запуска примера управляемого кода для .NET Framework, который вызывает модель COM, необходимо использовать сборку взаимодействия, которая определяет и сопоставляет управляемые интерфейсы с объектами COM в библиотеке типов объектной модели. Для Outlook можно использовать Visual Studio и первичную сборку взаимодействия Outlook (PIA). Перед запуском примеров управляемого кода для Outlook 2013 убедитесь, что вы установили Outlook 2013 PIA и добавили ссылку на компонент Microsoft Outlook 15.0 Object Library в Visual Studio.

Используйте следующие примеры кода в классе ThisAddIn надстройки Outlook (с помощью инструментов разработчика Office для Visual Studio). Объект Application в коде должен быть доверенным объектом Application Outlook, предоставленным объектом ThisAddIn.Globals. Дополнительные сведения об использовании Outlook PIA для разработки управляемых решений Outlook см. в статье Справочник по основной сборке взаимодействия Outlook на веб-сайте MSDN.

В следующем коде показано, как отменить отправку электронной почты, если общий размер вложения превышает указанный предел. Чтобы продемонстрировать эту функциональность, Visual Studio создайте новую Outlook с именем LimitAttachmentSizeAddIn. Замените код в ThisAddIn.cs или ThisAddIn.vb примером кода, показанного здесь.

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

См. также

Прикрепить файл к элементу почты Прикрепить элемент контакта Outlook к сообщению электронной почты Изменить вложение сообщения электронной почты Outlook сообщения электронной почты

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.