Laden...

[gelöst](ExchangeService) PullSubscription failed to bind email message

Erstellt von KBH vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.350 Views
KBH Themenstarter:in
13 Beiträge seit 2016
vor 6 Jahren
[gelöst](ExchangeService) PullSubscription failed to bind email message

Hallo zusammen,

ich habe folgendes Konstrukt einer PullSubscription mit dem SmtpHandler als Wrapper um den ExchangeService.


Handler smtpHandler = new Handler(/*user, password, mailserver*/);
PullSubscription pullSubscription = smtpHandler.ExchangeService.SubscribeToPullNotifications(new FolderId[] { WellKnownFolderName.Inbox}, ewsTimout, null, EventType.NewMail);

while (true) {
  try{
    GetEventsResults events = pullSubscription.GetEvents();
    if (events.AllEvents.Count > 0) {
      List<string> eventUniqueIDs = new List<string>();
      foreach (NotificationEvent ne in events.AllEvents) {
        ItemEvent itemEvent = ne as ItemEvent;
        eventUniqueIDs.Add(itemEvent.ItemId.UniqueId);
      }
      List<EmailMessage> eMails = smtpHandler.FetchMailsByUniqueIDs(eventUniqueIDs);
      // code
    }
  } catch (Exception e) {
    // error handling
  }
  Thread.Sleep(1000*60*waitingMinues);
}


public List<EmailMessage> FetchMailsByUniqueIDs(IEnumerable<string> uniqueIDs) {
  List<EmailMessage> eMails = new List<EmailMessage>();
  foreach (string id in uniqueIDs) {
    try {
      eMails.Add(((EmailMessage)Item.Bind(ExchangeService, new ItemId(id))));
    } catch (Exception e) {
      // error handling
    }
  }
  return eMails;
}

Ich polle regelmäßig alle 5 Minuten und bekomme unregelmäßig folgende Fehlermeldung

Fehlermeldung:
||2018-03-12 13:18:17|| Failed to bind emailMessage
Reason: The specified object was not found in the store., The process failed to get the correct properties.
bei Microsoft.Exchange.WebServices.Data.ServiceResponse.InternalThrowIfNecessary()
bei Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest1.Execute() bei Microsoft.Exchange.WebServices.Data.ExchangeService.BindToItem(ItemId itemId, PropertySet propertySet) bei Microsoft.Exchange.WebServices.Data.ExchangeService.BindToItem[TItem](ItemId itemId, PropertySet propertySet) bei Microsoft.Exchange.WebServices.Data.Item.Bind(ExchangeService service, ItemId id) bei damast.SMTP.Handler.FetchMailsByUniqueIDs(IEnumerable1 uniqueIDs)

Edit
Mittlerweile habe ich als Grund auch> Fehlermeldung:

Reason: The specified object was not found in the store., Cannot get ID from name.

D.h. die Zeile


eMails.Add(((EmailMessage)Item.Bind(ExchangeService, new ItemId(id))));

wirft einen Fehler. 🤔

Parallel habe ich die Mails im Posteingang überprüft und hatte Mails im Verdacht, die verschlüsselt und / oder signiert sind (StackOverflow). Allerdings erhalte ich auch verschlüsselte und / oder signierte Mails ohne dass der Fehler geworfen wird.

Darüber hinaus lasse ich mir die Anzahl an neuen events von events.AllEvents.Count ausgeben und bin der Meinung, dass ich z.B. innerhalb eines 5min Zeitraums weniger Mails im Posteingang sehe, als der Count angibt. 🤔

Oder kann es sein, dass eine neue Mail hereinkommt, ein anderer Mitarbeiter diese aber in einen Unterordner der Inbox verschiebt?

Edit
Ich prüfe ja bei der Initialisierung der pullsubscription speziell auf neue EMails, aber kann es sein, dass als Event noch etwas anderes durchgeht?

Danke und Gruß
KBH

Don't ask for easier tasks ... ask for better skills.

1.029 Beiträge seit 2010
vor 6 Jahren

Hi,

ich würde an der Stelle vermuten, dass hier folgende Sachverhalte zum Tragen kommen:
a) Nicht alles im Sinne einer Mail für Exchange ist auch eine in Outlook sichtbare Mail
b) Du pollst in Intervallen - anhand eines Ereignisses, welches Verschiebungen und Löschungen nicht kennt - nach 5 Minuten kann relativ viel mit einer eingehenden Mail passiert sein...

LG

KBH Themenstarter:in
13 Beiträge seit 2016
vor 6 Jahren

Hallo,

Hi,
ich würde an der Stelle vermuten, dass hier folgende Sachverhalte zum Tragen kommen:
a) Nicht alles im Sinne einer Mail für Exchange ist auch eine in Outlook sichtbare Mail
b) Du pollst in Intervallen - anhand eines Ereignisses, welches Verschiebungen und Löschungen nicht kennt - nach 5 Minuten kann relativ viel mit einer eingehenden Mail passiert sein...

Das geht in die Richtung meines Edits. =)

Ich checke jetzt speziell auch auf den EventType und schaue ob ich da ein Muster finde.

Darüber hinaus habe ich in der Antwort dieses StackOverflow Posts eine interessante Aussage bzgl. der ItemId gefunden

If you want to store the ItemIds for later use, you should know that the ItemId is NOT a permanent, unchanging property. It will change if the Item in question is moved to another mailbox or moved to another folder. There may be other cases that can change it, such as service pack installations/version upgrades or even the passage of enough time, although I cannot confirm those myself.

Ich überdenke meine Implementierung.

Edit
Und hier noch eine StackOverflow Antwort, deren Kommentar bekräftigt, dass die ItemId sicherlich eine schlechte Wahl ist. X(

Danke und Gruß 👍
KBH

Don't ask for easier tasks ... ask for better skills.