Mailparse datum extract
Yes, daar gaat het mij nu om, ik wil de datum elke keer zien, ik weet ook dat deze er in staat, maar waar?
Imap gaat direct de mailbox in als ik het goed begrijp en niet voor losse .msg files
Weliswaar zonder spatie erachter, maar het is een risico.
Maar de vraag is, wat zit er op regel 19 in $result?
Hoe past dat met je zoektocht met strpos()?
Waarom eigenlijk de preg_replace() van regel 18?
persoonlijk zou ik als regex-fan eerder gaan voor
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$aM = [];
$b = preg_match('#Date: ([A-Z]{3}, \d{1,2} [A-Z]{3} \d{4})#i', $result, $aM);
print_r($aM);
?>
$aM = [];
$b = preg_match('#Date: ([A-Z]{3}, \d{1,2} [A-Z]{3} \d{4})#i', $result, $aM);
print_r($aM);
?>
Waarbij je dus op moet letten met jouw "16" aangezien je in de eerste 9 dagen van een maand een 1 karakter kortere string hebt.
$result is de variable uit de header zonder non -ascii tekens
Zonder de non ascii doe ik de str pos
preg_replace is het verwijderen van de non-ascci tekens
de eerste 9 dagen heb je 15 tekens en een spatie, daarna 16 werkt dus hele maand
Bedankt voor de preg_match, ook hier, als er toevallig in de body van de mail "Date:" zou staan, werkt dit ook niet meer
of andere letters, danwel andere cijfers.
Als je met strpos() alleen maar zoekt naar "Date: " en er daarna vanuit gaat dat de daarop volgende 16 tekens de datum zijn, kún je net een andere "Date: " treffen.
Maar wat is het bezwaar tegen de non-ascii tekens? In elk geval voor het zoeken naar de datum lijkt met dat niet nodig.
Toevoeging op 31/10/2023 16:40:56:
a) kun je de datum eens proberen te vinden in $result ipv $var?
b) wat als je een letter u toevoegt?
dus ipv
$result = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $var);
maak je ervan
$result = preg_replace('/[\x00-\x1F\x80-\xFF]/u', '', $var);
Yes ...je hebt gelijkt.. Top
Ik zoek de datum in $result, maar deze staat in beide niet
Letter u toevoegen, wat zou dat kunnen veranderen? Snap ik ff niet
Dus dan hakt hij niet botweg de eerste of tweede byte weg van een karaketer.
Maar je opmerking
"Ik zoek de datum in $result, maar deze staat in beide niet"
Als je zelf kijkt (var_dump) zie je die datum ook niet staan? Want dan heeft geen enkele zoekopdracht zin natuurlijk
Kun je een dump laten zien van $result voor het geval het misgaat? (waarbij je dan liefst even de mailadressen vervangt door [email protected])
En dan is het voldoende om te laten zien tot iets voorbij de mogelijke datum
Ook via een find op het scherm is een datum niet te vinden bij sommige message files.
Toevoeging op 01/11/2023 09:50:14:
mijn debugvolgorde zou zijn:
1) bekijke de msg file die mislukt eerst in notepad oid
2) MimeMessage is kennelijk https://github.com/php/pecl-mail-mailparse/blob/master/mailparse.c
Daar kun je niet veel aan debuggen.
3) $var zou de headers moeten bevatten van je msg. Is dat gevuld met iets? zit daar de datum ook bij?
4) $result: om een of andere reden wil je sommige ascii tekens (ascii code 250 is nog steeds ascii hoor) kwijt
doet dat wat je verwacht en niet te veel? klopt wat in $result zit nog steeds
5) daarna ga je zoeken. Ofwel met mijn regex, ofwel met strpos.
5a) strpos(): wat is $pos? is dat niet FALSE (= niet gevonden); $ppp: klopt de inhoud van $ppp met wat je verwacht?
6) strtotime(): begrijpt strtotime in dit geval de datum? Is er iets bijzonders met de datumstring? bijvoorbeeld dat de spatie achter : onbreekt, of dat er een extra Enter is, of dat de naam van de dag in het Frans is.
Als het php scripthe geen datum vind, dan staat deze ook niet in de dump van de variabele $var of result. Dat is snel gecheckt.
Dus het ligt er niet aan hoe de datum eruit gehaald zou moeten worden
Met dank
How about:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$file = "Bosche Bollen.msg";
$content = file_get_contents($file);
$aM = [];
$b = preg_match('#Date: ([A-Z]{3}, \d{1,2} [A-Z]{3} \d{4})#i', $result, $aM);
echo '<pre>' . print_r($aM, true) . '</pre>';
?>
$file = "Bosche Bollen.msg";
$content = file_get_contents($file);
$aM = [];
$b = preg_match('#Date: ([A-Z]{3}, \d{1,2} [A-Z]{3} \d{4})#i', $result, $aM);
echo '<pre>' . print_r($aM, true) . '</pre>';
?>
Toevoeging op 03/11/2023 21:51:06:
Ik ben trouwens nog steeds benieuwd wat dan WEL in $var staat.
Ik kan me niet voorstellen dat alleen de datum verdwijnt. Zit er überhaupt wel inhoud in die var?
natuurlijk staat in elke msg file een datum.
in jouw script werkt de preg_match pas als ik de non ascii tekens verwijderd heb
Niet een erg elegante methode de datum moet toch in één variabele op te halen zijn, maar zo werkt het ook .
Ga het (leter) op meerdere msg files uitproberen.
Dankjewel
Toevoeging op 06/11/2023 12:59:01:
Het gaat lukken.
Niet de schoonheidsprijs.
Tot zover staat de datum niet alleen bij Date: maar ook bij Sent: en CreationDate.
Met dank,via mailparse zou het volgens mij toch 'netter' moeten kunnen