1) 新建 class 项目, 添加Microsoft.Sharepoint.dll引用。新建class并继承SPEmailEventReceiver
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
namespace Sample{
public class Class1 : SPEmailEventReceiver
{
public override void EmailReceived(SPList oList, SPEmailMessage oMessage, string strReceiverData)
{
SPListItem oListItem = oList.Items.Add();
oListItem["Title"] = oMessage.Headers["Subject"];
oListItem["Body"] = oMessage.HtmlBody;
oListItem.Update();
foreach (SPEmailAttachment attachment in oMessage.Attachments)
{
byte[] attachmentArray = new byte[attachment.ContentStream.Length];
attachment.ContentStream.Read(attachmentArray, 0, (int)attachment.ContentStream.Length);
oList.RootFolder.Files.Add(attachment.FileName, attachmentArray);
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
namespace Sample{
public class Class1 : SPEmailEventReceiver
{
public override void EmailReceived(SPList oList, SPEmailMessage oMessage, string strReceiverData)
{
SPListItem oListItem = oList.Items.Add();
oListItem["Title"] = oMessage.Headers["Subject"];
oListItem["Body"] = oMessage.HtmlBody;
oListItem.Update();
foreach (SPEmailAttachment attachment in oMessage.Attachments)
{
byte[] attachmentArray = new byte[attachment.ContentStream.Length];
attachment.ContentStream.Read(attachmentArray, 0, (int)attachment.ContentStream.Length);
oList.RootFolder.Files.Add(attachment.FileName, attachmentArray);
}
}
}
}
2) 新建console项目,为列表绑定事件。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
namespace RegisterEvent
{
class Program
{
static void Main(string[] args)
{
string url = @"http://mossdev1/fa/corpsystem";
SPSite curSite = new SPSite(url);
SPWeb curWeb = curSite.OpenWeb();
int t = 0;
foreach (SPList list in curWeb.Lists)
{
Console.WriteLine(t++ + ", " + list.Title);
}
SPList commentsList = curWeb.Lists["title value"];
string asmName = "IISZ.SP.MailHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a3efae80b726e354";
string className = "IISZ.SP.MailHandler.Class1";
for ( int i = 0 ; i < commentsList.EventReceivers.Count ; i ++ )
{
Console.Write(commentsList.EventReceivers[i].Class.ToString());
commentsList.EventReceivers[i].Delete();
Console.WriteLine(" -- deleted!");
}
commentsList.EventReceivers.Add(SPEventReceiverType.EmailReceived, asmName, className);
foreach (SPEventReceiverDefinition srd in commentsList.EventReceivers)
{
Console.WriteLine(srd.Class.ToString() + " -- added!" );
}
Console.ReadLine();
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
namespace RegisterEvent
{
class Program
{
static void Main(string[] args)
{
string url = @"http://mossdev1/fa/corpsystem";
SPSite curSite = new SPSite(url);
SPWeb curWeb = curSite.OpenWeb();
int t = 0;
foreach (SPList list in curWeb.Lists)
{
Console.WriteLine(t++ + ", " + list.Title);
}
SPList commentsList = curWeb.Lists["title value"];
string asmName = "IISZ.SP.MailHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a3efae80b726e354";
string className = "IISZ.SP.MailHandler.Class1";
for ( int i = 0 ; i < commentsList.EventReceivers.Count ; i ++ )
{
Console.Write(commentsList.EventReceivers[i].Class.ToString());
commentsList.EventReceivers[i].Delete();
Console.WriteLine(" -- deleted!");
}
commentsList.EventReceivers.Add(SPEventReceiverType.EmailReceived, asmName, className);
foreach (SPEventReceiverDefinition srd in commentsList.EventReceivers)
{
Console.WriteLine(srd.Class.ToString() + " -- added!" );
}
Console.ReadLine();
}
}
}
3) 调试绑定的进程为owstimer.exe
4) 发送附件为txt的文本文件,报错。查看事件管理器为:
Error loading and running event receiver Sample.Class1 in Sample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a3efae80b726e354. Additional information is below.
: Value does not fall within the expected range.
5) 单步调试查到读取message.Attachments 报错,怀疑是文档库的问题,绑定事件到默认的文档库,同样错误。绑定到Announcements,OK.
6) 结论:document library 可以绑定邮件接收处理事件,但得不到附件信息。Announcements 一切可以。为什么?不知道。
浪费一整天,我是差不多先生。。。。
参考文档: