2009-02-26 4 views
2

Ich verwende Redemption dll (http://www.dimastr.com/redemption/) und ich habe eine Exe erstellt, die auf meine Mailbox zugreift.Verwenden von Redemption (Outlook) mit einem anderen Benutzer als den angemeldeten Benutzer - und Fehler erhalten

Ich führe die Exe in Windows Scheduler unter meinem Benutzernamen und es funktioniert gut, ich bekomme eine E-Mail an mich gesendet (siehe unten Code).

Wenn ich den runas-Benutzernamen im Scheduler zu jemand anderem ändere und versuche, auf ihr Mailbox-Profil zuzugreifen, erhalte ich einen Fehler. System.IO.FileLoadException

static void Main(string[] args) 
{ 

    System.Diagnostics.Debugger.Break(); 

    object oItems; 

    //string outLookUser = "My Profile Name"; 
    string outLookUser = "Other User Profile Name"; 

    string ToEmailAddress = "[email protected]"; 
    string FromEmailAddress = "[email protected]"; 
    string outLookServer = "exchangeServer.com"; 

    string sMessageBody = 
     "\n outLookUser: " + outLookUser + 
     "\n outLookServer: " + outLookServer + 
     "\n\n"; 

    RDOSession Session = null; 

    try 
    { 
     rdoDefaultFolders olFolderInbox = rdoDefaultFolders.olFolderInbox; 

     Session = new RDOSession(); 
     RDOFolder objFolder; 

     Session.LogonExchangeMailbox(outLookUser, outLookServer); 

     int mailboxCount = Session.Stores.Count; 
     string defaultStore = Session.Stores.DefaultStore.Name; 

     sMessageBody += 
     "\n mailboxCount: " + mailboxCount.ToString() + 
     "\n defaultStore: " + defaultStore + 
     "\n\n"; 


     //RDOStore rmpMetering = Session.Stores.GetSharedMailbox("Name of another mailbox"); 
     //objFolder = rmpMetering.GetDefaultFolder(olFolderInbox); 

     objFolder = Session.GetDefaultFolder(olFolderInbox); 

     oItems = objFolder.Items; 
     int totalcount = objFolder.Items.Count; 
     if (totalcount > 10) totalcount = 10; 

     for (int loopcounter = 1; loopcounter < totalcount; loopcounter++) 
     { 
      RDOMail oItem = objFolder.Items[loopcounter]; 

      string attachmentName = string.Empty; 
      foreach (RDOAttachment attachment in oItem.Attachments) 
      { 
       attachmentName += attachment.FileName + " "; 


       if (attachmentName.Trim() == "Data.csv") 
       { 
        attachment.SaveAsFile(@"C:\datafiles\" + attachmentName.Trim()); 

        foreach (RDOFolder archiveFolder in objFolder.Folders) 
        { 
         if (archiveFolder.Name == "DataFileArchive") 
         { 
          oItem.MarkRead(true); 
          oItem.Move(archiveFolder); 
         } 
        } 
       } 
      } 

      sMessageBody += oItem.Subject + " " + attachmentName + "\n"; 
      if ((oItem.UnRead)) 
      { 
       //Do whatever you need this for      
       //sMessageBody = oItem.Body; 
       //oItem.MarkRead(true); 
      } 
     } 

     System.Web.Mail.SmtpMail.Send(ToEmailAddress,FromEmailAddress 
      , "Data File Processing-" + DateTime.Now.ToString() 
      ,"" + sMessageBody); 

    } 
    catch (Exception ex) 
    { 
     Session = null; 

     System.Web.Mail.SmtpMail.Send(ToEmailAddress, FromEmailAddress, "Error", sMessageBody + " " + ex.Message); 

    } 
    finally 
    { 
     if ((Session != null)) 
     { 
      if (Session.LoggedOn) 
      { 
       Session.Logoff(); 
      } 
     } 
    } 

} 

Wenn ich versuche, protokolliert die gleiche exe auf einer anderen Maschine mit mir laufen in ich diesen Fehler,

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or ass 
embly 'Interop.Redemption, Version=4.7.0.0, Culture=neutral, PublicKeyToken=null 
' or one of its dependencies. The system cannot find the file specified. 
File name: 'Interop.Redemption, Version=4.7.0.0, Culture=neutral, PublicKeyToken 
=null' 
    at RPMDataFileProcessing.Program.Main(String[] args) 

Hat jemand irgendwelche Ideen bekam, was ich tue falsch, kann Erlösung auf diese Weise benutzt werden?

Antwort

2

Ich habe dies am Ende funktioniert, indem Sie sicherstellen, dass der Benutzer Sie als angemeldet sind, hat volle Postfachrechte auf die Mailbox, die Sie versuchen zu sehen.