• 为incoming mail绑定事件,SPEmailEventReceiver


     1) 新建 class 项目, 添加Microsoft.Sharepoint.dll引用。新建class并继承SPEmailEventReceiver

    代码
    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);
                }
            }
        }
    }


     

     2) 新建console项目,为列表绑定事件。

    代码
    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();
            }
        }
    }

    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 一切可以。为什么?不知道。

    浪费一整天,我是差不多先生。。。。

    参考文档:

    http://blogs.msdn.com/malag/archive/2009/05/13/attachments-disappear-with-custom-email-event-handler.aspx

  • 相关阅读:
    【原】得心应手小工具开发——网易公开课课程下载链接提取器
    【原】得心应手小工具开发——快播自动升级杀手
    【原】得心应手小工具开发——初步统计博客园首页博文的回复率
    【原】过去的平面作品整理
    【原】浅谈对社交类网站的忧虑
    【原】到底怎么样才叫看书?——下篇
    【原】得心应手小工具开发——公务员考试之筛选我的职位报名人数的小工具
    【原】《锋利的JQuery》读书笔记(三)
    C#中如何给自定义类的只读属性赋值
    关于 ASP, ASP.NET; VBS, VB.NET, JS, JS.NET, C# 的体会,思考
  • 原文地址:https://www.cnblogs.com/lfwolf/p/1651476.html
Copyright © 2020-2023  润新知