[php] Foutieve mail functie

Pagina: 1
Acties:
  • 166 views sinds 30-01-2008
  • Reageer

Onderwerpen


Verwijderd

Topicstarter
Ik gebruik de onderstaande functie om een mailtje met attachement te versturen. Alles gaat goed, alleen af en toe wordt de mail 1 of dan 2 of dan 3 of dan 4 keer verzonden.
Waar kan dit aan liggen? Heb al eens gezocht maar ik vind niets in de functie.

Ik heb wel al op aanraden van het script zelf de \r verwijderd, zonder resultaat!

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// MAILSCRIPT ////////////////////////////////////////////////
    // Your mail messsage
    //$msg = "$msgcontent";
    // who the message is to
    $mailto = "ik@moblog.nl";
    // who the message is from
    $mailfrom = "afzender@afzender.nl";
    // what is the mail subject
    $mailsubj = "$md->subject";
    // file name to attach
    //$fattach = "part_1.jpg";
    // path to file location on server
    // no trailing [ / ]
    $fl = $dir_name;
    
    /// script
    $a_name = "phpmail";
    $timer = time();
    $abound = "00-".$a_name."-".$timer."";
    $stime = date("r",time());
    $mhead = "Date: ".$stime."\r\n";
    $mhead .= "From: ".$mailfrom."\r\n";
    $mhead .= "To: ".$mailto."\r\n";
    $mhead .= "X-Priority: 3 (Normal)\r\n";
    $mhead .= "X-Mailer: <PHP MAILER>\r\n";
    $mhead .= "MIME-Version: 1.0\r\n";
    $mhead .= "Content-Type: multipart/mixed; boundary=\"$abound\"\r\n";
    $mhead .= "Content-Transfer-Encoding: 8bit\r\n";
    
    // some smtp servers (routers) don't like (\r) in the mailbody string so remove them
    // It will not effect servers that do allow them
    
    $msg = preg_replace("/\n/i", "\n", $msg);
    $msgbody = "--".$abound."";
    $msgbody .= "\n";
        $msgbody .= "Content-Type: text/plain; charset=\"ISO-8859-1\"\n";
    $msgbody .= "Content-Transfer-Encoding: 8bit;\n\n";
    $msgbody .= "$msgcontent ";
    $msgbody .= "\n";
    $msgbody .= "\n";
    $msgbody .= "\n";
    $ahead = "--".$abound."";
    $ahead .= "\n";
    $ahead .= "Content-Type: application/octet-stream";
    $ahead .= "\n";
    $ahead .= "Content-Transfer-Encoding: base64";
    $ahead .= "\n";
    $ahead .= "Content-Disposition: attachment; filename=\"$fattach\"";
    $ahead .= "\n\n";
    set_magic_quotes_runtime(0);
    
    $filehandle2 = fopen("$dir_name/$fattach", "rb");
    $attachment = fread($filehandle2, filesize ("$dir_name/$fattach"));
    fclose ($filehandle2);
    $attachment = chunk_split(base64_encode($attachment));
    
    // some smtp servers (routers) don't like (\r) in base64 strings so remove them
    // It will not effect servers that do allow them
    
    $attachment = preg_replace("/\n/i", "\n", $attachment);
    $ahead .= "$attachment";
    $ahead .= "\n";
    $msgbody .= "$ahead";
    set_magic_quotes_runtime(get_magic_quotes_gpc());
    $msgbody .= "--".$abound."--";
    
    mail($mailto, $mailsubj, $msgbody, $mhead);
    ////////////////////////////////////////////////////////////

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Heb je al gecontroleerd of het script niet gewoon meerdere malen opgestart wordt?

Who is John Galt?


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18-09 17:06

gorgi_19

Kruimeltjes zijn weer op :9

In het kader van gokken: Men drukt regelmatig op F5-toets.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • TRON
  • Registratie: September 2001
  • Laatst online: 16-09 13:13
Misschien te vaak op het verzend knopje gedrukt? Maak de button gedisabled als je er 1 keer op klikt.


-edit-
te laat

[ Voor 10% gewijzigd door TRON op 10-09-2003 12:24 ]

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

misschien komt het ook doordat je in de header al een TO-adres meegeeft, en vervolgens in de mail() functie nog een keer?

Intentionally left blank


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

misschien komt het ook doordat je in de header al een TO-adres meegeeft, en vervolgens in de mail() functie nog een keer?
Nee dit is standaard onderdeel van SMTP.

Professionele website nodig?


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

curry684 schreef op 10 September 2003 @ 12:29:
[...]

Nee dit is standaard onderdeel van SMTP.
ik meen ooit ergens gelezen te hebben dat de mail() functie van PHP zelf ook een To-header genereerd, en dat als je het ook in de header al opgeeft je dus 2 To-headers hebt, en dat sommige mailservers dan het bericht ook 2x afleveren.
Zelf heb ik dit probleem nooit ondervonden echter, en mogelijk dat het een oude versie PHP betrof, het was dan ook een wild-guess ;)

