1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Outlook = Microsoft.Office.Interop.Outlook;
using Word = Microsoft.Office.Interop.Word;
using Office = Microsoft.Office.Core;
using System.Windows.Forms;
using System.Diagnostics;namespace CC_wo_attachments
{
public partial class CC_wo_attachments
{
static int smallAttachment = 163840;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
}
void Application_ItemSend(object Item, ref bool Cancel)
{
Outlook.MailItem msg;
Outlook.Attachments attachs;
Outlook.Recipients recips;
msg = (Outlook.MailItem)Item;
attachs = msg.Attachments;
recips = msg.Recipients;
int cc_bcc_count = recips.Count;
foreach (Outlook.Recipient r in recips)
{
if (r.Type == (int)Outlook.OlMailRecipientType.olTo)
cc_bcc_count -= 1;
}
if ((attachs.Count > 0) && (cc_bcc_count > 0))
{
switch (MessageBox.Show("Exclude attachments for Cc and Bcc recipients?",
"Attachment Manager",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button3))
{
case DialogResult.No:
break;
case DialogResult.Yes: Attachments_to_CC_BCC(msg);
break;
default: Cancel = true;
break;
}
}
}
public void Attachments_to_CC_BCC(Outlook.MailItem msg)
{
string bccRecipients = null, ccRecipients = null;
string toNotification = "This message was CC'd without attachments to";
string[] ccNotification = {"You have been copied on this message originally sent to","Attachments have been removed."};
Outlook.MailItem newMsg;
Outlook.Attachments attachs, newMsgAttachs;
Outlook.Recipients recips, newRecips;
attachs = msg.Attachments;
recips = msg.Recipients;
foreach (Outlook.Recipient r in recips)
{
switch (r.Type)
{
case (int)Outlook.OlMailRecipientType.olCC:
ccRecipients = ccRecipients + String.Format("{0};", r.Address);
break;
case (int)Outlook.OlMailRecipientType.olBCC:
bccRecipients = bccRecipients + string.Format("{0};", r.Address);
break;
}
}
msg.CC = null;
msg.BCC = null;
newMsg = msg.Copy() as Outlook.MailItem;
newRecips = newMsg.Recipients;
newMsgAttachs = newMsg.Attachments;
for (int d = newMsgAttachs.Count; d > 0; d--)
{
if (newMsgAttachs[d].Size > smallAttachment)
newMsgAttachs.Remove(d);
}
for (int d = newRecips.Count; d > 0; d--)
newRecips.Remove(d);
newMsg.CC = ccRecipients;
newMsg.BCC = bccRecipients;
newMsg.Recipients.ResolveAll();
Word.Document toMsg = msg.GetInspector.WordEditor as Word.Document;
Word.Range toRange = toMsg.Content;
toRange.InsertBefore(String.Format("{0}:\n{1}\n{2}\n", toNotification, newMsg.CC, Border(toNotification.Length)));
Word.Document ccMsg = newMsg.GetInspector.WordEditor as Word.Document;
Word.Range ccRange = ccMsg.Content;
ccRange.InsertBefore(String.Format("{0}:\n{1}\n{2}\n{3}\n", ccNotification[0], msg.To, ccNotification[1], Border(ccNotification.Max(c => c.Length)*2)));
newMsg.Display();
newMsg.Send();
}
string Border(int len)
{
return new string('-', len);
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
#region VSTO generated code
/// <summary>
/// Required method for Designer support - do not 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
}
}