2
votes

Explosez les données publiées pour recevoir la date en php

Je transfère mes e-mails venant de mon domaine vers un script php. C'est assez gros, je ne sais pas pourquoi stackoverflow ne me permet pas de poster plein temps car il donne une erreur cela ressemble à du spam.

Cependant, sa partie date ressemble à quelque chose comme

if(count($res)>0){
  $output = $res[10];
}

Mon intention est d'obtenir la date / heure de réception de cet e-mail.

Là, je peux voir Date: dim, 17 février 2019 08:09:37 +0545 . Cette date est la date / heure requise pour moi. Comment puis-je l'obtenir?

J'ai essayé d'exploser avec preg_split ('/ \ r \ n | \ r | \ n /', $ _POST ['headers']); code > mais alors je ne peux pas obtenir Idea car il semble que série de chaînes.

"Received: by mx0035p1mdw1.sendgrid.net with SMTP id ADiBRHCowl Sun, 17 Feb 2019 02:59:38 +0000 (UTC)",
   "Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) by mx0035p1mdw1.sendgrid.net (Postfix) with ESMTPS id DB6E7A05D27 for <email@domain.com>; Sun, 17 Feb 2019 02:59:37 +0000 (UTC)",
   "Received: by mail-ed1-f48.google.com with SMTP id m35so7028682ede.10 for <email@domain.com>; Sat, 16 Feb 2019 18:59:37 -0800 (PST)",
   "DKIM-Signature: v=1; a=rsa-sha256; c=relaxed\/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=ttLV0Sk78+4DRG2CM0f\/kiWFXPnwCHm0Y\/1zM9lMrRo=; b=Dgyv4S\/TDdo61RsYchmhkFnFtG8VksVIeAimm7WOnHSv6chN+LOG25ufsh4\/51xX1Z pjQvuiXnuR7MawZ0B\/WZxB4F4309XT9SIrZMBX9\/5HHd\/SddFx1LZ6XVS2qEvaVV9B\/9 4v\/wqNhnNr7Vy1GlKbUq6buB9l4fk9J+ralDNF6lrDbP1XVCv+58Qp0UipMLPzYmFGnf EtylH7N4vVNoOjww15MwT5xrgW3ylfSJLZXog3TBxK+v8fGFKQ0UOH\/+C5PL0sQaFVM5 EVGtwQgqbBeEhJnG77xVuApcerYNYY+gM1Sixjb4NhRtsKgE5fOTAzA3N+jXbDIVunsZ F45g==",
   "X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed\/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=ttLV0Sk78+4DRG2CM0f\/kiWFXPnwCHm0Y\/1zM9lMrRo=; b=s\/ovc9XPMypTBh6anKxw1WFQRJ3I4AGVFaQdu9L0buU2m8tl2JFPLWOYeliRS5K\/Jd WLiTXfRdFw8OpAWuKUbMt0wQ+gZXd0AwpJb\/t5KFs+Fh7l0cjWRSK\/0ZzADqagoyDmhC ISSRazoYBu2h9IeWdOhFV4i+VBvyhkXqauggB6kvZxG4GM\/ulB7sj5zYajnVBt5SfSI1 9SHMkkZrYerI6mCAKgqr\/eEj8E0IYgaKlhct9TlZbh9wsmYUQoDzp4Wf9JET5jhL7Lya 3Pa41NZepc03HfGOcnYadrPfrIz7O2Tm++22D0LBTzozkskwlJqqZz\/rLf0Osu81q80h VdEg==",
   "X-Gm-Message-State: AHQUAuaQnQxerRWkc4sbGZmEt9JioFURi6LQDVYBzb60RKG+21LzjDlV OgAylSy0nmPPAEI7A\/Faxook200gMFui+BFD8sWrBg==",
   "X-Google-Smtp-Source: AHgI3IZGrcH6ngLPOL8YS8PuOU6OPlSk2Q2DDeKmX41lGFBsvhtZ2FFtGkGypCSGCeVJd\/wP6i+pi2S6v5EIJaZOxNA=",
   "X-Received: by 2002:aa7:dacd:: with SMTP id x13mr13739830eds.24.1550372376434; Sat, 16 Feb 2019 18:59:36 -0800 (PST)",
   "MIME-Version: 1.0",
   "From: Firstname Lastname <name@gmail.com>",
   "Date: Sun, 17 Feb 2019 08:44:24 +0545",
   "Message-ID: <CACX9xtmKSuZYgnXXEq-z=jtBwG4DG=ytptVVCOsY7SEOi2o_KQ@mail.gmail.com>",
   "Subject: dummy12",
   "To: email@domain.com",
   "Content-Type: multipart\/alternative; boundary=\"000000000000c45c6e05820e32b0\"",
   ""

Comment puis-je obtenir le datetim de cette ligne "Date: dim, 17 février 2019 08:44:24 +0545"

update:↑

Après preg_split $ res = preg_split ('/ \ r \ n | \ r | \ n /', $ _POST ['headers' ]);

.......\nFrom: Firstname Lastname <name@gmail.com>\nDate: Sun, 17 Feb 2019 08:09:37 +0545\nMessage-ID: <abcdefghifsfsasd@mail.gmail.com>\nSubject:.......

À ce stade, $ output est Date: dim, 17 février 2019 08:09:37 +0545


0 commentaires

3 Réponses :


1
votes

Comme les en-têtes des e-mails sont assez cohérents (et toujours cohérents dans la façon dont les données sont formatées), vous pouvez utiliser un modèle RegEx pour faire correspondre la valeur de la date.

$matches[1]

$ matches sera un tableau contenant, en cas de succès, deux éléments: la sous-chaîne totale correspondante et les données de date capturées. Vous serez probablement le plus intéressé par ce dernier, qui serait à:

$matches = null;
$returnValue = preg_match('/"Date: (.+?)",/', $headers_data, $matches);

Consultez le manuel PHP pour en savoir plus sur preg_match .


5 commentaires

J'ai reçu le returnValue comme 0. Pourriez-vous s'il vous plaît vérifier la question, je l'ai mise à jour.


Mon message a été formaté d'une manière qui a probablement semé la confusion. Vous ne vérifiez pas $ returnValue, mais plutôt le tableau $ matches. En cas de succès, vous aurez plusieurs valeurs dans le tableau. À la position 0, la sous-chaîne complète correspondra. Et à la position 1 devrait être la date et l'heure capturées.


a reçu un tableau vide []


Vous remplacez $ headers_data par $ _POST ['headers'], n'est-ce pas? Ou quelle que soit la variable contenant vos données d'en-tête.


Variable non définie: headers_data dans ce sera l'erreur si j'ai essayé $ headers_data



1
votes

J'ai trouvé la solution, ce n'est peut-être pas la meilleure mais elle fait le travail.

$f_header = preg_split('/\r\n|\r|\n/', $_POST['headers']);
if(count($f_header)>0){
    $output = substr("$f_header[10]",6);
    $date = explode("+",$output);
    $dt = date('Y-m-d h:i:s', strtotime($date[0]));
}


0 commentaires

1
votes

J'ai trouvé ceci:

$dt = date('Y-m-d h:i:s', strtotime(substr($str, strpos($str, 'Date')+6, 31)));


0 commentaires