Ich verwende OLE zum Senden von E-Mails über Outlook. Der Code Ich verwende ist:Senden von E-Mails über Outlook und OLE problemlos
procedure SendOutlookMail;
const
olMailItem = 0;
var
OKToUse: boolean;
Outlook: OleVariant;
vMailItem: variant;
begin
OKToUse := false;
try
Outlook := GetActiveOleObject('Outlook.Application');
OKToUse := true;
except
try
Outlook := CreateOleObject('Outlook.Application');
OKToUse := true;
except
on e: exception do begin
ShowMessage(e.Message);
end;
end;
end;
if VarIsType(Outlook, varDispatch) then
ShowMessage('Outlook is varDispatch')
else
ShowMessage('Outlook is ***NOT*** varDispatch');
if OKToUse then begin
vMailItem := Outlook.CreateItem(olMailItem);
vMailItem.Recipients.Add('[email protected]');
vMailItem.Subject := 'What a wonderful test email';
vMailItem.Body := 'This is a test --> how amazing';
vMailItem.Send;
end;
VarClear(Outlook);
end;
die sich von ein paar verschiedenen SO Fragen schamlos geklaut wurde - Dank an alle.
Das Problem, das ich mit dem Code habe, ist, wenn Outlook auf dem PC installiert ist, aber geschlossen ist. Wenn Outlook geöffnet ist, erhalte ich ein Meldungsfeld mit der Nachricht "Outlook ist varDispatch" und eine E-Mail-Nachricht wird gesendet und empfangen. Wenn Outlook geschlossen ist, bekomme ich die gleiche Meldung "Outlook ist VarDispatch", aber dann "Ein Fehler ist in der Anwendung aufgetreten" und meine Anwendung schließt abrupt.
So zwei Fragen:
1) Wie kann ich erkennen, wenn Outlook ausgeführt wird? Die Tatsache, dass OKToUse auf wahr gesetzt wird, scheint nicht der richtige Weg zu sein.
2) Wie starte ich Outlook, wenn es nicht ausgeführt wird, und schließe es, nachdem eine E-Mail gesendet wurde?
Ich verwende Delphi 10.1 Berlin und zu versuchen, Outlook 2007
Wenn 'GetActiveOleObject()' erfolgreich ist, es ist offensichtlich offen zu verbinden. Setzen Sie einen anderen 'Boolean', der dies anzeigt. Ansonsten, machen Sie es "Falsch". Wenn Sie 'CreateOleObject()' verwenden müssen, muss es geöffnet werden, und das scheint fehlzuschlagen. Müssen Sie vielleicht zuerst einige Eigenschaften festlegen, bevor Sie sie verwenden können? –
Warum verwenden Sie nicht die COM-Server-Wrapper-Komponente? –
Eine Down-Abstimmung? Wofür? Dieser Ort ist manchmal zu schwierig :( –