Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Outlook: Email mit Signatur erstellen (https://www.delphipraxis.net/129260-outlook-email-mit-signatur-erstellen.html)

Keldorn 15. Feb 2009 20:15


Outlook: Email mit Signatur erstellen
 
Hallo,

ich versuche verzweifelt, eine Email in Outlook zuerstellen, bei der die eingestellte Signatur mit drangehangen wird.
Solange ich keinen Text einfüge, ist die Signatur in der Mail drin, sobald ich einen Text per body setze, ist sie weg.
Frage ich htmlbody ab, steht vor item.display aber auch keine Signatur drin. In einem VB-Forum habe ich irgendwo gefunden, man solle mal vorher "getinspector" aufrufen -> ok, dann habe ich die Signatur im htmlbody stehen, aber ändern kann ich sie nicht, jegliches schreiben des htmlbody führt zu einer Exception "unzulässige Funktion" und wenn auch genau das Ausgelesene zurückgeschreiben wird ...

Mein code sieht bisher so aus:

Delphi-Quellcode:
Var FOutlookApplication: Variant;
    FMailitem:Olevariant;
...
    FOutlookApplication := CreateOleObject('Outlook.Application');
    try
      Emailtext:='hier steht ein Text';

      FMailitem := FOutlookApplication.CreateItem(olMailItem);
      FMailitem.subject := 'Betreff';
      FMailitem.ReadReceiptRequested := true;
      FMailitem.Recipients.Add('Test@irgendwas.de');

      FMailitem.BodyFormat := olFormatHTML;
      FMailitem.getinspector;
      showmessage(FMailitem.htmlbody);

      s:=FMailitem.htmlbody;
      FMailitem.HtmlBody := s; //führt zu unzulässige Funktion ???????????

      FMailitem.display;
Hat jemand eine Idee, wie ich Text und Signatur in die Mail bekomme ?

Viele Grüße Frank

toms 20. Feb 2009 02:09

Re: Outlook: Email mit Signatur erstellen
 
Hallo Frank

Leider ist deinem Beitrag nicht zu entnehmen, um was für eine Outlook Version es sich handelt.
Habe den Code unter Outlook 2003 getestet. Funktioniert ohne Probleme.

Mein ausführbarer Code, falls ihn jemand noch mit einer anderen Outlook Version testen mag.

Delphi-Quellcode:
uses
  ComObj;

var
  FOutlookApplication: Variant;
  FMailitem: OleVariant;

procedure TForm1.Button1Click(Sender: TObject);
const
  olMailItem = 0;
  olFormatHTML = $00000002;
var
  s, Emailtext: string;
begin
  FOutlookApplication := CreateOleObject('Outlook.Application');
  Emailtext := 'hier steht ein Text';
  FMailitem := FOutlookApplication.CreateItem(olMailItem);
  FMailitem.subject := 'Betreff';
  FMailitem.ReadReceiptRequested := true;
  FMailitem.Recipients.Add('Test@irgendwas.de');

  FMailitem.BodyFormat := olFormatHTML;
  FMailitem.getinspector;
  showmessage(FMailitem.htmlbody);

  s := FMailitem.htmlbody;
  FMailitem.HtmlBody := '[b]Tes[/b]t';
  FMailitem.display;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FMailitem := Unassigned;
  FOutlookApplication.Quit;
  FOutlookApplication := Unassigned;
end;

Keldorn 21. Feb 2009 13:48

Re: Outlook: Email mit Signatur erstellen
 
Hallo Toms,

ich verwende hier zu Hause Office 2003 SP3. Welches SP hast Du? Wenn Du die Mail erstellst, kommt da auch bei Dir der Sicherheitshinweis, daß "ein Programm versucht, auf die im Outllok gespeicherten Adressen zuzugreifen ..." ?

Die Outlook-Version hatte ich nicht mitangeben, weil ich nicht weiß, welche Version wir dort einsetzen, wo das Programm laufen soll.

Aber ich erhalte nachwievor die Exception "unzulässige Funktion". Ich meine ok, der Text wird gesetzt, und mit einem Try-except würde ich ihn im richtigen Programm auch nicht sehen, aber das ist irgendwie nicht die sauberste Lösung.

Gruß Frank

toms 21. Feb 2009 14:46

Re: Outlook: Email mit Signatur erstellen
 
Ich habe auch Office 2003 SP3. Verwendest du evtl. MS Word als E-Mail Editor?

Keldorn 21. Feb 2009 16:26

Re: Outlook: Email mit Signatur erstellen
 
Zitat:

Zitat von toms
Verwendest du evtl. MS Word als E-Mail Editor?

ich könnte heulen: ja, tue ich. Wenn ichs deaktiviere, gehts natürlich, Danke für den Tipp. Das habe ich aber auch überhaupt nicht in Betracht gezogen.

Nun kann ich den Body auch um meinen Text ergänzen.

Hast du eine ahnung, warum es nicht mit Word als Emaileditor geht? Im prinzip stehe ich genau wieder am Anfang, ich kann fremde Anwender ja nicht zwingen, dies zu deaktiveren

toms 21. Feb 2009 17:02

Re: Outlook: Email mit Signatur erstellen
 
Ich denke man muss überprüfen, ob EditorType = olEditorWord und dann anders vorgehen.
Habe dazu folgende Links gefunden:

http://www.developersdex.com/vb/mess...1967&r=6542011
http://www.outlookcode.com/codedetail.aspx?id=455


Auch mal probieren könntest du folgendes:

Delphi-Quellcode:
FMailitem.HtmlBody := '<HTML><H2>My HTML page.</H2><BODY>My body.</BODY></HTML>';
Kommt der Fehler dann noch?

Keldorn 22. Feb 2009 10:02

Re: Outlook: Email mit Signatur erstellen
 
Zitat:

Zitat von toms
Auch mal probieren könntest du folgendes:

Delphi-Quellcode:
FMailitem.HtmlBody := '<HTML><H2>My HTML page.</H2><BODY>My body.</BODY></HTML>';
Kommt der Fehler dann noch?

ja, FMailitem.HtmlBody :=FMailitem.HtmlBody geht ja auch nicht, jedes setzen fürt zur Exception.

aber der 2.Link hat mir sehr weitergeholfen, mir war auch nicht klar, daß ich mit objDoc = objInsp.WordEditor Zugriff auf "Word" bekomme, das eröffnet einen ja ganz neue Welten ;-).

