[php] mail verzenden lukt opeens niet meer

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • JozyDaPozy
  • Registratie: December 2002
  • Laatst online: 18-09 17:39
Ik zend al tijden met een bepaalde functie mailtjes via de smtp-server van Xs4all.

Echter werkt dit sinds een dag of 10 opeens niet meer.
Ik krijg de volgende foutmelding:

Warning: mail(): SMTP server response: 554 5.7.1 Recipient address format `<Naam van Ontvanger<email@ontvanger.nl>>' not RFC-compliant in D:\www\htdocs\tools.php on line 442

Blijkbaar hebben ze wat aangepast bij de smtp-server van Xs4all waardoor deze dit type recipient niet meer accepteert.

Als ik de naam weghaal gaat het ook nog fout. Het gaat pas goed als ik alleen het emailadres gebruik..

Dus dit is de status:

Naam van de Ontvanger<email@ontvanger.nl> --> fout
<email@ontvanger.nl> --> fout
email@ontvanger.nl --> goed

Ik wil wel graag de naam zichtbaar in het emailprogramma van de ontvanger. Wat moet ik dan doen?

Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 18-09 19:05
Komen de mailtjes ook niet aan, of komen ze wel aan maar krijg je die foutmelding te zien?

Het is trouwens ook geen foutmelding, maar een waarschuwing. Het zou dus gewoon moeten werken, maar je voldoet niet aan de standaard dus kan het idd zijn dat je email niet aan komt.

Mail functie geeft duidelijk aan dat je die info die jij kwijt wil in de extra headers moet stoppen en niet in de 'to' velden.

[ Voor 29% gewijzigd door Postman op 24-01-2005 12:26 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Om hem RFC - compliant te maken (mooi woord), moet je het in het volgende format gieten:
code:
1
"Naam van de ontvanger" <email@example.com>

Acties:
  • 0 Henk 'm!

  • vriesdude
  • Registratie: Februari 2002
  • Laatst online: 19-09 19:14
JozyDaPozy schreef op maandag 24 januari 2005 @ 12:13:

Warning: mail(): SMTP server response: 554 5.7.1 Recipient address format `<Naam van Ontvanger<email@ontvanger.nl>>' not RFC-compliant in D:\www\htdocs\tools.php on line 442
De fout zit hem in de <> tekens die ik zwart gemaakt heb, zie daarnaast het voorbeeld van: RavEn50

/dev/null


Acties:
  • 0 Henk 'm!

  • JozyDaPozy
  • Registratie: December 2002
  • Laatst online: 18-09 17:39
vriesdude schreef op maandag 24 januari 2005 @ 12:34:
[...]


De fout zit hem in de <> tekens die ik zwart gemaakt heb, zie daarnaast het voorbeeld van: RavEn50
Nee, die <> tekens die jij zwart maakt, die geeft die warning zo terug.. Ik stuur het zonder die tekens naar de mail()-functie.

dus ik stuur gewoon
code:
1
Naam<email>


en vervolgens geeft die warning aan dat
code:
1
<Naam<email>>
niet geldig is :?

Ik heb het ook al met " " geprobeerd, maar nog steeds die foutmelding.

En de mailtjes komen dus niet aan (terwijl dit een WARNING is)

(Ik gebruik trouwens headers om dit alles te versturen)
Het rare is ook, dat hij niet zeurt over mijn afzender adres, dat op dezelfde 'foute' manier geformatteerd is

Acties:
  • 0 Henk 'm!

Verwijderd

Post die headers en je mailfunctie dan eens :)

Acties:
  • 0 Henk 'm!

  • vriesdude
  • Registratie: Februari 2002
  • Laatst online: 19-09 19:14
Verwijderd schreef op maandag 24 januari 2005 @ 14:20:
Post die headers en je mailfunctie dan eens :)
i agree, zonder die headers kunnen we ook weinig fouten zien denk?

/dev/null


Acties:
  • 0 Henk 'm!

  • JozyDaPozy
  • Registratie: December 2002
  • Laatst online: 18-09 17:39
