Entwickler-Ecke

Sonstiges (Delphi) - Outlook mit mehreren Anhängen öffnen


Eagle-Data - Di 14.12.04 16:17
Titel: Outlook mit mehreren Anhängen öffnen
Hi, ich will aus meinem Programm raus, Outlook (2003) mit mehreren Dateien als Anhang öffnen.

Leider bekomm ich das nur mit einer Datei hin:

Outlook.exe mit Parameter /a "FILE" starten


Quelltext
1:
ShellExecute(self.Handle,'open',PChar(pfad),PChar(param),nil,SW_SHOW);                    


wobei pfad, der pfad zu outlook.exe und param /a und der Dateiname ist.

Wie kann ich mehrere Dateien hinzufügen? Mit mehreren /a´s gehts nicht.

Danke


neojones - Di 14.12.04 16:27

Mit OLE!

Als MailAction "Display" übergeben, MailTo der Empfänger, MailBody der Body als String mit Umbrüchen via #13.



Delphi-Quelltext
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:
procedure MakeAppendMail(MailTo, MailSubject, MailAction, MailBody: String;MailAttach: array of String);
var Outlook: OLEVariant;
    MailItem: Variant;
    X: Integer;
begin
     // Eine eMail in Outlook generieren und die Daten aus einem Verzeichnis anhängen
     // Das Verzeichnis, aus dem die Dateien ausgelesen werden sollen, wird im Parameter "MailAttach" übergeben
     // Zur Nutzung dieser Funktion muss der Outlook-Client
     // bereits laufen!
     try
        Outlook := GetActiveOleObject('Outlook.Application');
     except
           try
              Outlook:=CreateOleObject('Outlook.Application');
           except
                 ShowMessage('Fehler! Outlook ist weder geöffnet noch konnte es gestartet werden!');
                 VarClear(Outlook);
                 exit;
           end;
     end;

     MailItem := Outlook.CreateItem(0);
     MailItem.Subject := MailSubject;
     MailItem.To := MailTo;

     MailItem.Body := '';

     // MailBody auflösen und in einen String schreiben
     MailItem.Body := MailBody;

     MailItem.Display;

     If Length(MailAttach) > 0 then begin
        For X := 0 to Length(MailAttach)-1 do begin
            If FileExists(MailAttach[X]) = True then begin
               If FileExists(copy(MailAttach[X],0,length(MailAttach[X])-4) + '_1.pdf'then begin
                  MailItem.Attachments.Add(copy(MailAttach[X],0,length(MailAttach[X])-4) + '_1.pdf');
               end else begin
                   MailItem.Attachments.Add(MailAttach[X]);
               end;
            end else begin
               ShowMessage('Die Datei ' + MaiLAttach[X] + ' kann nicht angehängt werden, da sie nicht existiert!');
            end;
        end;
     end;

     If MailAction = 'Display' then begin
        MailItem.Display;
     end;

     If MailAction = 'Send' then begin
        MailItem.Send;
     end;

     Outlook := Unassigned;
end;



Etwas dilletantisch geproggt.

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.


Eagle-Data - Di 14.12.04 18:08

Das nützt mir nichts. Ich möchte ja die Mail nicht direkt versenden, sondern das sich Outlook mit der neuen Mail öffnet und ich dann Empfänger und alles andere eintippen kann.

Es muss doch irgendwie gehen das ich mehrere Dateien hinzufüge.


neojones - Di 14.12.04 18:44

Ja, es geht: Les Dir mal durch was ich geschrieben hab!

Mit Display öffnet er die Mail, Body und Empfänger kannst leer lassen dann kann der User das selbst eintragen.

Viele Grüße,

Matthias


Eagle-Data - Mi 15.12.04 10:28

Hmm ok wer lesen kann ist klar im Vorteil :wink:

Nur bekomm ich jetzt eine Zugriffsverletzung wenn ich die Procedure aufrufe:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var attach:array of string;
...
for i:=1 to paramcount do
    attach[i-1]:=paramstr(i);

MakeAppendMail('','','Display','',attach);


Wo liegt mein Fehler?


Eagle-Data - Mi 15.12.04 10:39
Titel: Problem gelöst
Ok ich habs.

es fehlte eine entscheidene Zeile:


Delphi-Quelltext
1:
SetLength(attach,paramcount);                    


noctua - So 19.12.04 15:32
Titel: Re: Outlook mit mehreren Anhängen öffnen
Eagle-Data hat folgendes geschrieben:

Leider bekomm ich das nur mit einer Datei hin:

Outlook.exe mit Parameter /a "FILE" starten


Quelltext
1:
ShellExecute(self.Handle,'open',PChar(pfad),PChar(param),nil,SW_SHOW);                    


wobei pfad, der pfad zu outlook.exe und param /a und der Dateiname ist.



ich bekomme es nicht ma mit einer Datei hin ....


Quelltext
1:
  ShellExecute(Application.Handle,'open',PChar('mailto:peter@web.de?subject=Betreff&body=lalalalalala'),PChar('D:\text.txt'),nil,sw_ShowNormal);                    


das müsste doch eigentlich gehen oder?