Outlook 電子メール メッセージの添付ファイルのサイズを制限する

このトピックでは、添付ファイルの合計サイズが特定の限度を超えた場合に、メール送信をキャンセルする Outlook 用マネージ アドインを作成する方法を説明します。

提供元: Ken Getz、 MCW Technologies, LLC

特定のメール メッセージには、1 つ以上の添付ファイルが含まれることがありますが、送信するメール メッセージでは添付ファイルの合計サイズを制限することが望ましい場合があるかもしれません。 このトピックのサンプル コードでは、Outlook アドインで ItemSend イベントを処理する方法を示し、すべての添付ファイルの合計サイズが特定の値 (この例では 2 MB) を超える場合は、イベント ハンドラーで電子メール メッセージの送信を取り消します。

Outlook ItemSend イベントは、送信されるアイテムへの参照をパラメーターとして受け取り、参照によって渡され、送信操作をキャンセルできるブール変数を受け取ります。 イベントを取り消すかどうかを判断するのは、イベント ハンドラー内の独自のコードです。これを行うには、イベントを取り消す場合は、Cancel パラメーターを True に設定します。

この例では、添付ファイルの合計サイズが特定のサイズより大きいかどうかを判断するために、コードはアイテムの Attachments コレクション内の各添付ファイルをループします。 項目ごとに Size プロパティを取り出し、ループ処理を通じてそれを合計していきます。 合計が maxSize 定数のサイズを超えた場合、コードは変数を tooLargeTrue に設定し、ループを終了します。 ループの後、変数が tooLargeTrue の場合、コードはユーザーに警告し、Cancel パラメーターをイベント ハンドラー (参照によって渡された) に True に設定し、Outlook がアイテムの送信を取り消します。

The following managed code samples are written in C# and 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 Developer Tools を使用)。 コードの Application オブジェクトは で提供された、信頼済み 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 のサポートおよびフィードバックを参照してください。