Dit is de functie dit ik aanroep:
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
<?PHP
function SendEmail($msgto,$msgfrom,$msgsubject,$msgbody) {

    if ($msgto == '') {
        return FALSE;
    }

    $maildata = array();

    $maildata['to'] = $msgto;
    $maildata['from'] = $msgfrom;
    $maildata['subject'] = $msgsubject;
    $maildata['body'] = $msgbody;

    if (isset($maildata['to']) && isset($maildata['from']) && isset($maildata['subject']) && isset($maildata['body'])) {
        //
    } else {
        echo "ERROR\n\nNot all parameters were set";
        die;
    }

    $maildata['body'] = "<font face=\"Verdana\" style=\"font-size:12px; color=black;\">".$maildata['body']."</font>";

    $maildata['headers'] = "MIME-Version: 1.0\r\n";
    $maildata['headers'].= "Content-type: text/html; charset=iso-8859-1\r\n";
    $maildata['headers'].= "From: ".$maildata['from']."\r\n";
    //$maildata['headers'].= "Bcc: test<test@test.nl>\r\n";

    $mailres = mail($maildata['to'], $maildata['subject'], $maildata['body'], $maildata['headers']);
}

?>


Een voorbeeldaanroep is:
PHP:
1
SendEmail("To<to@email.com>","From<from@email.com>","subject","body");

Acties:
  • 0 Henk 'm!

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
Er moet een spatie tussen To en <...>.

Dus dat wordt:
PHP:
1
SendEmail("To <to@email.com>","From <from@email.com>","subject","body");

[ Voor 117% gewijzigd door MarkvE op 24-01-2005 15:31 ]

Vormkracht10


Acties:
  • 0 Henk 'm!

  • JozyDaPozy
  • Registratie: December 2002
  • Laatst online: 18-09 17:39
MarkvE schreef op maandag 24 januari 2005 @ 15:29:
Er moet een spatie tussen To en <...>.

Dus dat wordt:
PHP:
1
SendEmail("To <to@email.com>","From <from@email.com>","subject","body");
Dat maakt geen verschil. Doet het allebei niet.

Acties:
  • 0 Henk 'm!

  • RSpliet
  • Registratie: Juni 2003
  • Laatst online: 08-09 21:45

RSpliet

*blink*

Dat mag ook zo helemaal niet. Op z'n simpelst uitgedrukt zal het er zo uit horen te zien:
PHP:
1
mail("to@e-mail.com","subject","body","From: Sender Name <from@email.com>\r\nTo: Receiver Name <to@email.com>");

In dat eerste veld mag dus alleen maar een e-mail adres staan. Wil je daar een naam hebben staan in de mailtoepassing die m ontvangt, dan zul je die in de headers moeten zetten.

[ Voor 60% gewijzigd door RSpliet op 24-01-2005 18:53 ]

Schaadt het niet, dan baat het niet


Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Heb je dus dit ook al eens geprobeerd?
PHP:
1
2
3
<?
SendEmail("\"To\" <to@email.com>","\"From\" <from@email.com>","subject","body");
?>

Dus inclusief spaties en aanhalingtekens?

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

Verwijderd

Postman schreef op maandag 24 januari 2005 @ 12:21:
Komen de mailtjes ook niet aan, of komen ze wel aan maar krijg je die foutmelding te zien?

Het is trouwens ook geen foutmelding, maar een waarschuwing. Het zou dus gewoon moeten werken, maar je voldoet niet aan de standaard dus kan het idd zijn dat je email niet aan komt.

Mail functie geeft duidelijk aan dat je die info die jij kwijt wil in de extra headers moet stoppen en niet in de 'to' velden.
Volgens mij moet iemand dit postje nog eens goed doorlezen....

Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Je hebt helemaal gelijk. Lees vooral dus de manual van php nog ff door. Die is hier te vinden:

http://nl3.php.net/manual/en/function.mail.php

Goed voorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
/* recipients */
$to  = "mary@example.com" . ", " ; // note the comma
$to .= "kelly@example.com";

/* subject */
$subject = "Birthday Reminders for August";

/* message */
$message = 'Hallo!';

/* additional headers */
$headers .= "To: Mary <mary@example.com>, Kelly <kelly@example.com>\r\n";
$headers .= "From: Birthday Reminder <birthday@example.com>\r\n";
$headers .= "Cc: birthdayarchive@example.com\r\n";
$headers .= "Bcc: birthdaycheck@example.com\r\n";

