views:

1240

answers:

1

Hi,

I have an outlook add-in that allows the user to save an email into a database. When the user does save the email i modify the email subject so it can be identified as being saved.

Saving the email can happen in two ways. Via a button on the tool bar which allows the user to save any email they want, and also via a prompt which appears when a new email is put into the Sent Items folder. Both methods use the same form to save the email!

Ok, now to the problem ....

in the process of saving the email i use the mailItem.SaveAs method to put it into the file store. After this has completed successfully i want to change the subject of the email which still exists in outlook to say that it has been saved successfully. I do this by changing myItem.Subject and then using the mailItem.Save method to save the change.

The above works perfectly when the email isnt being saved via the prompt method. So when the user tries to save the email after they send it the mailItem.Save method does not work.

I have narrowed it down to it actually working if i put the myItem.Save() line before the myItem.SaveAs() line, but obviously if i do this i can not guarantee the email was actually saved properly.

So does any one know of a reason that the mailItem.Save method would want to not work after the mailItem.SaveAs method as been called?

Thank you in advance to any suggestions to what might be the problem.

Steve

EDIT : Code

if (_item is Outlook.MailItem) { // if the incoming item is an Outlook mail Item
 // cast as a mail item
 Outlook.MailItem myItem = (Outlook.MailItem)_item;
 if (directoryExists(directoryTemp)) { // if the temporary directory exists
  bool _profiled = true;
  // copy the item as type .msg in the temporary location
  myItem.SaveAs(saveTemp, Outlook.OlSaveAsType.olMSG);
  // setup impersonation to copy the file to a secure location
  PImpersonateUser _iU = new PImpersonateUser();
  // do impersonation
  try {
   _iU.Impersonate("******", "******", "******");
   if (File.Exists(savefile)) { // if file already exists in the location
    // delete existing file
    File.Delete(savefile);
   }
   // move the temporary file to the secure location with the proper name
   File.Move(saveTemp, savefile);
   string year = "";
   if (ipt_year.SelectedItem != null) { // else if year has been selected
    year = ipt_year.SelectedItem.ToString();
   }
   _profile.profileEmail(folderString(_subject_), _fileName, year);
  } catch (Exception e) {
   _profiled = false;
   // if impersonation fails cancel the impersonation
   _iU.Undo();
   // show error
   MessageBox.Show(e.Source + "\n\n" + e.Message + "\n\n" + e.StackTrace, "SaveAs() Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
  } finally {
   _iU.Undo();
  }
  if (_profiled) { // if the email was profiled successfully
   // mark the original email as being profiled
   markAsProfiled();
  }
 } else {
  // if temporary file save fails throw error
  MessageBox.Show("Temporary Directory (" + directoryTemp + ") Does Not Exist!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
 }
}


and the markAsProfiled function ...


private void markAsProfiled() {
 if (_item is Outlook.MailItem) { // if the incoming item is an Outlook mail Item
  // cast as a mail item
  Outlook.MailItem myItem = (Outlook.MailItem)_item;
  // make sure subject doesnt already have a profiled flag in the subject
  _subject_ = _subject_.Replace("[PROFILED] - ", "");
  // add a profiled flag in the subject of the email
  myItem.Subject = "[PROFILED] - " + _subject_;
  // add a yellow flag to the email
  myItem.FlagIcon = Microsoft.Office.Interop.Outlook.OlFlagIcon.olYellowFlagIcon;
  // save email with changes made
  myItem.Save();
  //MessageBox.Show("Mark as Profiled :: " + myItem.Subject + " :: " + myItem.Saved.ToString() + " :: ");
 }
}
A: 

Hi stuv, I got exactly the same problem...

I think there is something to do with the explorer.selection.

Because if between the saveas and the save i manually change the selection on the explorer window and then comeback and reselect the same e-mail, then the save works...

The point now is that i do not know how to change the explorer.selection from VBA.

So did you find an answer , if so please contact me.

Thanks

Yves

yves Theriault
Yves, No I did not find a solution, to be honest I think I just forgot about it... it was so long ago now! If I discover otherwise I will post back as I am currently working on a new version of this same project. stuv
Stuv
yves Theriault