Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi mails kontrollieren (https://www.delphipraxis.net/30055-mails-kontrollieren.html)

glkgereon 19. Sep 2004 10:05


mails kontrollieren
 
hi ihrs

ich weiss das es ma ein os/freeware tool gab was geguckt hat ob emails aufm server waren (oder halt nicht)

ich finds aba nit mehr

weiss einer wies geht?
oder findet einer diesen thread wieda?

SirThornberry 19. Sep 2004 10:06

Re: mails kontrollieren
 
wies geht: von den Indys die Pop3-Client-Componente nehmen und mit dem server verbinden. und prüfen ob neue id's im kasten sind

glkgereon 19. Sep 2004 10:10

Re: mails kontrollieren
 
hmm...mein problem ist das ich noch NIE was mit indy gemacht hab...

danke für den tipp, aber könntest dus etwas kleinschrittiger machen?

also ich will zu web.de (pop3.web.de)

also das mit username+pw habbich, aber wo muss pop3.web.de rein, und welcher port?

SirThornberry 19. Sep 2004 10:17

Re: mails kontrollieren
 
such mal nach "idpop3" da gibt es ein paar Beiträge. Die Komponente ist recht simpel zu nutzen. Einfach mit Connect zu dem entsprechenden Server verbinden und dann sind die Methoden von TidPop3 eigentlich selbst erklärend. ansonsten gibt es auch noch eine Hilfe für die Indies, und wenn du an einer bestimmten Stelle nicht weiterkommst meld dich einfach nochmal. Oder du sagst was du konkret willst. Möchstest du nur schauen ob eine neue Mail angekommen ist oder die mails auch abholen und anzeigen etc.?

Sharky 19. Sep 2004 10:18

Re: mails kontrollieren
 
Zitat:

Zitat von glkbkk
..danke für den tipp, aber könntest dus etwas kleinschrittiger machen?...

Hai,
versuche es mal so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  IdPOP31.Disconnect;
  IdPOP31.Host := 'pop3.web.de';
  IdPOP31.Username := 'username';
  IdPOP31.Password := 'passwort';
  IdPOP31.Connect();
end;

procedure TForm1.IdPOP31Connected(Sender: TObject);
var
 mails : Integer;
begin
  mails := IdPOP31.CheckMessages;
  if (mails>0) then
  begin
    ShowMessage(Format ('Es gibt %d neue Nachrichten',[mails]));
  end;
end;

glkgereon 19. Sep 2004 10:29

Re: mails kontrollieren
 
:(

im prinzip funzt es wohl, aber hier gibts einen fehler

Zitat:

mails := IdPOP31.CheckMessages;
das gibt 'WEB.DE' zurück -> kein gültiger integer-wert

und danach kommt noch was von wegen unbekanntes kommanga bei der connect-methode :gruebel:
das kommt auch wenn die login-daten Nicht stimmen...

Sharky 19. Sep 2004 10:36

Re: mails kontrollieren
 
:shock:
Ich hätte den Code wohl testen sollen. Kommt bei mir auch. Ich teste es noch einaml.

SirThornberry 19. Sep 2004 10:42

Re: mails kontrollieren
 
also folgendes funktioniert bei gmx (mail.gmx.net):
Delphi-Quellcode:
var LMsgCount, LCount: Integer;
    LMsg: TIdMessage;
    LItem: TListItem;
begin
  ListView1.Clear;
  IdPOP3.Username := Edit1.Text;
  IdPOP3.Password := Edit2.Text;
  if not IdPOP3.Connected then IdPOP3.Connect(10000);
  LMsgCount := IdPop3.CheckMessages;

  LMsg := TIdMessage.Create(nil);
  for LCount := 0 to LMsgCount - 1 do
  begin
    LMsg.Clear;
    IdPOP3.Retrieve(LCount, LMsg);
    LItem := ListView1.Items.Add;
    LItem.Caption := LMsg.MsgId;
    LItem.SubItems.Add(LMsg.Subject);
    LItem.SubItems.Add(LMsg.From.Address);
    LItem.SubItems.Add(LMsg.ReplyTo.EMailAddresses);
    LItem.SubItems.Add(LMsg.Recipients.EMailAddresses);
  end;
  LMsg.Free;
  IdPOP3.Disconnect;

glkgereon 19. Sep 2004 10:45

Re: mails kontrollieren
 
Zitat:

Gets the number of messages in a mailbox on the POP3 server.

function CheckMessages: longint;

Return Value

LongInt - Number of messages in a mailbox on the POP3 server.

Description

CheckMessages is a LongInt function that returns the total number of messages currently in a mailbox on the POP3 server. CheckMessages performs the POP3 STAT command to retrieve the current message count from the POP3 server.

CheckMessages will return 0 (zero) if an exception is raised during execution of the method. Otherwise, the return vaslue for the method is set to numeric value reurned in the text portion of LastCmdResult.
aus der oh...

WIESO gibt web.de 'WEB.DE' zurück???

kann das irgendwer ma bei gmx, yahoo, netcologne...ausprobieren, was da kommt?

gmx is schon da...

glkgereon 19. Sep 2004 10:47

Re: mails kontrollieren
 
Delphi-Quellcode:
  IdPOP3.Username := Edit1.Text;
  IdPOP3.Password := Edit2.Text;
  if not IdPOP3.Connected then IdPOP3.Connect(10000);
  LMsgCount := IdPop3.CheckMessages;
das is ja das entscheidende..., ich teste mal mit connect(10000)

funzt nicht

SirThornberry 19. Sep 2004 10:49

Re: mails kontrollieren
 
probier mal obs gesamt funktioniert. eventuell darf das ganze einfach nicht im "OnConnected" ausgeführt werden!! Mach einfach alles im Buttonclick-Event

glkgereon 19. Sep 2004 10:52

Re: mails kontrollieren
 
so, das funzt, wenns im buttonclick is....

aber nu will ich ja die NEUEN haben...

muss ich mir dann in ner datei sämtliche ids merken?

SirThornberry 19. Sep 2004 10:59

Re: mails kontrollieren
 
genau, du musst dir die ID's merken um später sagen zu können welche neu sind und welche nicht. Wenn es dir nur darum geht festzustellen ob neue nachrichten da sind kannst du die Methode
UIDL
benutzen. Diese liefert dir alle ID's zurück aus der Mailbox
Zitat:

Retieves the unique-id listing for one or all messages in the mailbox.

function UIDL(const ADest: TStrings; const AMsgNum: Integer): Boolean;

Parameters

const ADest: TStrings

Container for UID values in the listing.

const AMsgNum: Integer = -1

The message number desired, or all messages when the value is -1. Default value is -1.

Returns

Boolean - True on success.

Description

UIDL is a Boolean function used to retrieve the unique-id listing for one or all messages in the POP3 mailbox. When AMsgNum is specified, UIDL will request the UIDL for the specified message number. Otherwise, all message numbers in the mailbox are requested from the POP3 server.

UIDL calls SendCmd with the POP3 UIDL command and the optional message number. When the response code from SendCmd is wsOk, the response values are stored in Dest. Value from the POP3 UIDL command consist of the message number folowed by a space character and the unique-id for the message. The unique-id of a message is an arbitrary server-determined string, consisting of one to 70 characters in the range 0x21 to 0x7E, and uniquely identifies a message within a POP3 mailbox. Messages marked as deleted are not included in a UIDL listing.

glkgereon 19. Sep 2004 11:02

Re: mails kontrollieren
 
supi

aber was wenn ich die abfrage, ne mail lösche, ne neue kommt, kann die dieselbe id haben?

Sharky 19. Sep 2004 11:04

Re: mails kontrollieren
 
Zitat:

Zitat von glkbkk
supi

aber was wenn ich die abfrage, ne mail lösche, ne neue kommt, kann die dieselbe id haben?

Eigentlich sollen die MessageIDs weltweit eindeutig sein.

SirThornberry 19. Sep 2004 11:04

Re: mails kontrollieren
 
die Frage ist mit "NEIN" zu beantworten. Jede EMail hat eine ID welche eindeutig sein sollte deswegen auch die Bezeichnung ID.

[Edit]Mal wieder zu langsam gewesen :cry: [/Edit]

jfheins 19. Sep 2004 11:45

Re: mails kontrollieren
 
Ich glaube, dass es auch deutlich einfacher geht, herauszufinden, wieviele neue E-Mails es gibt.

Ich habe das mal mit PHP gemacht, und eine Funktion geschrieben, welche die Anzahl an ungelesenen E-Mails zurückgibt. Mir würde es sehr wundern, wenn das in Delphi nicht so einfach möglich wäre.
Hier die PHP-Funktion:
Code:
function mailcheck ($server, $protokoll, $username, $passwort, $flag = SA_UNSEEN)
{
 if ($protokoll == "imap")
 {
  $handle = imap_open ("{" . $server . ":143}INBOX", $username, $passwort);
  $daten = imap_status ($handle, "{" . $server . ":143}INBOX", $flag);
  $anzahl = $daten->unseen;
  imap_close ($handle);
  return $anzahl;
 }
 elseif ($protokoll == "pop3")
 {
  $handle = imap_open ("{" . $server . "/pop3:110}INBOX", $username, $passwort);
  $daten = imap_status ($handle, "{" . $server . "/pop3:110}INBOX", $flag);
  $anzahl = $daten->unseen;
  imap_close ($handle);
  return $anzahl;
 }
 else echo "
[b]Fehler in Funktion mailcheck:[/b]
Bitte \"pop3\" oder \"imap\" als Protokoll angeben !

";
}
Wie zu sehen ist, gibt es hier eine Variabe mit Wert "SA_UNSEEN", die bewirkt, dass die ungelesenen E-Mails herausgefiltert werden.

glkgereon 19. Sep 2004 11:49

Re: mails kontrollieren
 
toll, da ich kein php kann hilftmir das so ungefähr 0 weiter...

wie heissen denn die befehle in delphi?

jfheins 19. Sep 2004 12:08

Re: mails kontrollieren
 
Der Punkt ist, dass mit imap_status (gibt's glaub ich auch unter delphi) ein Parameter übergeben wird, welche E-Mails ausgewählt werden sollen.
Probier doch mal Delphi-Referenz durchsuchenimap_status oder ähnliches.
(Wahrscheinlich eher IdIMAP4.status () oder so ...)
Auf jeden Fall was mit Status.

glkgereon 19. Sep 2004 12:11

Re: mails kontrollieren
 
aba ich mach das doch per pop3, und nicht per imap.... :gruebel:

jfheins 19. Sep 2004 12:15

Re: mails kontrollieren
 
sind in PHP die gleichen Funktionen mit nem anderen Port.
sonst guck halt bei pop3 nach ingender funktion mit status im namen

SirThornberry 19. Sep 2004 12:44

Re: mails kontrollieren
 
Es gibt bei Pop3 auch den Vermerk ob eine Mail gelesen oder ungelesen ist. Allerdings muss man den Status (gelesen) dann auch setzen wenn man die mails abgerufen hat sonst sind sie weiterhin ungelesen und manchmal ist es eben nicht gewünscht das eine mail immer gleich als gelesen markiert wird


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 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