Sicos1977 / MsgKit

A .NET library to make MSG files without the need for Outlook
204 stars 56 forks source link

No way to create appointments. #15

Closed seeker25 closed 7 years ago

seeker25 commented 7 years ago

No way to create appointments, I can see how to create an email. But I don't think appointments is implemented yet.

Sicos1977 commented 7 years ago

You are correct, that is not yet implemented due to the lack of spare time :-)

seeker25 commented 7 years ago

It's alright, I might have something working here in a bit.. Stay tuned haha.

Sicos1977 commented 7 years ago

Can you give me your name so that I can give you credits for your work?

seeker25 commented 7 years ago

Sure Travis Semple

On Wed, Sep 27, 2017 at 9:08 AM, Kees notifications@github.com wrote:

Can you give me your name so that I can give you credits for your work?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/Sicos1977/MsgKit/issues/15#issuecomment-332572967, or mute the thread https://github.com/notifications/unsubscribe-auth/ADUpzVXrWs6dNUpk42VYQibdXoFwrZgfks5smnL1gaJpZM4PeSm- .

Sicos1977 commented 7 years ago

Later this week I will cleanup the code a little bit and expand the demo tool so that users can also create appointments from it. I hope it was not to hard to understand my way of coding :-)

seeker25 commented 7 years ago

No not at all. Made sense to me entirely, just took a little with the debugger to figure out.

I did nuke a couple structures though, because I implemented the NamedPropertys by ID instead of by name (had a working .msg file i was referencing that used ID instead of name).

It needs a bit of cleanup and refactor as well, plus the spec was confusing (there was some conflicting info)

On Wed, Sep 27, 2017 at 9:40 AM, Kees notifications@github.com wrote:

Later this week I will cleanup the code a little bit and expand the demo tool so that users can also create appointments for it. I hope it was not to hard to understand my way of coding :-)

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/Sicos1977/MsgKit/issues/15#issuecomment-332582284, or mute the thread https://github.com/notifications/unsubscribe-auth/ADUpzSuq4JZDi_w0hbZraVOjAyZ3uXZdks5smnp-gaJpZM4PeSm- .

Sicos1977 commented 7 years ago

Yeah Microsoft has good documentation but some documentation says A and another one says B about the exact same property. It took me some reverse engineering to figure out how to produce a MSG file that Outlook was willing to open. I had to do a lot of attempts before Outlook stopped crashing :-)

