I’m using Redemption dll (http://www.dimastr.com/redemption/) and I’ve created an exe that accesses my mail box.
I run the exe in Windows Scheduler under my username and it works fine, I get an email sent to me (see below code).
When I change the runas username in Scheduler to someone else and try to access their mail box Profile I get an error. 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 = 'abc.email@xyz.com'; string FromEmailAddress = 'abc.email@xyz.com'; 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(); } } } }
When I try to run the same exe on another machine with me logged in I get this error,
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)
Has anyone got any ideas on what I’m doing wrong, can Redemption be used in this way?
I got this working in the end by ensuring that the user you are logged in as, has ‘full mailbox rights’ to the mail box you are trying to see.