Pregunta

Estoy tratando de vincular un SpemaileVentReceiver a mi biblioteca de documentos.

En primer lugar, creé el EventReceiver usando el receptor de Visual Studio 2010 ADD -> List Events Events Events -> Biblioteca de documentos -> La lista recibió un mensaje de correo electrónico

Luego escribí el código en la clase generada:

namespace ProvaEmailEvent.EventReceiver1
{
/// <summary>
/// List Email Events
/// </summary>
public class EventReceiver1 : SPEmailEventReceiver
{
   /// <summary>
   /// The list received an e-mail message.
   /// </summary>
   public override void EmailReceived(SPList list, SPEmailMessage emailMessage, String receiverData)
   {
       SPUser currentUser = list.ParentWeb.CurrentUser;
       Guid listGUID = list.ID;

       SPSecurity.RunWithElevatedPrivileges(() =>
       {
           using (SPSite sito = new SPSite(list.ParentWebUrl))
           {
               using (SPWeb web = sito.OpenWeb())
               {

                   foreach (SPEmailAttachment attach in emailMessage.Attachments)
                   {
                       SPList elevatedList = web.Lists[listGUID];
                       SPFile file = elevatedList.RootFolder.Files.Add(attach.FileName, attach.ContentStream);
                       SPListItem item = file.Item;
                       item.BreakRoleInheritance(false);
                       item.SystemUpdate();
                       AssignPermissionsToItem(item, currentUser, SPRoleType.Contributor);
                       item.SystemUpdate();
                   }
               }
           }
       });
   }

   public static void AssignPermissionsToItem(SPListItem item, SPPrincipal obj, SPRoleType roleType)
   {
       SPRoleAssignment roleAssignment = new SPRoleAssignment(obj);
       SPRoleDefinition roleDefinition = item.Web.RoleDefinitions.GetByType(roleType);

       roleAssignment.RoleDefinitionBindings.Add(roleDefinition);

       item.RoleAssignments.Add(roleAssignment);
   }

El archivo Elements.xml contiene:

 <?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
 <Receivers ListTemplateId="101">
  <Receiver>
    <Name>EventReceiver1EmailReceived</Name>
    <Type>EmailReceived</Type>
    <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
    <Class>ProvaEmailEvent.EventReceiver1.EventReceiver1</Class>
    <SequenceNumber>10000</SequenceNumber>
  </Receiver>

</Receivers>
</Elements>

En el registro de SharePoint encontré mensajes como este (cuando se envía un correo electrónico):

 Documents _ Microsoft.SharePoint.Utilities.SPEmailMessage __   18fd777b-039b-402b-ad8a-1e0a5e534d88
 The user does not exist or is not unique
Warning     An error occurred while processing the incoming e-mail file C:\inetpub\mailroot\Drop\8d8bea9e01cd963600000007.eml. The error was: Object reference not set to an instance of an object..    18fd777b-039b-402b-ad8a-1e0a5e534d88
    The Incoming E-Mail service has completed a batch.  The elapsed time was 00:00:00.0156250.  The service processed 1 message(s) in total.  Errors occurred processing 1 message(s): Message ID: <SP2010DEVNsErKkSoii00000007@SP2010DEV.virtualsp.dev> 

Intenté también con código en blanco o con una sola instrucción que escribió algo en los registros ...

¿Alguna sugerencia?

¿Fue útil?

Solución

Puede ser que tenga una excepción de nullPointer.
Intentaría depurar el receptor, como este:

  • despliegue su solución.
  • Reinicie el servicio de temporizador (de servicios).
  • en vs Haga clic en Herramientas -> adjuntar al proceso .
  • Haga clic en Actualizar
  • Encuentra el llamado owstimer.exe y adjunte a esto.
Licenciado bajo: CC-BY-SA con atribución
scroll top