/* and now mail it */
mail($to, $subject, $message, $headers);
?>

[ Voor 67% gewijzigd door Room42 op 24-01-2005 19:16 ]

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • JozyDaPozy
  • Registratie: December 2002
  • Laatst online: 18-09 17:39
Room42 schreef op maandag 24 januari 2005 @ 19:13:
Je hebt helemaal gelijk. Lees vooral dus de manual van php nog ff door. Die is hier te vinden:

http://nl3.php.net/manual/en/function.mail.php

Goed voorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
/* recipients */
$to  = "mary@example.com" . ", " ; // note the comma
$to .= "kelly@example.com";

/* subject */
$subject = "Birthday Reminders for August";

/* message */
$message = 'Hallo!';

/* additional headers */
$headers .= "To: Mary <mary@example.com>, Kelly <kelly@example.com>\r\n";
$headers .= "From: Birthday Reminder <birthday@example.com>\r\n";
$headers .= "Cc: birthdayarchive@example.com\r\n";
$headers .= "Bcc: birthdaycheck@example.com\r\n";

/* and now mail it */
mail($to, $subject, $message, $headers);
?>
Ok, ik zie wat ik fout doe.

Ik moet dus het volgende hebben:

PHP:
1
2
3
$to = "mary@example.com, kelly@example.com";
$headers = "To: Mary <mary@example.com>, Kelly <kelly@example.com>\r\n";
$headers .= "etc etc etc\r\n";


Echter wordt mijn mailfunctie overal aangeroepen met allemaal to-adressen in de vorm
code:
1
Naam1<email1>, Naam2<email2>
(met soms wel 10 adressen)..

Ik moet dus in mijn mail-functie die adressen extracten op een bepaalde manier, zodat ik die ge-extracte string in de $to kan zetten, en de oorspronkelijke in de $header.

Iemand enig idee hoe ik die adressen eruit zou kunnen halen?

Dus een functie die van dit:
Naam1<email1>, Naam2<email2>

dit maakt:
email1,email2

(Dan ben ik er toch)

Acties:
  • 0 Henk 'm!

  • RSpliet
  • Registratie: Juni 2003
  • Laatst online: 08-09 21:45

RSpliet

*blink*

JozyDaPozy schreef op maandag 24 januari 2005 @ 22:26:
[...]


Ok, ik zie wat ik fout doe.

Ik moet dus het volgende hebben:

PHP:
1
2
3
$to = "mary@example.com, kelly@example.com";
$headers = "To: Mary <mary@example.com>, Kelly <kelly@example.com>\r\n";
$headers .= "etc etc etc\r\n";


Echter wordt mijn mailfunctie overal aangeroepen met allemaal to-adressen in de vorm
code:
1
Naam1<email1>, Naam2<email2>
(met soms wel 10 adressen)..

Ik moet dus in mijn mail-functie die adressen extracten op een bepaalde manier, zodat ik die ge-extracte string in de $to kan zetten, en de oorspronkelijke in de $header.

Iemand enig idee hoe ik die adressen eruit zou kunnen halen?

Dus een functie die van dit:
Naam1<email1>, Naam2<email2>

dit maakt:
email1,email2

(Dan ben ik er toch)
Ga hier maar eens mee spelen dan :). Is nogal basic hoor...

Schaadt het niet, dan baat het niet


Acties:
  • 0 Henk 'm!

  • JozyDaPozy
  • Registratie: December 2002
  • Laatst online: 18-09 17:39
Ok, het werkt nu weer goed! :) :)

Ik zal nog even voor de volledigheid mijn functie posten:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
function StripEmailAdressen($full_email_string) {
    $emailarr = split(',',$full_email_string);

    $res = '';  
    while (list($key, $val) = each($emailarr)) {
        $pattern = "/(.*)<(.*)>/i";
        //$replace = "\\2(\\1)";
        $replace = "\\2";   
        $res .= preg_replace($pattern,$replace, $emailarr[$key]).", ";  
    }   
    $res = substr($res,0,strlen($res)-2);
    return $res;
}


Deze functie maakt dus van bijvoorbeeld deze string:
Naam1<email1>,Naam2<email2>,Naam3<email3>

De volgende string:
email1,email2,email3
Pagina: 1