Outlook MailItem opened from standalone file, or not? - outlook

I'm developing an Outlook addin in C# and have a problem distinguishing mails opened from a folder (Inbox, Sent etc) from mails opened from a standalone .msg file.
I've tried inspecting the Parent property, but it shows Inbox for both kinds.
Any ideas out there?
/Sam

Looking through the properties, it looks to me that the .EntryID property is blank if the MailItem is opened from the file system, and has a value if the file is opened from within a folder. This makes sense based on the help entry for it; one caveat is that you'd also expect this property to be blank if the message is a new message (i.e. hasn't been saved in a folder, but doesn't exist in the file system either).
From the help concerning blank values:
Therefore, the EntryID property is not
set for an Outlook item until it is
saved or sent
You'd want to experiment with it and make sure it definitely behaves correctly before you implemented it :)
Failing all THAT, the next step could be complex; one approach would be to inspect the handles opened by Outlook. Inspecting them (in a non-priveleged context) via Process Explorer shows that there is a handle for each message; the name of the handle matches the message subject, the path is the file's path. One solution to enumerate these is in this answer.
HTH,
Geoff

Related

Save Email attachments to Google drive Attachment name deletes the letter automatically

I have created the flow to save my outlook attachment to save it google drive as a separate folder when ever I receive email with attachment.
But the problem is on the below highlighted screenshot when I type really slowly to the core Attachments From in the folder path it works but if I do the normal typing it keeps on deleting the letter. Any idea how to fix this behavior.
The point is you probably have selected some destination folder from drop-down menu and that is why such a miracle happens. And I guess it is not a bug but a feature.
How to overcome that? Just type/paste your desired value or add a dynamic content (or both).

Getting MAPI_E_COMPUTED when altering PidTagBlockStatus in OutlookSpy