Intentionally left blank


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Dat zou een enorme bug zijn: op de SMTP-laag is de "RCPT TO:" regel namelijk mandatory, en als gevolg daarvan in de headers zelf optioneel, oftewel het is volledig legaal om mail te sturen zonder een "To:"-veld in de mail zelf. Outlook zal de mail dan ook netjes zonder recipient tonen.

Tevens is het volgens mij "Preferred behaviour" voor een mailserver om de recipients te 'ontdupliceren'.

Professionele website nodig?


Verwijderd

Topicstarter
gorgi_19 schreef op 10 September 2003 @ 12:22:
In het kader van gokken: Men drukt regelmatig op F5-toets.
Nope want het script wordt aangeroepen door een gsm via gprs die dan contact zoekt met het scriptje en dan het bericht aan biedt.

Er wordt op de server zelf ook een kopie van het bericht bewaard en dat zet ie wel maar 1 keer neer.

Dus:

Foto wordt verzonden naar script
script stuurt mail en slaat foto lokaal (op de server) op.
mail wordt soms vaker verstuurd en soms maar 1 keer.
Lokaal opslaan van de foto gaat altijd goed en is dan ook
maar 1 keer terug te vinden.
justmental schreef op 10 September 2003 @ 12:22:
Heb je al gecontroleerd of het script niet gewoon meerdere malen opgestart wordt?
Zie uitleg boven.
TRON schreef op 10 September 2003 @ 12:23:
Misschien te vaak op het verzend knopje gedrukt? Maak de button gedisabled als je er 1 keer op klikt.


-edit-
te laat
Zie bovenste reactie
crisp schreef op 10 September 2003 @ 12:27:
misschien komt het ook doordat je in de header al een TO-adres meegeeft, en vervolgens in de mail() functie nog een keer?
Specificeer u eens nader!
curry684 schreef op 10 September 2003 @ 13:00:
Dat zou een enorme bug zijn: op de SMTP-laag is de "RCPT TO:" regel namelijk mandatory, en als gevolg daarvan in de headers zelf optioneel, oftewel het is volledig legaal om mail te sturen zonder een "To:"-veld in de mail zelf. Outlook zal de mail dan ook netjes zonder recipient tonen.

Tevens is het volgens mij "Preferred behaviour" voor een mailserver om de recipients te 'ontdupliceren'.
Zo heb ik het ook eens gelezen.

--

Maar nu doet zich het lullig voor.
Ik heb dus nu een mailadres aangemaakt met daar achter een mail groep.
Dus een mailadres wat de mail doorstuurt naar meerdere mailadressen.

Nu laat ik het script de mail daar heen sturen en nu komt het op 1 account maar 1 keer binnen en op een andere account 2 keer.

Ik snap het nu helemaal niet meer.
Ik heb gekeken maar volgens mij wordt het script maar 1 keer aangeroepen iedere keer.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Onderzoek je mailserver zelf eens :)

Dus test eens of een andere mail-'client' hetzelfde gedrag vertoont.

Professionele website nodig?


Verwijderd

Topicstarter
curry684 schreef op 10 September 2003 @ 13:43:
Onderzoek je mailserver zelf eens :)

Dus test eens of een andere mail-'client' hetzelfde gedrag vertoont.
hetzelfde script op een andere server:
zelfde probleem

Een ander mailscript op dezelfde server:
Geen probleem

[ Voor 5% gewijzigd door Verwijderd op 10-09-2003 14:03 ]


  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Mischien dat de SMTP server of dus lokale sendmail die je gebruikt raar doet.
Dus ik zou een gewone WWW testpage maken, en daarmee een aantal keren proberen 1 mail te sturen, naar verschillende servers.
Edit: net te laat :)

[ Voor 6% gewijzigd door mocean op 10-09-2003 14:38 ]

Koop of verkoop je webshop: ecquisition.com


Verwijderd

Topicstarter
mocean schreef op 10 September 2003 @ 14:03:
Mischien dat de SMTP server of dus lokale sendmail die je gebruikt raar doet.
Dus ik zou een gewone WWW testpage maken, en daarmee een aantal keren proberen 1 mail te sturen, naar verschillende servers.
Zie posting hierboven
alreeds gedaan. Geen verkeerd resultaat.

Verwijderd

Topicstarter
Kan bijvoorbeeld niet zo zijn dat:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
/// script 
    $a_name = "phpmail"; 
    $timer = time(); 
    $abound = "00-".$a_name."-".$timer.""; 
    $stime = date("r",time()); 
    $mhead = "Date: ".$stime."\r\n"; 
    $mhead .= "From: ".$mailfrom."\r\n"; 
    $mhead .= "To: ".$mailto."\r\n"; 
    $mhead .= "X-Priority: 3 (Normal)\r\n"; 
    $mhead .= "X-Mailer: <PHP MAILER>\r\n"; 
    $mhead .= "MIME-Version: 1.0\r\n"; 
    $mhead .= "Content-Type: multipart/mixed; boundary=\"$abound\"\r\n"; 
    $mhead .= "Content-Transfer-Encoding: 8bit\r\n";

