Autor Beitrag
OliverN_26
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 252

Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
BeitragVerfasst: Fr 19.08.11 20:07 
Hey.

Ich will meinen Posteingang nach bestimmten Mails durchsuchen. Diese haben eine Excel-Liste im Anhang. Ist es möglich diese Excel-liste z.B. aus dem Anhang heraus in einen Ordner zu speichern, um anschließend die Liste zu laden und zu bearbeiten? Die sich darin befindenen Daten soll anschließend in eine Online Datenbank geschrieben werden.
Mir gehts aber nur um die Anhang-Geschichte.

Vielen Dank im voraus für eure Tips
OliverN_26 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 252

Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
BeitragVerfasst: Sa 20.08.11 08:43 
Hat echt keiner ne Idee?

Im Grunde soll nur der Anhang einer bestimmten eMail in einen anderen Ordner kopiert werden.
Find da einfach keinen Ansatz :-(
haentschman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 285
Erhaltene Danke: 33


DX10 Berlin Professional
BeitragVerfasst: Sa 20.08.11 09:05 
Moin...

forum.delphi-treff.d...iewfull=1#post179871
schau mal da. Mail Anhänge speichern for Runnaways... :lol:
Ansonsten wirft die SuFu mit "Indy Attachment" in allen Foren reichlich raus.
OliverN_26 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 252

Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
BeitragVerfasst: Mo 22.08.11 09:38 
Hallo

Ich hab mal ein wenig probiert und mir was gebastelt.
Ist es möglich das sich mal jemand den Quellcode ansehen kann, ob das so richtig ist, oder ob man das ein oder andere optimieren kann?

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:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
procedure TForm1.Mailsprfen1Click(Sender: TObject);
var
  AnzahlMail,AnzahlAnhang,i,neu : Integer;
  IdMessage1 : TIdMessage;
  Dateiname,Pfad,Zeitstempel : String;
begin
  i   := 0;
  neu := 0;

  // StringGrid initialisieren
  init;

  // Verbindung zum Server herstellen
  POP.Host := 'pop.gmx.net';
  POP.Connect;

  // prüfen ob Attachment-Ordner existiert
  Pfad := ExtractFilePath(ParamStr(0)) + 'Mail-Anhang\';
  if not DirectoryExists(Pfad) then
    CreateDir(Pfad);

  StatusBar1.Panels[0].Text := ' Posteingang wird geprüft ...';
  
  for AnzahlMail := 1 to POP.CheckMessages do begin
    StatusBar1.Panels[1].Text := ' Mail: ' + IntToStr(AnzahlMail) + ' / ' + IntToStr(POP.CheckMessages);
    StatusBar1.Panels[2].Text := ' Gefunden: ' + IntToStr(i);
    Application.ProcessMessages;

    IdMessage1 := TIdMessage.Create(Self);
    POP.Retrieve(AnzahlMail, IdMessage1);
    if IdMessage1.MessageParts.Count > 0 then begin
      for AnzahlAnhang := 0 to IdMessage1.MessageParts.Count - 1 do begin
        if (IdMessage1.MessageParts.Items[AnzahlAnhang] is TIdAttachment) then begin
          Dateiname := TIdAttachment(IdMessage1.MessageParts.Items[AnzahlAnhang]).Filename;
          if (ExtractFileExt(Dateiname) = '.xlsx'or (ExtractFileExt(Dateiname) = '.xls'then begin
            // prüfen ob die Mail bereits abgerufen wurde
            if MsgID_pruefen(IdMessage1.MsgId) then begin
              // Mail-ID speichern um sie als abgerufen zu markieren
              MsgID_schreiben(IdMessage1.MsgId);

              neu := neu + 1;

              Zeitstempel := FormatDateTime('ddmmyyyyhhnnss', Now);
              Pfad := ExtractFilePath(ParamStr(0)) + 'Mail-Anhang\' + Zeitstempel + '_' + Dateiname;

              // Anhang im Attachment-Ordner speichern
              TIdAttachment(IdMessage1.MessageParts.Items[AnzahlAnhang]).SaveToFile(Pfad);
            end;

            i := i + 1;

            StringGrid1.Cells[0,i] := IdMessage1.MsgId;                 // MsgID
            if UploadID_pruefen(IdMessage1.MsgId) then
              StringGrid1.Cells[1,i] := '1';                            // UploadID (ob bereits in die Datenbank geladen wurde)
            StringGrid1.Cells[3,i] := DateToStr(IdMessage1.Date);       // Datum
            StringGrid1.Cells[4,i] := UTF8ToAnsi(IdMessage1.Subject);   // Betreff
            StringGrid1.Cells[5,i] := UTF8ToAnsi(IdMessage1.From.Text); // Absender
            StringGrid1.Cells[6,i] := Dateiname;                        // Dateiname
          end;
        end;
      end;
    end;
    IdMessage1.Free;
  end;

  if i > 0 then begin
    SetHeader;
    AutoSetAnzeige(StringGrid1);
  end;

  if neu = 1 then
    StatusBar1.Panels[0].Text := IntToStr(neu) + ' neue Meldung'
  else
    StatusBar1.Panels[0].Text := IntToStr(neu) + ' neue Meldungen';
  StatusBar1.Panels[1].Text := '';
  StatusBar1.Panels[2].Text := '';

  // Verbindung zum Server trennen
  POP.Disconnect;
end;


Vielen Dank

lg
Oli