Startseite ¦  was ist neu ¦  programmier tips ¦  indy artikel ¦  intraweb artikel ¦  informationen ¦  links ¦  interviews ¦  sonstiges
kylix ¦  tutorials ¦  online shop ¦  fotos ¦  Add&Win Gewinnspiel


Willkommen Gast. Bitte einloggen oder registrieren.
21.05.2012, 12:36:42
Übersicht Hilfe Suche Einloggen Registrieren

+  SwissDelphiCenter Forum
|-+  German Forums
| |-+  Internet / LAN Forum
| | |-+  !!! betreff: fwd !!!
« vorheriges nächstes »
Seiten: [1] Drucken
Autor Thema: !!! betreff: fwd !!!  (Gelesen 1428 mal)
Waescher
Gast
« am: 31.10.2002, 19:46:18 »

hey leute, ich bins mal wieder:
ich hab ne neue, ich find ziemlich praktische, idee. und zwar ein programm, das alle emails automatisch löscht, deren betreff mit fwd anfangen.
naja, so neu ist die idee nicht, hab die frage hier schon mal gestellt aber keine antwort bekommen!
ich würde ein paar codes bevorzugen, keine indirekten tipps weil ich mit programmiersächelchen im netz nich gut auskenn!
danke schon mal im voraus!
mfg - wäscher!
Gespeichert
pierro
Jr. Member
**
Offline Offline

Beiträge: 52



« Antworten #1 am: 06.11.2002, 19:14:38 »

Zitat
naja, so neu ist die idee nicht, hab die frage hier schon mal gestellt aber keine antwort bekommen!

Warum wohl?

Zitat
ich würde ein paar codes bevorzugen, keine indirekten tipps weil ich mit programmiersächelchen im netz nich gut auskenn!

Darum!

Du, wir erledigen hier nicht deine Arbeit.
Anleiten ja, aber coden nicht.

Vielleicht kennst du dich ja irgendwann auch mal mit "Programmiersächelchen" aus,
aber erst, wenn du dich öfters dort reingekniet hast.

Von nix kommt nix !

Das einzige, was du bekommen wirst, ist etwas Hilfe.

Doch bevor ich dich hier hängen lasse, bringen dich die folgenden Fragen vielleicht voran:

- Wo sind die eMails gespeichert?
(bspw. im Programm oder auf dem Server)

- Wie kommt man an die Anwendung heran, um eine eMail-Liste zu erhalten und den Befehl "löschen" zu senden?
(bspw. Outlook -] OleAutomation, Outlook Express -] unmöglich, stattdessen direktes Arbeiten im Dateiformat *.dbx)

Mach dir erstmal darum einen Kopf, bevor du überhaupt anfängst.
Gute Planung ist die beste Voraussetzung für stabile Programme.

pierro
Gespeichert



Und niemand, weder im Himmel, noch auf der Erde, noch unter der Erde, vermochte das Buch aufzuschlagen, noch es zu erblicken. (Joh 5.3) Für den Wiederbekehrten:  http://www.hjp.ch/texte/
MrSaint
Sr. Member
****
Offline Offline

Beiträge: 472



WWW
« Antworten #2 am: 06.11.2002, 19:28:34 »

@pierro: also so hart sind wir ja nun auch ich hier, oder? also wenn er etwas code bevorzugt, dann kann man ihm den ja geben. es ist ja nicht jeder im Forum hier so ein Könner, wie du es vielleicht einer bist. Es gibt auch genug Anfänger. Und wie lernt man solche Sachen am besten? indem man Tutorials oder ähnliches liest und (!!) einen Code nebendran liegen hat, mit dem man das vergleichen kann, was in dem tut steht. Oft sind so tuts nämlich verdammt trocken... Wir machen ihm bestimmt nicht die komplette arbeit, aber wenn er code bevorzugt, wieso nicht? ist doch kein problem so ein Codeschnipsel (sofern man mit dem Thema klar kommt, natürlich...)!!!


MfG

MrSaint
Gespeichert

Follow the reaper and keep on rocking ;)
Waescher
Gast
« Antworten #3 am: 09.11.2002, 21:07:55 »

