Email naam/string veranderen
Ik gebruik onderstaande code om de mails in een mail_inbox te zetten in onze database.
Dat verloopt best prima alleen van sommige sites wil hij niet de normale mail adres halen maar komt het binnen onder name als: "[email protected]" <[email protected]>
Nu zou ik graag willen dat het binnenkomt als [email protected] en niet als "[email protected]" <[email protected]>
code:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
$body_data = trim($email['htmlBody']) ==""?$email['plainBody']: $email['htmlBody'];
$waktu = date("Y-m-d H:i:s",$email['headers']->udate);
$sql = "INSERT INTO `mail_inbox`( `subject`, `email_sender`, `name`, `is_register`, `email_receiver`, `data`, `times`,`web_id`,`vim`) VALUES (
'".$db->escape_string($email['headers']->subject)."',
'".$db->escape_string($from)."',
'".$db->escape_string($email['headers']->fromaddress)."',
'".$is_register."',
'".$db->escape_string($to)."',
'".$db->escape_string($body_data)."',
'".$db->escape_string($waktu)."',".$sid.",".$vim.")";
$waktu = date("Y-m-d H:i:s",$email['headers']->udate);
$sql = "INSERT INTO `mail_inbox`( `subject`, `email_sender`, `name`, `is_register`, `email_receiver`, `data`, `times`,`web_id`,`vim`) VALUES (
'".$db->escape_string($email['headers']->subject)."',
'".$db->escape_string($from)."',
'".$db->escape_string($email['headers']->fromaddress)."',
'".$is_register."',
'".$db->escape_string($to)."',
'".$db->escape_string($body_data)."',
'".$db->escape_string($waktu)."',".$sid.",".$vim.")";
Kan iemand helpen svp? Het gaat om het deel name waar dus "[email protected]" <[email protected]> opgeslagen gaat worden maar dat willen we graag als [email protected] zien komen.
Mijn dank is groot!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$from = '"[email protected]" <[email protected]>';
if (strpos($from, ' ')) {
$from = explode(' ', $from);
$from = $from[0];
$from = str_replace('"', '', $from);
}
echo $from;
?>
$from = '"[email protected]" <[email protected]>';
if (strpos($from, ' ')) {
$from = explode(' ', $from);
$from = $from[0];
$from = str_replace('"', '', $from);
}
echo $from;
?>
Toevoeging op 16/12/2020 17:45:20:
Zal ook vast via een regex kunnen, maar daar heb ik nu geen tijd voor ... ;)
niet gebruikt kan worden in mijn situatie aangezien het ook bijvoorbeeld van "[email protected]" <[email protected]> kan komen.
Nu had ik zelf even dit gebruikt
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$tester = $db->escape_string($email['headers']->fromaddress);
if (strpos($tester, ' ')) {
$tester = explode(' ', $tester);
$tester = $from[0];
$tester = str_replace('"', '', $tester);
}
if (strpos($tester, ' ')) {
$tester = explode(' ', $tester);
$tester = $from[0];
$tester = str_replace('"', '', $tester);
}
En dan met:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
$body_data = trim($email['htmlBody']) ==""?$email['plainBody']: $email['htmlBody'];
$waktu = date("Y-m-d H:i:s",$email['headers']->udate);
$sql = "INSERT INTO `mail_inbox`( `subject`, `email_sender`, `name`, `is_register`, `email_receiver`, `data`, `times`,`web_id`,`vim`) VALUES (
'".$db->escape_string($email['headers']->subject)."',
'".$db->escape_string($from)."',
'".$db->escape_string($email['headers']->fromaddress)."',
'".$is_register."',
'".$db->escape_string($to)."',
'".$db->escape_string($body_data)."',
'".$db->escape_string($waktu)."',".$sid.",".$vim.")";
$waktu = date("Y-m-d H:i:s",$email['headers']->udate);
$sql = "INSERT INTO `mail_inbox`( `subject`, `email_sender`, `name`, `is_register`, `email_receiver`, `data`, `times`,`web_id`,`vim`) VALUES (
'".$db->escape_string($email['headers']->subject)."',
'".$db->escape_string($from)."',
'".$db->escape_string($email['headers']->fromaddress)."',
'".$is_register."',
'".$db->escape_string($to)."',
'".$db->escape_string($body_data)."',
'".$db->escape_string($waktu)."',".$sid.",".$vim.")";
Ook dan krijg ik enkel een N te zien
moet zijn
$tester = $tester[0];
Toevoeging op 16/12/2020 17:55:39:
>> niet gebruikt kan worden in mijn situatie aangezien het ook bijvoorbeeld van "[email protected]" <[email protected]> kan komen.
daar houdt de code gewoon rekening mee ...
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$tester = $email['headers']->fromaddress;
if (strpos($tester, ' ')) {
$tester = explode(' ', $tester);
$tester = $tester[0];
$tester = str_replace('"', '', $tester);
$body_data = trim($email['htmlBody']) ==""?$email['plainBody']: $email['htmlBody'];
$waktu = date("Y-m-d H:i:s",$email['headers']->udate);
$sql = "INSERT INTO `mail_inbox`( `subject`, `email_sender`, `name`, `is_register`, `email_receiver`, `data`, `times`,`web_id`,`vim`) VALUES (
'".$db->escape_string($email['headers']->subject)."',
'".$db->escape_string($from)."',
'".$tester."',
'".$is_register."',
'".$db->escape_string($to)."',
'".$db->escape_string($body_data)."',
'".$db->escape_string($waktu)."',".$sid.",".$vim.")";
echo "</br>".$sql;
$db->query($sql);
}
if (strpos($tester, ' ')) {
$tester = explode(' ', $tester);
$tester = $tester[0];
$tester = str_replace('"', '', $tester);
$body_data = trim($email['htmlBody']) ==""?$email['plainBody']: $email['htmlBody'];
$waktu = date("Y-m-d H:i:s",$email['headers']->udate);
$sql = "INSERT INTO `mail_inbox`( `subject`, `email_sender`, `name`, `is_register`, `email_receiver`, `data`, `times`,`web_id`,`vim`) VALUES (
'".$db->escape_string($email['headers']->subject)."',
'".$db->escape_string($from)."',
'".$tester."',
'".$is_register."',
'".$db->escape_string($to)."',
'".$db->escape_string($body_data)."',
'".$db->escape_string($waktu)."',".$sid.",".$vim.")";
echo "</br>".$sql;
$db->query($sql);
}
Nu de rest even uitvogelen voor mezelf hier :P Merci, mijn dank hiervoor is al groot!
Code (php)
1
2
3
4
2
3
4
<?php
$email = '"[email protected]" <[email protected]>';
if(strstr($email,'"')) $email = substr($email,strpos($email,'"')+1,strrpos($email,'"')-1);
?>
$email = '"[email protected]" <[email protected]>';
if(strstr($email,'"')) $email = substr($email,strpos($email,'"')+1,strrpos($email,'"')-1);
?>
Gewijzigd op 16/12/2020 18:12:27 door - SanThe -
Graag gedaan ... let wel op. In jouw bovenstaand voorbeeld staat nu je overige code ook binnen de if-statement. Dat lijkt me niet de bedoeling. En die $tester moet dan $from worden.
Ozzie PHP op 16/12/2020 18:12:39:
Graag gedaan ... let wel op. In jouw bovenstaand voorbeeld staat nu je overige code ook binnen de if-statement. Dat lijkt me niet de bedoeling. En die $tester moet dan $from worden.
Oke, aangepast en werkt dan ook goed.
Ik heb trouwens alles van from omgezet naar tester aangezien from al bestond en dat kan natuurlijk niet dubbel haha maar hij doet het nu goed opslaan in de database alleen nu is de vraag hoe kan het script nu automatisch terugmailen? want dat werkt nog niet.
imap_rfc822_parse_adrlist() het hele adres netjes opsplitsen.
Als je de IMAP extensie hebt kun je met Die zal ik ook zeker opslaan, thx voor de tip maar dat gedeelte werkt al haha het gaat nu nog puur dat het script ook moet mailen naar dat adres maar dat werkt nog niet
Wat werkt er niet aan? En op welke manier stuur je de mail weg? Via de mail() functie, of via een aparte weg via SMTP?
Ray Mond op 16/12/2020 23:27:56:
maar dat gedeelte werkt al
OK, ik ben een beetje spijkers op laag water aan het zoeken (lees: meestal gaat deze "explode op spatie aanpak" wel goed), maarrr: https://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx/ (scroll even door tot "These are all valid email addresses!").
Het lijkt haast alsof er een nu een oplossing is voor een uitzonderlijke situatie.
Ik pak er even een stuk header van een mail uit mijn mailbox bij:
Code (php)
1
2
3
2
3
Vreemd genoeg zit hier ook nog een enter in, maar mijn punt is, dat het mailadres dus tussen de < > staat. En de naam daar voor. In jouw geval duikt er kennelijk een uitzonderlijk geval op, waarbij iemand voor de naam een emailadres heeft gekozen (dat ook nog afwijkt van de daadwerkelijke zender).
Daarnaast bestaat er ook nog iets als een reply-to header. Dat is het adres waar de sender de antwoorden wil ontvangen.
Voorbeeld: de mail komt daadwerkelijk van de webserver van phphulp.nl. Maar antwoorden dienen verstuurd te worden aan de starter van het topic.
Daar mag je dan niet het mailadres van de topicstarter gebruiken: dat is immers niet de zender van de mail: die komt van de webserver.
Anyways: ik denk dat je het adres tussen de < > moet hebben
Volgens mij heeft Ivo P helemaal gelijk!
Zoiets dus:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$from = '"[email protected]" <[email protected]>';
if (strpos($from, ' ')) {
$from = explode(' ', $from);
$from = $from[1];
$from = str_replace(['<', '>'], '', $from);
}
echo $from;
?>
$from = '"[email protected]" <[email protected]>';
if (strpos($from, ' ')) {
$from = explode(' ', $from);
$from = $from[1];
$from = str_replace(['<', '>'], '', $from);
}
echo $from;
?>
Ik snap het punt van Ivo inderdaad maar toch is het niet correct, want aangezien je normaal gesproken op reply zou drukken dan komt het mail adres wat tussen "" staat en niet tussen <> anders zou het niet mogen inderdaad..
Ik denk dat het niet klopt wat je zegt. De 'naam' staat tussen de aanhalingstekens en het mailadres zelf staat tussen <>. En je hebt het mailadres nodig. Niet de naam.
RFC 2822 heeft daarvoor de speciale Sender-header.
If John's secretary Michael actually sent the message, though John was the author and replies to this message should go back to him, the sender field would be used:
Als je twee verschillende afzenders tegelijk wilt gebruiken, moet je die niet samen in de From-header proppen. If John's secretary Michael actually sent the message, though John was the author and replies to this message should go back to him, the sender field would be used:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
From: John Doe <[email protected]>
Sender: Michael Jones <[email protected]>
To: Mary Smith <[email protected]>
Subject: Saying Hello
Date: Fri, 21 Nov 1997 09:55:06 -0600
Message-ID: <[email protected]>
This is a message just to say hello.
So, "Hello".
Sender: Michael Jones <[email protected]>
To: Mary Smith <[email protected]>
Subject: Saying Hello
Date: Fri, 21 Nov 1997 09:55:06 -0600
Message-ID: <[email protected]>
This is a message just to say hello.
So, "Hello".
Gewijzigd op 17/12/2020 14:41:20 door Ward van der Put
De Sender ken ik zelf eigenlijk niet, maar ik pretendeer zker niet de hele RFC mbt mailen te kennen :-)
Maar mogelijk dat zo'n extra header nu net wel zorgt dat TS de mail naar dat andere adres ziet gaan bij het reply-en.
In elk geval kan als zender ook iets anders dan een emailadres staan. (dus dat stuk tussen de "")
Staar je niet blind op 1 speciaal geval.
[email protected]" <[email protected]>
Ik heb dan ook een heel script wat moet mailen maar dan op 2 manieren zelfs aangezien die site anders werkt dan normaal.. Script is 250 regels, even wat te groot om hier te posten dus.. Wel ben ik trouwens benieuwd naar de Reply-To header? Daar kan ik verder niet enorm veel over vinden
Normaal gesproken hebben jullie ook zeker weten gelijk hoor maar er is 1 site specifiek waar dit even voor nodig is haha aangezien hun werken met "Ik heb dan ook een heel script wat moet mailen maar dan op 2 manieren zelfs aangezien die site anders werkt dan normaal.. Script is 250 regels, even wat te groot om hier te posten dus.. Wel ben ik trouwens benieuwd naar de Reply-To header? Daar kan ik verder niet enorm veel over vinden
Je kan dit vast wel in dit forum beperken tot maximaal 20 regels.
Op welke manier mail je precies?
Ivo P op 17/12/2020 14:59:51:
maar er is ook nog een Reply-To header.
Topper! Dit was geloof ik de oplossing.. Het lijkt ernaar dat vanaf welke site ik op het moment ook maar mail naar de site toe dat alles gewoon netjes reactie krijgt...
Dit is trouwens op het moment hoe we mailen zodat het ook niet in spam komt :-)
Code (php)
1
mailTo($reply, $subject, $messagex, $meta, "inbox@".$metay['site_name'], $metay['site_name']." notification" );
Nu rust mij nog 1 vraag.. wij willen graag een timer op de mail, dat het pas na bijvoorbeeld 5 minuten reactie terug krijgt (de afzender) nu hadden we de sleep functie gebruikt en wait ook maar dit blijkt een hinder te zijn in het script waardoor niet alle mails tegelijk binnenkomen soms.. Hoe kan ik het script laten wachten met mailen maar toch alles tegelijk laten komen?