限制 Outlook 电子邮件的附件大小

本主题介绍如何为 Outlook 创建托管加载项,如果总附件大小大于固定限制,此加载项将取消发送电子邮件。

提供者: Ken Getz, MCW Technologies, LLC

指定电子邮件可能包含一个或多个文件附件,您可能需要在您发送的电子邮件中限制总附件大小。 本主题中的示例代码演示了如何处理 Outlook 外接程序中的 ItemSend 事件,并在事件处理程序中,如果所有附件的总大小大于特定值 (2 MB,则取消发送电子邮件,在此示例中) 。

Outlook ItemSend 事件接收对所发送项目的引用作为其参数,以及通过引用传递且允许您取消发送操作的布尔值变量。 由事件处理程序中的你自己的代码来确定是否要取消事件;如果确实希望取消事件,可以通过将Cancel 参数设置为 True 来执行此操作。

在此示例中,为了确定总附件大小是否大于特定大小,代码将遍历项的 Attachments 集合中的每个附件。 对于每个项目,代码将检索 Size 属性,在遍历时计算总和。 如果总和超过 maxSize 常量的大小,则代码会将 tooLarge 变量设置为 True,并退出循环。 在循环之后,如果 tooLarge 变量为 True,则代码会向用户发出警报,并将 Cancel 参数设置为事件处理程序 (,该事件处理程序由引用) 传递给 True,从而导致 Outlook 取消项目发送。

下面的托管代码示例是使用 C# 和 Visual Basic 编写的。 若要运行需调入组件对象模型 (COM) 的 .NET Framework 托管代码示例,您必须使用可定义托管接口并将其映射到对象模型类型库中的 COM 对象的互操作程序集。 对于 Outlook,您可以使用 Visual Studio 和 Outlook 主互操作程序集 (PIA)。 在您运行适用于 Outlook 2013 的托管代码示例之前,请确保您已安装了 Outlook 2013 PIA 并且已添加了对 Visual Studio 中的 Microsoft Outlook 15.0 对象库组件的引用。

您应该使用 Outlook 加载项的 ThisAddIn 类中的以下代码示例(使用 Visual Studio Office 开发人员工具)。 代码中的 应用程序对象必须是由 提供的受信任 Outlook ThisAddIn.Globals对象。 有关使用 Outlook PIA 开发托管 Outlook 解决方案的详细信息,请参阅欢迎使用 MSDN 上的 Outlook 主互操作程序集参考

以下代码说明当总附件大小超过指定限制时如何取消发送电子邮件。 要演示此功能,在 Visual Studio 中创建一个名为 LimitAttachmentSizeAddIn 的新托管 Outlook 加载项。 将 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 联系人项目附加到Email邮件修改 Outlook Email邮件的附件

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。