ja danke, saint!
stimmt zwar schon was pierro sagt, aber ich hab euch nie gebeten meine 'arbeit' zu machen. ich programmier nur deswegen (wie ihr wohl alle) gern, weil ich neue sachen versuchen will und auch selber coden - versteht sich. natürlich könnte man eure codes in ein proramm einbinden und einen eigenen namen dranhängen! aber das sind wohl keine programmierer oder solche, die es mal werden wollen oder auch nur so mal hobbymässig programmieren!
ich will da auch selber reinknien, aber ich würd mir halt schon viel leichter tun, wenn ich etwas hätt aus dem ich bestimmte prozeduren rauslesen und dann vielleicht auch selber drauf aufbauen kann. muss ja nix komplettes sein, nur einzelne 'fetzen' wie saint sagt würden ja schon vollkommen ausreichen.
aber ich hab nie jemand gebeten n komplettes programm für mich zu schreiben. so freewareversionen gibts bestimmt auch schon oder spamfilter - käme für mich doch dann aufs gleich raus eine solche downzuloaden!

mfG - Wäscher
Gespeichert
Jailbird
Hero Member
*****
Offline Offline

Beiträge: 1866

34030132 jailbird_24@hotmail.com
WWW
« Antworten #4 am: 09.11.2002, 22:11:31 »

ich öffne (zwar sehr ungerne) ein tor. dieser schnippsel aus einem meiner tools dient der abfrage und behandlung von mails. wahrscheinlich wird nicht ganz alles klar sein, aber mich wurmt's an, alles zusammenzusuchen. wenn du fragen hast, dann stell sie bitte relativ exakt....ach ja...

uses MAPI;

Code:
 if MAPILogOn(0, pChar(Benutzername), pChar(Passwort), 0, 0, @Session) = SUCCESS_SUCCESS then

  begin



Hier wird Platz für einen String geschaufelt. Richtig, die nächsten 3 Variabeln sind Pointer, also Zeiger auf den String. Gerade deshalb wird der Speicherbereich mit Nullen überschrieben (FillChar)

    MessageID := StrAlloc(65536);

    SeedMessageID := StrAlloc(65536);

    Storage := StrAlloc(65536);

    FillChar(MessageID^, 65536, 0);

    FillChar(SeedMessageID^, 65536, 0);

    FillChar(Storage^, 65536, 0);



Jetzt aber rein in die Mails. Die Items werden der Reihe nach ausgelesen und in der MessageID bzw. der SeedMessageID gespeichert.

    while MAPIFindNext(Session, 0, nil, SeedMessageID, 0, 0, @MessageID^) = SUCCESS_SUCCESS do

    begin



Hier wird diese ID nochmals kopiert. Grund dafür ist ein Löschen des Mails. Dies hätte zur Folge, dass der Zeiger eine Zeile zu weit unten wäre und ein Item auslassen würde. Im Vergleich mit Excel könnte man sagen, dass z.B. Zeile 4 gelöscht wird, die Zeile 5 auf die Position 4 rückt, aber beim nächsten Durchlauf auf die Zeile 5 geguckt wird. Dies wird hiermit verhindert.

      StrCopy(Storage, SeedMessageID);



Hier werden SeedMessageID und MessageID abgeglichen, da bei der Zuweisung MAPIFindNext nur die eine Message aktualisiert wird. Die andere gibt quasi die letzte Position an.

      if StrComp(SeedMessageID, MessageID) = 0 then break else StrCopy(SeedMessageID, MessageID);



So, nun lies mir mal das Mail in ein Mailitem ein

      if MAPIReadMail(Session, 0, MessageID, MAPI_PEEK, 0, MAPIMsg) = SUCCESS_SUCCESS then

      begin



Falls es ein Mail ist, dann soll er doch mal das Datum auslesen und die / durch . ersetzen

        MailDatum := StringReplace(MAPIMsg.lpszDateReceived, '/', '.', [rfReplaceAll]);

        Delete(MailDatum, 11, Length(MailDatum)); Schnippselt die Zeit vorne weg

        Temp1 := Copy(MailDatum, 1, 4); Jahr

        Temp2 := Copy(MailDatum, 6, 2); Monat

        Temp3 := Copy(MailDatum, 9, 2); Tag

        MailDatum := Temp3 + '.' + Temp2 + '.' + Temp1;Anders rum zusammensetzen



Ist das Maildatum das Gleiche wie am Anfang ausgewählt wurde?

        if MailDatum = DateToStr(Form7.Datum.Date) then

        begin