I used the structured storage explorer from OpenMCDF (https://github.com/ironfede/openmcdf/tree/master/sources/Structured%20Storage%20Explorer) to compare the MSG files (one that was produced by Outlook and one that I did produce). I also used Outlook Spy to look somewhat deeper into the properties (http://www.dimastr.com/outspy/home.htm)

seeker25 commented 7 years ago

Yeah it took me a day or two to finally catch on to use OpenMCDF (i saw in the spec they were viewing by streams and kept finding crap tools that wouldn't read the streams correctly). As soon as i found that, it wasn't too bad. I haven't tried using Outlook Spy yet.. but i'll give it a shot.

What are you using the .msg files for? Just curious.

I'm trying to integrate data from Microsoft Dynamics CRM into Microsoft Outlook using appointments.

Thanks to your tool and a bit of work I can fully automate population of a meeting inside of a .msg file....

Still need an Addin to recreate the .msg file to be able to send AND.. still need an HTML/MEDIA to RTF converter for the body (all appointments use RTF unfortunately for backwards compatability, plus any HTML to RTF converts suck really except for 1 paid one.. none of them do styles or table styling)

But that's the next project i'm working on :P

On Wed, Sep 27, 2017 at 9:55 AM, Kees notifications@github.com wrote:

Yeah Microsoft has good documentation but some documentation says A and another one says B about the exact same property. It took me some reverse engineering to figure out how to produce a MSG file that Outlook was willing to open. I had to do a lot of attempts before Outlook stopped crashing :-)

I used the structured storage explorer from OpenMCDF ( https://github.com/ironfede/openmcdf/tree/master/sources/ Structured%20Storage%20Explorer) to compare the MSG files (one that was produced by Outlook and one that I did produce). I also used Outlook Spy to look somewhat deeper into the properties (http://www.dimastr.com/ outspy/home.htm)

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/Sicos1977/MsgKit/issues/15#issuecomment-332586367, or mute the thread https://github.com/notifications/unsubscribe-auth/ADUpzUAPADal-QXPA0hYMI0Ds7mdtudGks5smn3tgaJpZM4PeSm- .

Sicos1977 commented 7 years ago

A few years ago I wrote a library to read MSG files (https://github.com/Sicos1977/MSGReader) that uses the IStorage interface to read the E-mails. I was curious if I could write a library that could produce MSG files without using that interface... so I wrote the MSGKit library. One of my goals was to merge the MSGReader library into it and get rid of the IStorage interface so that it also can be used from .NET CORE.

seeker25 commented 7 years ago

Oh ok so you basically want to do the reverse of MSGkit now and use it to read emails (without IStorage).

Hmm, probably do able (reverse the operations, plus I think you already read some in MsgKit).

I don't see why not. Almost like building outlook from scratch basically. Is there a purpose for that though?

I think MsgKit is going to need a nuget package coming up quick here ;)

Sicos1977 commented 7 years ago

There is already a NuGet package, I have to do a little bit of code cleanup and then I will release a new version. I think it will be tomorrow or otherwise this weekend.

seeker25 commented 7 years ago

Excellent, in the mean time.. I'm working on figuring out how include groups into the Recipients.

Sicos1977 commented 7 years ago

What I always do if I want to figure something like this out. I make a group in Outlook, add that to an E-mail and look inside the E-mail with OpenMCDF or Outlook Spy.

seeker25 commented 7 years ago

I'll give it a go in a bit, I'm just trying to figure out how to Compress the RTF Body first.

Sicos1977 commented 7 years ago

This is how you decompress it... so compressing is just the other way around :-) --> https://github.com/Sicos1977/MSGReader/blob/master/MsgReader/Outlook/RtfDecompressor.cs

But you also can store the RTF message uncompressed in the message file. There is a boolean inside an msg file that just says if the RTF is compressed or not.

Sicos1977 commented 7 years ago

This is probably the compressing method that is used inside an msg file --> https://msdn.microsoft.com/en-us/library/cc463890(v=exchg.80).aspx

seeker25 commented 7 years ago

Oh man, didn't think you could get away with storing it uncompressed.. I tried loading the BODY with RTF and no compression flag.. didn't seem to have much luck

I've been looking at this https://github.com/delimitry/compressed_rtf - it implements [MS-OXRTFCP]

mostly have it converted to C# code, just need a little more time

On Sat, Sep 30, 2017 at 6:53 AM, Kees notifications@github.com wrote:

This is probably the compressing method that is used inside an msg file --> https://msdn.microsoft.com/en-us/library/cc463890(v=exchg.80).aspx

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/Sicos1977/MsgKit/issues/15#issuecomment-333310035, or mute the thread https://github.com/notifications/unsubscribe-auth/ADUpzQ09CBGcjPSah0cj2FpWqOqR0Jmwks5snkfkgaJpZM4PeSm- .

Sicos1977 commented 7 years ago

I just released a new NuGet package

Install-Package MsgKit -Version 1.1.5

seeker25 commented 7 years ago

Lookin good. I have this compression code complete (maybe a little refactoring to do). Have to try it out with MsgKit now.

I reused a bit of your CRC32 code.

Not sure if you'd be interested in adding it to MsgKit or rather just keep it as a seperate library.

Sicos1977 commented 7 years ago

Just send me a pull request and I will merge it with MsgKit.

Sicos1977 commented 7 years ago

I have closed this issue, since thanks to you it isn't an issue anymore... please feel free to add comments to this thread to chat :-)

seeker25 commented 7 years ago

Sounds good. I have the distributed list contacts working now. Plus a bug fix for RTFCompressor.

Haven't tried sending the email though, going to get my hands on a real distributed list and try sending the generated email before I create a pull request.