anhand des 2. Links sieht mein Code nun so aus und funktioniert :-):
Delphi-Quellcode:
uses ComObj,outlookXP (outlook2000)

procedure Proc_OutlookEmailErstellen(const EmailTextHTML,Betreff,EmpfaengerAN:string;const LesebestaetigungAnfordern:boolean);
//Quellen:
//http://www.delphipraxis.net/topic152179_outlook+email+mit+signatur+erstellen.html
//http://www.outlookcode.com/codedetail.aspx?id=455
Var OutlookApplication: Variant;
    Mailitem,ObjectInspector,WordEditor: OleVariant;
    s:string;
begin
  OutlookApplication := CreateOleObject('Outlook.Application');
  try
    Mailitem := OutlookApplication.CreateItem(olMailItem);
    try
      Mailitem.subject := Betreff;
      Mailitem.ReadReceiptRequested := LesebestaetigungAnfordern;
      Mailitem.Recipients.Add(EmpfaengerAN);
      Mailitem.BodyFormat := olFormatHTML;
      //Mit Aufruf von Getinspector enthält die Mail nun die Signatur
      ObjectInspector := Mailitem.getinspector;

      //Feststellen, ob Word als EmailEditor verwendet wird
      //Email text vor einer evtl. vorhandenen Signatur einfügen
      If ObjectInspector.EditorType = olEditorWord Then
        begin
          WordEditor := ObjectInspector.WordEditor;
          WordEditor.Characters.item(1).InsertBefore(EmailTextHTML);
        end
       else
        begin
          Mailitem.HtmlBody := StringReplace(Mailitem.HtmlBody,
                                             '<body>',
                                             '<body>'+EmailTextHTML,
                                             [rfReplaceAll,rfIgnoreCase]);
        end;

      //Mail anzeigen, anwender kann sie noch bearbeiten und selber versenden
      Mailitem.display;
    finally
      Mailitem := Unassigned;
    end;
  finally
    OutlookApplication := Unassigned;
  end;

end;

procedure TForm3.Button1Click(Sender: TObject);
begin
  //Formatierung ist nur möglich, wenn nicht Word als EmailEditor eingesetzt wird.
  Proc_OutlookEmailErstellen('Dies ist ein <u>Test</u> und hier steht dein Text',
                             'TestBetreff',
                             'Test@irgendwas.de; [email]Test2@irgendwas.de[/email]',
                             true);
end;
lediglich, wenn Word verwendet wird, wird die Formatierung nicht übernommen, müßte man wahrscheinlich komplett alleine formatieren. Aber das ist mir momentan egal, das benötige ich nicht, ein normaler Text reicht mir.

Danke, hast mir sehr geholfen

Gruß Frank

toms 22. Feb 2009 10:28

Re: Outlook: Email mit Signatur erstellen
 
Es gibt wahrscheinlich keine andere Möglichkeit als mit InsertFile einen HTML oder RTF formatierten Text hinzuzufügen.
(Siehe http://www.access-programmers.co.uk/...d.php?t=145301)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz