Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

imap-Funktionen von PHP: Wie wirklichen Empfänger finden?

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 05.02.2005, 22:04

Ich habe heute mittag ein wenig mit den imap_* Funktionen von PHP herumgespielt.

Nun habe ich beispielhaft den Fall dass ich an einen Catchall-Account verschiedene Newsletter mit je passender eigener Adresse (abakus-newsletter@example.org) schicke und diese per php auslesen und in eine Datenbank speisen will.

Wenn ich nun hier folgendes mache

Code: Alles auswählen

$headers = imap_header($mbox,$i);
echo $headers->to[0]->mailbox.", ";
echo $headers->to&#91;0&#93;->host."<br />\n";
bekomme ich leider den host und die mailbox die der Absender als Empfänger eingegeben hatte, also meist einen Verteiler oder eine sinnlose Adresse.

Wie komme ich an die abakus-newsletter@example.org an die der Newsletter effektiv ausgeliefert wurde?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Outman
PostRank 6
PostRank 6
Beiträge: 394
Registriert: 03.12.2004, 22:55
Wohnort: Orlamünde

Beitrag von Outman » 06.03.2005, 12:29

Southmedia hat geschrieben:Ich habe heute mittag ein wenig mit den imap_* Funktionen von PHP herumgespielt.

Nun habe ich beispielhaft den Fall dass ich an einen Catchall-Account verschiedene Newsletter mit je passender eigener Adresse (abakus-newsletter@example.org) schicke und diese per php auslesen und in eine Datenbank speisen will.

Wenn ich nun hier folgendes mache

Code: Alles auswählen

$headers = imap_header&#40;$mbox,$i&#41;;
echo $headers->to&#91;0&#93;->mailbox.", ";
echo $headers->to&#91;0&#93;->host."<br />\n";
bekomme ich leider den host und die mailbox die der Absender als Empfänger eingegeben hatte, also meist einen Verteiler oder eine sinnlose Adresse.

Wie komme ich an die abakus-newsletter@example.org an die der Newsletter effektiv ausgeliefert wurde?
Hallo,

Die Funktion imap_headerinfo liest die Informationen des Nachrichten-Headers ein und gibt diese als Objekt zurück, wo hingegen imap_fetchstructure Daten zur Struktur der Mail liefert - ebenfalls als Objekt. Die Dritte im Bund ist imap_fetchbody welche den Body einer bestimmten Nachricht zurückliefert.

Beispiel:

Code: Alles auswählen

/* Verbindung zum Server herstellen */
  function connect&#40;$host,$port,$boxname,$password&#41;
  &#123;
    return imap_open&#40;"\&#123;$host/pop3&#58;$port&#125;INBOX",$boxname,$password&#41;;
  &#125;
  
  /* Verbindung trennen */
  function disconnect&#40;$handle&#41;
  &#123;
    imap_close&#40;$handle&#41;;
  &#125;

  /* prüft ob UTF8-Dekodierung erfolderlich ist */
  function decodeHeaderField&#40;$text2decode&#41;
  &#123;
    if&#40;strpos&#40;$text2decode,'?iso-8859-1?Q?'&#41; != false&#41;
    &#123;
      return utf8_decode&#40;imap_utf8&#40;$text2decode&#41;&#41;;
    &#125;
    else
    &#123;
      return $text2decode;
    &#125;
  &#125;

  /* Dekodierte den als String übergebenen kodierten Text aus dem in $encoding angegebenen Format */
  /* Soll der 76-Zeichen-Break nicht berücksichtigt werden, muss $convert76 false sein */
  /* Sollen unnötige Whitespaces entfernt werden, dann $trimText = true */
  function decode&#40;$text2decode,$encoding,$convert76 = true,$trimText = true&#41;
  &#123;
    /* Whitespaces entfernen */
    if&#40;$trimText&#41;
    &#123;
      $text2decode = trim&#40;$text2decode&#41;;
    &#125;
    /* 76-Zeichen-Break */
    if&#40;$convert76&#41;
    &#123;
      $text2decode = str_replace&#40;"=\r\n","\n",$text2decode&#41;;
    &#125;
    else
    &#123;
      $text2decode = str_replace&#40;"=\r\n",'',$text2decode&#41;;
    &#125;
    /* Dekodieren */
    switch&#40;$encoding&#41;
    &#123;
      case 0&#58;
        return quoted_printable_decode&#40;$text2decode&#41;;
        break;
      case 1&#58;
        return $text2decode;
        break;
      case 2&#58;
        return imap_base64&#40;imap_binary&#40;$text2decode&#41;&#41;;
        break;
      case 3&#58;
        return imap_base64&#40;$text2decode&#41;;
        break;
      case 4&#58;
        return quoted_printable_decode&#40;$text2decode&#41;;
        break;
      default&#58;
      case 5&#58;
        return $text2decode;
        break;
    &#125;
  &#125;

$con = connect&#40;$_SESSION&#91;'host'&#93;,$_SESSION&#91;'port'&#93;,$_SESSION&#91;'boxname'&#93;,$_SESSION&#91;'password'&#93;&#41;;
    if&#40;$con&#41;
    &#123;
      $headerinfo = imap_headerinfo&#40;$con,$msgno&#41;;
      $structure = imap_fetchstructure&#40;$con,$msgno&#41;;
      $subject = decodeHeaderField&#40;$headerinfo->subject&#41;;
      $from = @decodeHeaderField&#40;$headerinfo->from&#91;0&#93;->personal&#41;;
      $fromemail = $headerinfo->from&#91;0&#93;->mailbox.'@'.$headerinfo->from&#91;0&#93;->host;
      echo '<h1>Test Mail</h1>';
      echo '<h3>'.$subject.'</h3>';
      echo '<p><b>'.$from.'</b> <'.$fromemail.'></h4>';
      echo '<p><a href="index.php">Übersicht</a></p>';
      echo '<pre>'.decode&#40;imap_fetchbody&#40;$con,$msgno,1&#41;,$structure->encoding,false&#41;.'</pre>';
      disconnect&#40;$con&#41;;
    &#125;
mfg. Nico
Webhosting Partnerprogramm mit 2 Refebenen, PHP Webspace mit .de Domain ab 2 Euro, Zusätzlich suche ich Linkpartner zum Thema "Webmaster". Suchst du einem PHP Programmierer?

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag