PHP Mail X Headers

Pagina: 1
Acties:
  • 150 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig om een SIDN parser te maken. Hiermee kan ik dan de domeinaanvragen/verhuizingen automatiseren en de status terugkoppeling van de SIDN in een DB stoppen. Deze statusinfo bevindt zich in de header van een E-Mail en begint met 'X-' (Bijv: X-DRS-Status)

Ik dacht dat ik het al werkend had totdat ik met de echte SIDN mails ging testen. Nu krijg ik een groot deel van de mail header er niet uit. Mogelijk doordat het een multipart header is???

Ik heb nu de volgende code:
PHP:
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
user = "UID";
$pass = "PW";
$imap = imap_open("{URL_TO_IMAP_SERVER}INBOX", $user, $pass);
if (!$imap) {
    print_r(imap_errors());
}

$headers = @imap_headers($imap);

if (!$headers) {
    echo 'Couldn\'t get emails';
    exit();
}

$numEmails = sizeof($headers);

echo "You have $numEmails mails in your mailbox<br><br>";

for($i = 1; $i < $numEmails+1; $i++)
{
    // get imap_fetch header and put single lines into array
    $header = explode("\n", imap_fetchheader($imap, $i));

    // browse array for additional headers
    if (is_array($header) && count($header))
    {
        $head = array();
        foreach($header as $line) {
            // is line with additional header?
            if (eregi("^X-", $line)) {
                // separate name and value
                eregi("^([^:]*): (.*)", $line, $arg);
                $head[$arg[1]] = $arg[2];
            }
        }
        print 'Additional Headers Printen...<br>';
        print_r($head);
        print "<br><hr>";
    }
}


En de SIDN header bevat o.a.: Mime-Version: 1.0
Content-Type: multipart/mixed; en daaronder komen dan de overige XHeaders.

Ik heb overigens nog niet besloten of ik IMAP of POP3 ga gebruiken. Beide kunnen met dit script.

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Doet hij het wel als je het over de gehele headers probeert, ipv per regel?

PHP:
1
2
3
4
<?php
if(preg_match_all("/(X-[A-Z-]+):(.*)\n/ui", $headers, $preg, 2)) {
   echo "<pre>Headers " . print_r($preg, 1) . "</pre><hr />";
}


Echo je $line eens binnen je loop om te zien wat er uberhaupt in zit.

[ Voor 13% gewijzigd door frickY op 04-09-2007 08:53 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Afaik heeft multipart helemaal niks met de header, maar meer met de body te maken. Wat voor output krijg je en welke mails test je het mee? Weet je zeker dat de headers er ook daadwerkelijk inzitten?


Zou je verder je code tussen [php] tags kunnen zetten? Dat maakt het wat leesbaarder.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Als ik de header volledig laat outputten middels:

PHP:
1
print_r (imap_fetchheader($imap, 4));


Dan krijg ik:

Return-Path: Reply-To: From: To: Subject: 252 Aanvraag verhuizing verwerkt XXX.nl Date: Fri, 17 Aug 2007 09:48:26 +0200 Message-ID: <XXX.JavaMail.drs@domain-registry.nl> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_XXX_XXX_XXXX" X-Mailer: Microsoft Office Outlook 12.0 X-OlkEid: XXXXXXXX

XXX zijn cijfers...

En dan houdt de header op terwijl ik bij mijn andere mails wel de volledige header krijg. (Die hebben content-type text/plain en de xheaders boven de content-type regel staan?)

Even nog voor de duidelijkheid: de header zit er niet volledig in, en ik mis een groot deel. (het deel met de X headers onder de contentype)

[ Voor 9% gewijzigd door Verwijderd op 04-09-2007 09:05 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmmm ik ga het mogelijk anders aanpakken. De mail die binnenkomt van de SIDN doorsturen naar een PHP script en dan via STDIN de raw mail data parsen!

Als dat werkt, vind ik het ook een nettere oplossing...Als iemand hier meer info over heeft dan is dat welkom :) Ook van mijn eerdere probleem wil ik graag de oplossing weten als iemand die heeft.

Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 00:44

orf


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nog geprobeerd met: imap_fetchbody om de verschillende onderdelen eruit te halen, maar de data is er gewoon niet?

Ben overigens ook nog bezig met linux - mail -> php -> parse -> db verhaal.

*edit1
Blijf het vreemd vinden dat de mailclient wel een full header toont en PHP header data mist...Ook custom classes die met eigen sockets naar POP3 connecten geven niet de goede header weer.

*edit2
Ik denk dat mijn mail client de x-headers eruit haalt en als eigen formaat opslaat, en vandaar leesbaar blijft in de message. Ik heb net met telnet ge-connect (Lekker ouderwets praten met de mailserver / Had ik dat maar eerder gedaan!) en daar is de header ook weg.

Morgen dus maar een directe CC laten sturen naar een testmailbox en dan nogmaals proberen.

[ Voor 33% gewijzigd door Verwijderd op 04-09-2007 13:56 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voor de mensen die er in geinteresseerd zijn. Het werkt perfect!! Ik heb de mail nu direct laten CC'en naar mij en nu blijven de X-Headers bewaard en zijn dus ook goed uit te lezen met PHP.

:*) :) 8) :*) :9 :P O-)
Pagina: 1