Autor Beitrag
Eagle-Data
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

WinXP SP2 (Pro), Win 2000
D5 Ent., D7 Ent.
BeitragVerfasst: Di 14.12.04 16:17 
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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1206
Erhaltene Danke: 1



BeitragVerfasst: 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.


ausblenden volle Höhe 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.

_________________
Ha! Es compiliert! Wir können ausliefern!
Eagle-Data Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

WinXP SP2 (Pro), Win 2000
D5 Ent., D7 Ent.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1206
Erhaltene Danke: 1



BeitragVerfasst: 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

_________________
Ha! Es compiliert! Wir können ausliefern!
Eagle-Data Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

WinXP SP2 (Pro), Win 2000
D5 Ent., D7 Ent.
BeitragVerfasst: 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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

WinXP SP2 (Pro), Win 2000
D5 Ent., D7 Ent.
BeitragVerfasst: Mi 15.12.04 10:39 
Titel: Problem gelöst
Ok ich habs.

es fehlte eine entscheidene Zeile:

ausblenden Delphi-Quelltext
1:
SetLength(attach,paramcount);					
noctua
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 170



BeitragVerfasst: So 19.12.04 15:32 
Eagle-Data hat folgendes geschrieben:

Leider bekomm ich das nur mit einer Datei hin:

Outlook.exe mit Parameter /a "FILE" starten

ausblenden 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 ....

ausblenden 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?

_________________
Am ende sterben eh alle ................