I have .MSG file for which I cannot change PR_BLOCK_STATUS (PidTagBlockStatus). If I change it with OutlookSpy or MFCMapi, I'm getting MAPI_E_COMPUTED.
Outlook also displays an error when saving this message (it happens after the user clicks Display external images, then closes the message, Outlook displays "Save changes?" dialog and the user agrees).
However, PidTagBlockStatus is not a computable property. I can't understand why this happens. I have another .MSG file which is almost the copy of the first one (OutlookSpy and MFCMapi show that both .MSG files have identical fields/values) but for this file I can set PR_BLOCK_STATUS. However, these files have different length and low-level utils like SSView show that larger (and "working") file has more fields. These mysterious fields, however, are not displayed in OutlookSpy or MFCMapi.
The problem is not related to incorrect setting of PidTagMessageDeliveryTime as both messages (working and non-working) have the same PidTagMessageDeliveryTime (and other fields as well). Outlook itself (which knows how to properly set PR_BLOCK_STATUS from PidTagMessageDeliveryTime) cannot complete message save operation.
"Working" file was saved directly from Outlook, "non-working" - with a third-party software. I need to find a way to "fix" the non-working file to make it possible for Outlook to save PR_BLOCK_STATUS without issues.
One more thing. It's possible to simply delete PR_BLOCK_STATUS from .MSG at all. This, however, has an effect that once the user clicked Display external images, Outlook correctly sets PR_BLOCK_STATUS but the message gets blank in Outlook until it's opened next time. So this method does not work for me either. For that, I'm adding PR_BLOCK_STATUS to the message and setting it to zero (letting Outlook calculate the correct value if the user decided to display external pictures). With the default value of zero, Outlook normally shows the message after "Display external images" click, but fails to update the .MSG file on closing the message.
Another method would be calculation of PR_BLOCK_STATUS in "show external images" state in advance (like it's described at html email outlook asks to download images topic), but I can't get this as this must be the user's decision for each particular message, not mine.
Links to .MSG files (good/working and bad/non-working)
https://dl.dropboxusercontent.com/u/18102725/msgs.zip
Using Outlook 2010 64-bit, Windows 7 Ultimate, OutlookSpy 3.7 64-bit.
MSG files let you set any property, including PR_LAST_MODIFICATION_TIME or PR_ENTRYID. How does third party software create the MSG files? Have you looked at the MSG files using the OLE Storage viewers, such as Structured Storage Viewer (http://www.mitec.cz/ssv.html)?

Windows API hook, custom save as file dialog to save directly to webserver via POST

I want to write a custom save as dialog that is hooked into the File -> "Save As" of most Windows program. This custom dialog will allow the user to enter their username, password, destination folder and uploads the file to the web server via a POST. If the user clicks cancel, it will call the original file dialog.
I've been reading up about Windows API hooking and this is vaguely how I think I would approach this:
Intercept "Save As"
Display my custom dialog, return some temporary path on the drive
Let the program write file to the temporary path, assume it calls WINAPI CreateFile(...) for now
Read the temporary file and upload to web server
Clean up temporary file
But I still can't get my head around the steps required to pull this off. Assuming I can intercept the "Save As" and CreateFile function, how do I detect the CreateFile was called from a "Save As" and not just any random file creation? I can think of a hack where I keep track of the time difference of when the File dialog got open and CreateFile got called.
My alternative solution is to use the existing file dialog and create a special folder on the disk, that is constantly monitored. When a file gets written there it will call an external program that uploads the file. I haven't looked into how to do this yet. I suspect this is easier.
UPDATE
As a first baby step, I wrote a .NET task tray application that allows the user to enter their login details and a folder to monitor. Whenever a file gets dropped in there there it will upload to the web server. So far it seems to work. Now I just need to figure out how to add a nice shortcut to the left pane of the file dialog. Once that's done I think I got a solution I'm happy with.
There is no need to hook or patch anything. Create a shell namespace extension that supports IStorage::CreateStream and implements it by returning a stream that POSTs its data to the Web server. The user can then choose to save the file to your namespace extension in order to upload the file.
Hooking the standard save dialog requires you to inject a DLL into every running process and have it replace the import stub of the the Win32 API GetSaveFileName() function in the process's PE header (something anti-virus and anti-malware apps are not likely to be happy about).
Then there is the new-style save dialog that was introduced in Vista using the new IFileSaveDialog COM interface instead of GetSaveFileName(). For that, you would have to uninstall and replace Microsoft's default FileDialog COM object with a custom implementation.
That does not count custom-made save dialogs, which you are not likely to hook.
If, by some miracle, you can hook the dialog and have it return a custom path of your own creation, you don't need to hook CreateFile() itself, Just monitor the folder that you create for your purposes. Place it where it is unlikely that any other app (or user) besides you will write files to. You can create a custom subfolder in the user's or system'ss AppData folder for that purpose. You can use SHGetSpecialFolderPath() and/or SHGetKnownFolderPath() to find those folders.
The tricky part will be detecting when the file is finished being written to and has been closed. You will have to monitor the folder for changes, such as with ReadDirectoryChangesW() or SHChangeNotifyRegister(), and periodically open new/modified files for exclusive access. If a file is still open by someone else, you won't be able to open it yourself. But once you do open it, you can do whatever you want with it.

Creating link to Outlook messages

Outlook 2007
While composing a new message in outlook can a link be created to other messages?
Whww I am composing a new mail I would like to create a link to asent item, clicking this link should then open the message.
Can this be done?
Microsoft has a support KB on hyperlinks to access Outlook folders and items:
http://support2.microsoft.com/kb/158135
However, the Outlook: scheme is not registered by default with newer versions of outlook.
http://www.slipstick.com/outlook/using-outlook-links/
I verified that the registry editing technique to associate "outlook:" with opening Outlook items ( http://www.slipstick.com/problems/outlook-missing-outlook-protocol/ ) works for Outlook 2013 on Windows 8.1, so I imagine it would work for earlier versions too.
I needed to do the same thing in Outlook 2013. I was able to do so without any registry editing. (I believe such editing is only necessary if you want the links to work outside of Outlook)
I wanted to create a link to an email that I had stored in the following Outlook folder: My Projects\Set 1\. The subject line of the email was Testing links. Here's the steps to do so:
Right-click on the folder in which the target email is stored -> Choose Properties...
Copy the full Location path (in my case this was \\MyEmail#my.domain\My Projects. (Note that this doesn't include the parent folder itself; Use the description box (or some other convenient location) to paste that path, then append the folder. So in my case the full path looked like \\MyEmail#my.domain\My Projects\Set 1.
Open up the email that you want to paste the link into.
Create a normal hyperlink
In the Address field type Outlook: followed by the path you created in Step 2 above, followed by a backslash and tilde, followed by the subject line of the target email. So for me, that whole address looks like this: Outlook:\\MyEmail#my.domain\My Projects\~Testing links
Done.

Open TFS Work Item Attachment in Image Viewer not Web Browser

Is there a way to open an attachment for a TFS work item by double clicking on it (or rather just opening it from the IDE) in your computer's default image viewer, rather than opening it in a web browser? I'd love to be able to change this setting (if it is a setting).
Edit: after reviewing Kate Gregory's response, I looked into this option and realized that the trouble is that VS is launching a url (a handler file to respond with the attachment), which results in the default web browser being launched. A potential work around i'm considering is writing a custom mapper for all web based calls (as in, when going to start->run and enter a URL) that the mapper would determine what kind of call it is (TFS, etc) and use an appropriate program, based on the MIME type responded with, with a second phase to be incorporate this as a VS add-in.
I'm reasonably sure VS just uses your default program. Word for .doc files, IE for .htm files, and (in your case I bet) IE for .jpg files. Try changing the default program you're using in Windows and see what happens.
All files saved in TFS are saved in a path that starts with the following address:
http ://{YourServerName}TFS01:8080/tfs/.../.../...&FileName={YourFileName}.{YourExt}
This means that all files are opened using the default program defined for HTTP protocol, regardless of the extension for your file.
You can probably change the default program for your HTTP protocol (if you have permissions, and usually you wouldn't) but this would also affect opening any regular web page or URL, which is probably not recommended.
I still haven't found a workaround this issue too.
Some kind of preview function in VST/Team Explorer would be nice. Then, only a minor of attachments must be opened in the browser.
http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6224713-preview-attachments-in-team-explorer

Resources