Email naam/string veranderen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ray Mond

Ray Mond

16/12/2020 17:26:10
Quote Anchor link
Beste mensen,

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: "voorbeeld@site.nl" <afzender@site.nl>

Nu zou ik graag willen dat het binnenkomt als voorbeeld@site.nl en niet als "voorbeeld@site.nl" <afzender@site.nl>

code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.")";


Kan iemand helpen svp? Het gaat om het deel name waar dus "voorbeeld@site.nl" <afzender@site.nl> opgeslagen gaat worden maar dat willen we graag als voorbeeld@site.nl zien komen.

Mijn dank is groot!
 
PHP hulp

PHP hulp

14/05/2021 04:06:13
 
Ozzie PHP

Ozzie PHP

16/12/2020 17:44:17
Quote Anchor link
Kan je dat er niet af strippen dan? Zoiets (niet getest).

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

$from
= '"voorbeeld@site.nl" <afzender@site.nl>';

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 ... ;)
 
Ray Mond

Ray Mond

16/12/2020 17:53:33
Quote Anchor link
Als ik bovenstaande code gebruik zie ik enkel een N verschijnen echter is het ook zo dat

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$from = '"voorbeeld@site.nl" <afzender@site.nl>';


niet gebruikt kan worden in mijn situatie aangezien het ook bijvoorbeeld van "naam@site.nl" <afzender2@site.nl> kan komen.

Nu had ik zelf even dit gebruikt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
        }


En dan met:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.")";


Ook dan krijg ik enkel een N te zien
 
Ozzie PHP

Ozzie PHP

16/12/2020 17:54:53
Quote Anchor link
$tester = $from[0];

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 "naam@site.nl" <afzender2@site.nl> kan komen.

daar houdt de code gewoon rekening mee ...
 
Ray Mond

Ray Mond

16/12/2020 18:08:37
Quote Anchor link
Yesss!!! nice, dit gedeelte hoe ik het nu heb werkt dus:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
    }


Nu de rest even uitvogelen voor mezelf hier :P Merci, mijn dank hiervoor is al groot!
 
- SanThe -

- SanThe -

16/12/2020 18:10:44
Quote Anchor link
Ook leuk:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$email
= '"voorbeeld@site.nl" <afzender@site.nl>';
if(strstr($email,'"'))    $email = substr($email,strpos($email,'"')+1,strrpos($email,'"')-1);
?>
Gewijzigd op 16/12/2020 18:12:27 door - SanThe -
 
Ozzie PHP

Ozzie PHP

16/12/2020 18:12:39
Quote Anchor link
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.
 
Ray Mond

Ray Mond

16/12/2020 18:18:57
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3


mailTo($tester, $subject, $messagex, $meta, "inbox@".$metay['site_name'], $metay['site_name']." notification" );
 
Rob Doemaarwat

Rob Doemaarwat

16/12/2020 21:09:40
Quote Anchor link
Als je de IMAP extensie hebt kun je met imap_rfc822_parse_adrlist() het hele adres netjes opsplitsen.
 
Ray Mond

Ray Mond

16/12/2020 23:27:56
Quote Anchor link
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
 
- Ariën -
Beheerder

- Ariën -

16/12/2020 23:42:29
Quote Anchor link
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?
 
Rob Doemaarwat

Rob Doemaarwat

17/12/2020 09:01:43
Quote Anchor link
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!").
 
Ivo P

Ivo P

17/12/2020 09:41:27
Quote Anchor link
ik vind de vraag wat raar.

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
From: Brussels South Charleroi Airport
 <newsletters@marketing.charleroi-airport.com>
Reply-To: customerservice@charleroi-airport.com


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
 
Ozzie PHP

Ozzie PHP

17/12/2020 14:02:43
Quote Anchor link
>> Anyways: ik denk dat je het adres tussen de < > moet hebben

Volgens mij heeft Ivo P helemaal gelijk!

Zoiets dus:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

$from
= '"voorbeeld@site.nl" <afzender@site.nl>';

if (strpos($from, ' ')) {
  $from = explode(' ', $from);
  $from = $from[1];
  $from = str_replace(['<', '>'], '', $from);
}


echo $from;

?>
 
Ray Mond

Ray Mond

17/12/2020 14:12:41
Quote Anchor link
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..
 
Ozzie PHP

Ozzie PHP

17/12/2020 14:19:57
Quote Anchor link
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.
 
Ward van der Put
Moderator

Ward van der Put

17/12/2020 14:37:50
Quote Anchor link
Als je twee verschillende afzenders tegelijk wilt gebruiken, moet je die niet samen in de From-header proppen. 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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
From: John Doe <jdoe@machine.example>
Sender: Michael Jones <mjones@machine.example>
To: Mary Smith <mary@example.net>
Subject: Saying Hello
Date: Fri, 21 Nov 1997 09:55:06 -0600
Message-ID: <1234@local.machine.example>

This is a message just to say hello.
So, "Hello".
Gewijzigd op 17/12/2020 14:41:20 door Ward van der Put
 
Ivo P

Ivo P

17/12/2020 14:59:51
Quote Anchor link
maar er is ook nog een Reply-To header.

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.
 
Ray Mond

Ray Mond

17/12/2020 17:38:23
Quote Anchor link
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 "mail@afzender.nl" <mail@host.nl>

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
 
- Ariën -
Beheerder

- Ariën -

17/12/2020 17:44:54
Quote Anchor link
250 regels zijn veel te veel om relevant te zijn.
Je kan dit vast wel in dit forum beperken tot maximaal 20 regels.

Op welke manier mail je precies?
 
Ray Mond

Ray Mond

17/12/2020 18:12:16
Quote Anchor link
Ivo P op 17/12/2020 14:59:51:
maar er is ook nog een Reply-To header.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$reply = $email['headers']->reply_to[0]->mailbox."@".$header->reply_to[0]->host;


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)
PHP script in nieuw venster Selecteer het PHP script
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?
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.