Wenn ja, überprüfen wir den Absender (in einer Schleife)

          for m := 0 to (Length(Senders) - 1) do

          begin



Ist der Absender in unserer Liste und der im Mail der gleiche?

            if UpperCase(Senders[m]) = UpperCase(MAPIMsg.lpOriginator.lpszName) then

            begin







Ja, dann sag mal, wie der Betreff lautet (alles in Grossbuchstaben, wie schon bei dem Absender)

              Subject := UpperCase(MAPIMsg.lpszSubject);



Kommt im Betreff ein gutes Wort vor (Successful oder so)

              for k := 0 to (Length(GoodWords) - 1) do

              begin



Geh durch mein Array und prüfe, ob das Wort im Betreff vorkommt

                if Pos(UpperCase(GoodWords[k]), Subject) > 0 then

                begin



Ja, das Wort ist vorhanden, nun sag mir, die wie vielte Ampel von links dem Server gehört.

                  for l := 0 to (Length(ServerList) - 1) do

                  begin

                    if Pos(UpperCase(ServerList[l]), Subject) > 0 then

                    begin



Hat ihn schon. Also lade mir da eine grüne Ampel rein

                      Komp := FindComponent('Image' + IntToStr(l));

                      if Komp <> nil then

                      begin

                        TImage(Komp).Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Datagrün.bmp');



Der Server wurde bearbeitet und ist i.O, also soll er nicht mehr blinken

                        StatusList[l] := True;

                      end;



Da erfolgreich, darf das Mail gelöscht werden und der Serverstatus wird auf erfolgreich gesetzt und das Mailitem abgeschlossen (break)

                      CanDelete := True;

                      ServerStatus[l] := 2;

                      break;

                    end;



Die beiden Application.ProcessMessages; bewirken nur, dass das Programm nicht einfriert.

                    Application.ProcessMessages;

                  end;

                end;

                Application.ProcessMessages;

              end;



Nun sind die schlechten Wörter dran. Alles ist gleich wie oben, nur wird das Mail nicht gelöscht und eine gelbe Ampel geladen.

              for k := 0 to (Length(BadWords) - 1) do

              begin

                if Pos(UpperCase(BadWords[k]), Subject) > 0 then

                begin

                  for l := 0 to (Length(ServerList) - 1) do

                  begin

                    if Pos(UpperCase(ServerList[l]), Subject) > 0 then

                    begin

                      Komp := FindComponent('Image' + IntToStr(l));

                      if Komp <> nil then

                      begin

                        TImage(Komp).Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Datagelb.bmp');

                        StatusList[l] := True;

                      end;

                      ServerStatus[l] := 0;

                      break;

                    end;

                    Application.ProcessMessages;

                  end;

                end;

                Application.ProcessMessages;

              end;



Nach all den Schleifen mit den guten und schlechten Wörtern wird geprüft, ob das Mail gelöscht werden kann. Wenn ja, wird das vorgenommen und die SeedMessageID wird um eine Zeile zurückgesetzt (damit kein Item übersprungen wird)

              if CanDelete = True then

              begin

                MAPIDeleteMail(Session, 0, MessageID, 0, 0);

                StrCopy(SeedMessageID, Storage);

                CanDelete := False;

              end;

              break;

            end;

            Application.ProcessMessages;

          end;

        end;

      end;

      Application.ProcessMessages;

    end;



Hier wird der reservierte Speicherplatz für die MessageIDs freigegeben. Korrekterweise müsste hier wohl auch noch StrDispose(Storage); stehen.

    StrDispose(MessageID);

    StrDispose(SeedMessageID);    



Falls aber der Login beim Exchange fehlgeschlagen ist, soll er es nochmals versuchen, sofern er es nicht schon 10 probiert hat. Dann soll er nachfragen, ob er nochmals 10 Versuche wagen soll.

  end else begin

    Inc(TryCount);

    if TryCount >= 10 then

    begin

      if MessageDlg('10 Versuche die Mails einzulesen scheiterten!' + #13#10 + #13#10 + 'Möchten Sie es weitere 10 Mal versuchen?', mtWarning, [mbYes, mbNo], 0) = mrYes then

      begin

        TryCount := 0;

        GetBackupStatus;

      end;

    end;

  end;
Gespeichert

Seiten: [1] Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS