Wenn ich ein Attachment mit der ExtendedMAPI Library von IMI (imibo.com) versenden möchte, passieren seltsame Fehler.
Zum einen wird der Name des Attachments nicht richtig angezeigt. Bei Outlook wird kein Name angezeigt, aber durch Doppelklick offenbart sich der erste Buchstabe des Namens.
Speichern kann man diese Datei auch nicht (Dieses Verzeichnis existiert nicht).
Den Teil des Codes habe ich aus offiziellem Code kopiert und entsprechend für Delphi umgeschrieben:
(Die Datei ist hier zum Test noch virtuell, möchte es erst dann richtig machen, wenns auch tut...)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85:
| procedure AttachFile; var pAttachment : IAttach; rgpropsAttch : array [0..2] of TSPropValue; ulAttachNum : ULONG; hr : HRESULT; wcsAttachmentName : string; dwFileSize: integer; ulStatus : integer; pstmAttachment : IStream; szBuf : string; Demoname: WChar; begin pAttachment := Nil;
wcsAttachmentName := 'test.txt';
ulStatus := MSGSTATUS_RECTYPE_SMTP; pstmAttachment := nil; szBuf := 'Hallo, Demo';
dwFileSize := Length(szBuf)+1; hr := MAPIMessage.CreateAttach(Nil, 0, ulAttachNum, pAttachment);
if Failed(hr) then begin ShowMessage('Fehler CreateAttachment'); Exit; end;
ZeroMemory(@rgpropsAttch,SizeOf(rgpropsAttch));
rgpropsAttch[0].ulPropTag := PR_ATTACH_FILENAME; rgpropsAttch[0].Value.lpszA := PChar(wcsAttachmentName);
rgpropsAttch[0].Value.lpszW := 'Demoname UTF'; rgpropsAttch[1].ulPropTag := PR_ATTACH_SIZE; rgpropsAttch[1].Value.ul := dwFileSize;
rgpropsAttch[2].ulPropTag := PR_MSG_STATUS; rgpropsAttch[2].Value.ul := ulStatus;
hr := pAttachment.SetProps(1, @rgpropsAttch, PSPropProblemArray(Nil^));
if Failed(hr) then begin ShowMessage('Fehler CreateAttachment SetProps'); Exit; end;
hr := pAttachment.OpenProperty(PR_ATTACH_DATA_BIN, @IID_IStream, STGM_WRITE, MAPI_CREATE or MAPI_MODIFY or MAPI_DEFERRED_ERRORS, IUnknown(pstmAttachment)); if Failed(hr) then begin ShowMessage('Fehler CreateAttachment OpenProperty'); Exit; end;
hr := pstmAttachment.Write(PChar(szBuf), 5, Nil); if Failed(hr) then begin ShowMessage('Fehler CreateAttachment Write Buf'); Exit; end;
hr := pstmAttachment.Commit(STGC_DEFAULT); if Failed(hr) then begin ShowMessage('Fehler CreateAttachment Commit'); Exit; end;
hr := pAttachment.SaveChanges(KEEP_OPEN_READWRITE);
pAttachment := nil; pstmAttachment := nil; end; |
Da ich eigentlich nie was mit Windows mach, fällt mir der Fehler sicher nur nicht auf, aber vielleicht sieht jemand von euch den Fehler?
Übrigens: Welchen Wert hat MSGSTATUS_RECTYPE_SMTP ? Ich konnte das bisher nicht ermitteln.
Ebenso ist mir unklar, die ich UTF-Text als Dateinamen verwenden kann. Mache ich 'T'+#0+'e'+#0+'s'+#0+'t'+#0 passiert genau das gleiche wie bei 'Test', es wird auch nur der erste Buchstabe (T in diesem Fall) angezeigt.