Leider gibt es für diesen "Bug" nach wie vor keinen Hotfix - ganz im Gegenteil - Microsoft hat nun schon das zweite mal ein Cumulative Update für Office 2010 released welches diesen Fehler hervorruft. Schön langsam stellt sich hier der Eindruck als sei dies eine bewusste Änderung an den Sicherheitsprüfungen der MailItem.SaveAs() Funtkion. Aber es gibt auch gute Nachrichten zu diesem Thema - es gibt einen Workaround - und zwar einen der nicht gerade sauber, dafür aber wohl für die Zukunft stabil laufen sollte.
Im Detail tritt der genannte Fehler nur dann auf wenn man versucht mit dieser Methode den Inhalt direkt auf ein WebDav/WebClient-Ziel zu speichern. Verwendet man die Methode stattdessen um direkt ins Filesystem zu speichern funktioniert sie wunderbar - so als wäre nie etwas gewesen.
Problem (führt zu dem Fehler):
MailItem mi = item as MailItem;
mi.SaveAs("http://sp2010/doclib/emails/Message.msg", OlSaveAsType.olMSG);
Workaround (umgeht den Fehler):
MailItem mi = item as MailItem;
mi.SaveAs("C:\\Temp\\Message.msg", OlSaveAsType.olMSG);
WebRequest request = WebRequest.Create("http://sp2010/doclib/emails/Message.msg");
request.Method = "PUT";
byte[] buffer = new byte[1024];
using (Stream stream = request.GetRequestStream())
using (MemoryStream ms = new MemoryStream(GetBytesFromFile("C:\\Temp\Message.msg")))
for (int i = ms.Read(buffer, 0, buffer.Length); i > 0; i = ms.Read(buffer, 0, buffer.Length))
stream.Write(buffer, 0, i);
WebResponse response = request.GetResponse();
response.Close();
public static byte[] GetBytesFromFile(string fullFilePath)
{
FileStream fs = File.OpenRead(fullFilePath);
try
{
byte[] bytes = new byte[fs.Length];
fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
fs.Close();
return bytes;
}
finally
{
fs.Close();
}
}
Konklusio:
Naturlich kann man vermutlich den Code noch etwas sauberer und vorallem gekapselter abbilden - im Endeffekt beschreibt er aber einen möglichen Weg zur Umgehung des Problems. Es muss hier jeder für sich selbst entscheiden - ob dieser Weg wirklich vertretbar für einen ist - denn immerhin werden lokale temporäre Daten abgelegt - welche auch wieder gelöscht werden müssten. Unsauber ist es allemal - aber der Kunde ist König - und wenn die Lösung ihn glücklich macht - wird es so gemacht ;)
Betroffene Office 2010 Updates:
Office 2010 Security and Non-Security Updates November 2012 http://support.microsoft.com/kb/2781266
Office 2010 Security and Non-Security Updates Dezember 2012 http://support.microsoft.com/kb/2793009
Office 2010 Cumulative Update Dezember 2012 http://support.microsoft.com/kb/2789671
Office 2010 Security and Non-Security Updates Januar 2013 http://support.microsoft.com/kb/2798063
Office 2010 Non-Security Updates Februar 2013 http://support.microsoft.com/kb/2810076
Office 2010 Cumulative Update Februar 2013 http://support.microsoft.com/kb/2800779
Office 2010 Security and Non-Security Updates März 2013 http://support.microsoft.com/kb/2824877
Office 2010 Security and Non-Security Updates April 2013 http://support.microsoft.com/kb/2833132
Office 2010 Cumulative Update April 2013 http://support.microsoft.com/kb/2832226
Wie man sehen kann sind bis jetzt alle Updates ab dem ominösen KB2781266 betroffen (auch wenn man dieses auslässt) - wenn jemand hier andere detailliertere Informationen hat - immer her damit - vielleicht schafft es Microsoft ja auch mal etwas zu reparieren (das sie selbst kaputt Hotfixen) - und nicht immer nur ein "No-Go" vom Produktteam weiterzuleiten.
Over and Out
Heute mal etwas aus der Arbeitswelt - wo ich mich doch eher weniger in der OpenSource Welt bewege. Bei einem Kunden gab es ein Problem mit dem einem Outlook-Addin (wohlgemerkt, das ich dieses selber verbrochen habe) - und zwar konnte er seit einigen Wochen keine Inhalte mehr mit diesem auf dem SharePoint Server speichern. Da dieses Outlook-Addin gerne mal Probleme macht, vermutete ich das Problem wie meistens bei den Dateinamen oder den Sonderzeichen in der Überschrift.
Folgende Fehlermeldung präsentierte sich stolz beim Upload-Vorgang: "Fehler beim Ausführen der Operation" ... natürlich kann man mit einer deutschen Fehlermeldung nicht wirklich viel Anfangen - zum Glück gibt es für solche Fälle Dr.Google - und dieser zeigte mir relativ schnell auf, das diesmal der Fehler nicht am Outlook-Addin zu suchen war, sondern Microsoft in Person dieses Problem verbrochen hat.
Auf den ersten Blick scheint der Verursacher (KB-Artikel 2687623) keinerlei Zusammenhang zu meinem Problem zu zeigen. Auch auf den zweiten Blick (detailiertes Lesen des KB) findet man keinerlei Auswirkungsmöglichkeiten. Jedoch kann ich euch versichern das dieser genannte HotFix die SaveAs Methode vom MailItem Objekt des VSTO aufs negativste beeinflusst. Wo genau das Problem liegt, konnte ich bis jetzt nicht wirklich analysieren, jedoch kann ich folgende Festellungen treffen:
Leider kann ich nur den Workaround der Deinstallation anbieten - er hat jedoch bei meinem Kunden einwandfrei funktioniert (bitte den Reboot der Client Maschine nicht vergessen!) - und auch keinerlei negative Seiteneffekte hervorgerufen, da nur folgende "Fehlerbehebungen" in diesem HotFix vorkommen:
Over and Out