en daar de \r 's roet in het eten gooien he ofwel?

Verwijderd

Laat is een variabele optellen telkens de mail is verstuurd, zo kan je kijken of het echt niet meerdere malen wordt uitgevoerd...

Verwijderd

Topicstarter
ja maar het vreemde is gewoon dat onder dezelfde omstandigheden soms de foto maar 1 keer wordt verzonden.

Maar de foto wordt ook lokaal opgeslagen, in hetzelfde scriptje en dat gebeurt wel maar 1 keer!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Verwijderd schreef op 10 september 2003 @ 14:14:
Kan bijvoorbeeld niet zo zijn dat:[...] en daar de \r 's roet in het eten gooien he ofwel?
Misschien. Dit is wat er in de manual over te vinden is:
Make sure you do not have any newline characters in the to or subject, or the mail may not be sent properly.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Verwijderd

Topicstarter
bigtree schreef op 10 September 2003 @ 14:28:
[...]
Misschien. Dit is wat er in de manual over te vinden is:
[...]
Vanalles geprobeerd de /r weg de /n weg
dan wordt de mail soms helemaal niet verzonden, dan met een verkeerde unicode.

Aargh waarom werkt hetniet gewoon! Alles werkt goed behalve dat mailen.
Waarom meerdere malen mailen als ie hem maar 1 keer opslaat?!?!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
voeg nog eens een regel onder je mail commando toe waar dit instaat:
PHP:
1
mail($je_eigen_email, "check", "kijken hoe vaak dit aan komt");

daarmee kun je uitsluiten of het aan de gegenereerde mail zelf ligt of het script opzich

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 12-09 14:07

BierPul

2 koffie graag

Wat voor mail software wordt er gebruikt op de server :?

Sendmail of Qmail oid dat wil nog wel es verschillen met de \n en \r's

Bijzonder irritant probleem BTW :P

En heb je geen ssh toegang tot de machine dan kan je zien wat je mail log doet als je het scrippie draait :)

[ Voor 27% gewijzigd door BierPul op 10-09-2003 16:23 ]

Ja man


Verwijderd

Topicstarter
marty schreef op 10 September 2003 @ 16:17:
voeg nog eens een regel onder je mail commando toe waar dit instaat:
PHP:
1
mail($je_eigen_email, "check", "kijken hoe vaak dit aan komt");

daarmee kun je uitsluiten of het aan de gegenereerde mail zelf ligt of het script opzich
Ga ik nu direct proberen
BierPul schreef op 10 September 2003 @ 16:22:
Wat voor mail software wordt er gebruikt op de server :?

Sendmail of Qmail oid dat wil nog wel es verschillen met de \n en \r's

Bijzonder irritant probleem BTW :P

En heb je geen ssh toegang tot de machine dan kan je zien wat je mail log doet als je het scrippie draait :)
Helaas geen ssh.
Ik dacht Sendmail maar pin me er niet op vast!

Verwijderd

Topicstarter
marty schreef op 10 September 2003 @ 16:17:
voeg nog eens een regel onder je mail commando toe waar dit instaat:
PHP:
1
mail($je_eigen_email, "check", "kijken hoe vaak dit aan komt");

daarmee kun je uitsluiten of het aan de gegenereerde mail zelf ligt of het script opzich
Okay let op:

Mailgroep, gekoppeld aan één adres
Moblog Foto komt 4 keer aan
Eigen mail Foto komt 2 keer aan
einde koppeling

Check mail Check mail komt 1 keer aan!

Nu jij! _/-\o_ Ik zie het echt niet meer hoor! ;(

  • bigben04
  • Registratie: December 2001
  • Laatst online: 30-08 20:47
Nu jij! _/-\o_ Ik zie het echt niet meer hoor! ;(
crisp schreef op 10 September 2003 @ 12:44:
[...]

ik meen ooit ergens gelezen te hebben dat de mail() functie van PHP zelf ook een To-header genereerd, en dat als je het ook in de header al opgeeft je dus 2 To-headers hebt, en dat sommige mailservers dan het bericht ook 2x afleveren.
Zelf heb ik dit probleem nooit ondervonden echter, en mogelijk dat het een oude versie PHP betrof, het was dan ook een wild-guess ;)
Heb je dit al geverifieerd? Zo nee, comment dan regel 23 (volgens nummering in startpost) uit, kijken wat ie dan doet.

[ Voor 6% gewijzigd door bigben04 op 10-09-2003 16:51 ]


Verwijderd

Topicstarter
Volgens mij doet ie het nu goed.

Even een test periode overheen laten gaan.
Pagina: 1