Avatar billede Asger Carlsen Nybegynder
24. oktober 2005 - 18:15 Der er 27 kommentarer og
1 løsning

Hjælp til at bruge mail() funktionen

Jeg vil med denne kode sende en nyhedsmail. Mit problem er at det kun er den første i MySQL-databasen der får en mail. Er det bare en lille fejl, eller kan jeg ikke sende så mange mails på denne måde? Der er ca. 50 mails i databasen, og der kommer flere til.

Kode:
----------------------------------------------
$hent_mails = mysql_query("SELECT mail from et_mails_billeder");
while ($mails = mysql_fetch_Array($hent_mails))
{
    extract($mails);
  mail("$mail","Nyhedsmail fra...","
  tekst.....
  ");
}
Avatar billede jaw Nybegynder
24. oktober 2005 - 18:19 #1
Du kan sagtens sende flere. Men hvis du har B-One, har jeg ladet mig fortælle at der skal gå x-antal (vist 5) minutter mellem afsendelserne.
Avatar billede Asger Carlsen Nybegynder
24. oktober 2005 - 18:25 #2
Det har jeg desværre.. Vil der så gå 5 min, før næste mail blev sendt, eller vil kun den første kommer igennem. Efter hvad du har hørt?
Avatar billede pidgeot Nybegynder
24. oktober 2005 - 18:27 #3
Den nemme måde ville være blot at adskille alle modtagerne med et komma, og så smide dem ind i en BCC: header (de fleste vil nok ikke have deres e-mail adresse ud til andre ;)). Så behøver du kun en enkelt mail(), men alle får stadig mailen.
Avatar billede Asger Carlsen Nybegynder
24. oktober 2005 - 18:28 #4
pidgeot /> Lyder meget fornuftigt!
Hvordan skal min kode så se ud?
Avatar billede jaw Nybegynder
24. oktober 2005 - 18:36 #5
En mulighed er måske også:

$hent_mails = mysql_query("SELECT mail from et_mails_billeder");
while ($mails = mysql_fetch_Array($hent_mails))
{
    extract($mails);
  mail("$mail","Nyhedsmail fra...","
  tekst.....
  ");
  sleep(300);
}

...men så vil det selvfølgelig nok tage et par timer at få dem sendt ud :) - men du kan da lige undersøge med B-One, om det virkelig er 5 minutter.
Avatar billede pidgeot Nybegynder
24. oktober 2005 - 18:40 #6
Noget i stil med følgende...

$hent_mails = mysql_query('SELECT mail from et_mails_billeder');
while ($mail = mysql_feetch_assoc($hent_mails))
  $mails[]=$mail['mail'];
mail('undisclosed-recipients:', 'Nyhedsmail fra blabla', 'min tekst her', 'From: your@email.org\r\n' . 'Reply-To: your@email.org\r\n' . 'X-Mailer: PHP/' . phpversion() . '\r\n' . 'Bcc: ' . implode(', ', $mails) . '\r\n');

Der skal selvfølgelig rettes lidt til hist og her (eksempelvis skal der helst en egentlig e-mail ind i From og Reply-To, og en del af tingene kunne godt blive flyttet ud i nogle variable), men i det store og hele burde det der fungere. Husk at lade \r\n blive hvor de er, da de adskiller headerne.
Avatar billede Asger Carlsen Nybegynder
24. oktober 2005 - 18:55 #7
Jeg satte følgende ind, men uden noget resultatl der står mande START!! på siden. Som om den ikke får sendt mailen, og jeg modtager heller ikke noget.

Kode
---------------------------------------------------------
echo"Start!!";
$hent_mails = mysql_query('SELECT mail from et_mails_billeder');
while ($mail = mysql_feetch_assoc($hent_mails))
  $mails[]=$mail['mail'];
  mail('undisclosed-recipients:', 'Nyhedsmail fra blabla', 'min tekst her', 'From: your@email.org\r\n' . 'Reply-To: your@email.org\r\n' . 'X-Mailer: PHP/' . phpversion() . '\r\n' . 'Bcc: ' . implode(', ', $mails) . '\r\n');   

echo"DONE!";
Avatar billede pidgeot Nybegynder
24. oktober 2005 - 18:57 #8
Prøv at smide en error_reporting(E_ALL); ind før det hele og se hvad den siger.

Vær i øvrigt opmærksom på at du kun selv kommer til at modtage den mail hvis du er i tabellen - du kan evt. erstatte undisclosed-recipients: med din e-mail adresse.
Avatar billede Asger Carlsen Nybegynder
24. oktober 2005 - 19:01 #9
Prøvede at sætte min egen mail ind først, desværre stadig ingen
resultaterror_reporting(E_ALL); gav heller ikke noget. Får stadig kun min Start!

error_reporting(E_ALL);
$hent_mails = mysql_query('SELECT mail from et_mails_billeder');
while ($mail = mysql_feetch_assoc($hent_mails))
  $mails[]=$mail['mail'];
  mail('asger@crx-web.dk', 'Nyhedsmail fra blabla', 'min tekst her', 'From: your@email.org\r\n' . 'Reply-To: your@email.org\r\n' . 'X-Mailer: PHP/' . phpversion() . '\r\n' . 'Bcc: ' . implode(', ', $mails) . '\r\n');
Avatar billede jaw Nybegynder
24. oktober 2005 - 19:03 #10
Så lav en debug:
echo "debug: mail('asger@crx-web.dk', 'Nyhedsmail fra blabla', 'min tekst her', 'From: your@email.org\r\n' . 'Reply-To: your@email.org\r\n' . 'X-Mailer: PHP/' . phpversion() . '\r\n' . 'Bcc: ' . implode(', ', $mails) . '\r\n')";
Avatar billede Asger Carlsen Nybegynder
24. oktober 2005 - 19:06 #11
Jeg ved ikke lige hvad det skal sige, at lave en debug, men får nu:
debug: mail('asger@crx-web.dk', 'Nyhedsmail fra blabla', 'min tekst her', 'From: your@email.org ' . 'Reply-To: your@email.org ' . 'X-Mailer: PHP/' . phpversion() . ' ' . 'Bcc: ' . implode(', ', ) . ' ')
Avatar billede pidgeot Nybegynder
24. oktober 2005 - 19:10 #12
Foreslår den her i stedet:
$hent_mails = mysql_query('SELECT mail from et_mails_billeder');
while ($mail = mysql_feetch_assoc($hent_mails))
  $mails[]=$mail['mail'];
$to='asger@crx-web.dk';
$subject='Nyhedsmail fra blabla';
$message='min tekst her';
$headers='From: your@email.org\r\n';
$headers.='Reply-To: your@email.org\r\n'
$headers.='X-Mailer: PHP/' . phpversion() . '\r\n'
$headers.='Bcc: ' . implode(', ', $mails) . '\r\n'
echo("mail('$to','$subject','$message','$headers');");
mail($to, $subject, $message, $headers);

Reelt det samme, men lidt mere overskueligt mht. til output :)
Avatar billede Asger Carlsen Nybegynder
24. oktober 2005 - 19:11 #13
Jeg prøver, så længe den ender med at sende de mails den skal :)
Avatar billede jaw Nybegynder
24. oktober 2005 - 19:12 #14
Ja, den er også bedre :) Min var bare for at vise princippet. Og debug betyder på dansk vel nærmest fejlsøgning.

Dog vil jeg mene, at mellemrummet fra implode lige skal væk:
$headers.='Bcc: ' . implode(',', $mails) . '\r\n'
Avatar billede pidgeot Nybegynder
24. oktober 2005 - 19:12 #15
Det finder vi ud af - når du har prøvet at køre den, bedes du kopiere output herind.
Avatar billede pidgeot Nybegynder
24. oktober 2005 - 19:13 #16
Jaw: Mig bekendt plejer man nu at adskille e-mail adresser med både komma og mellemrum, men det er da muligt det ikke er nødvendigt :)
Avatar billede Asger Carlsen Nybegynder
24. oktober 2005 - 19:14 #17
Desværre ingen succes...
Får kun en heltk blank side, ikke engang min echo"start!";

echo"Start!!<br><br>";

$hent_mails = mysql_query('SELECT mail from et_mails_billeder');
while ($mail = mysql_feetch_assoc($hent_mails))
  $mails[]=$mail['mail'];
$to='asger@crx-web.dk';
$subject='Nyhedsmail fra blabla';
$message='min tekst her';
$headers='From: your@email.org\r\n';
$headers.='Reply-To: your@email.org\r\n'
$headers.='X-Mailer: PHP/' . phpversion() . '\r\n'
$headers.='Bcc: ' . implode(', ', $mails) . '\r\n'
echo("mail('$to','$subject','$message','$headers');");
mail($to, $subject, $message, $headers);

echo"<br>DONE!";
Avatar billede pidgeot Nybegynder
24. oktober 2005 - 19:15 #18
Ah, min fejl...

$headers.='Reply-To: your@email.org\r\n'
$headers.='X-Mailer: PHP/' . phpversion() . '\r\n'
$headers.='Bcc: ' . implode(', ', $mails) . '\r\n'

skal lige rettes til

$headers.='Reply-To: your@email.org\r\n';
$headers.='X-Mailer: PHP/' . phpversion() . '\r\n';
$headers.='Bcc: ' . implode(', ', $mails) . '\r\n';
Avatar billede pidgeot Nybegynder
24. oktober 2005 - 19:16 #19
B-one er jo desværre sat sådan op at PHP ikke viser fejlmeddelelserne, så man nærmest er nødt til at teste på sin egen maskine først :)
Avatar billede jaw Nybegynder
24. oktober 2005 - 19:16 #20
Pidgeot -> Hov, ja min fejl - jeg tænkte på noget andet, beklager :)
Avatar billede Asger Carlsen Nybegynder
24. oktober 2005 - 19:17 #21
Blev lidt bedere, får nu Start!! men desværre ikke mere...
Avatar billede pidgeot Nybegynder
24. oktober 2005 - 19:17 #22
Det gør skam ikke noget - som vist ovenfor begår vi jo alle fejl en gang i mellem :P
Avatar billede pidgeot Nybegynder
24. oktober 2005 - 19:18 #23
Gah! Linie 2 af min kode - der skal selvfølgelig stå mysql_fetch_array, ikke mysql_feetch_array... omend jeg undrer mig lidt over der ikke kommer en parse error ud af det...
Avatar billede Asger Carlsen Nybegynder
24. oktober 2005 - 19:21 #24
Får nu alle outputs, men ikke nogen mails...

Start!!

mail('asger@crx-web.dk','Nyhedsmail fra blabla','min tekst her','From: your@email.org\r\nReply-To: your@email.org\r\nX-Mailer: PHP/4.4.0\r\nBcc: asger@crx-web.dk, asgercarlsen88@hotmail.com, jens.carlsen@esenet.dk\r\n');
DONE!
Avatar billede pidgeot Nybegynder
24. oktober 2005 - 19:22 #25
Det går da rigtig godt - der skal *helst* stå mysql_fetch_assoc, omend mysql_fetch_array også kan bruges. Eneste forskel er bare at assoc er lidt "billigere" at udføre.
Avatar billede pidgeot Nybegynder
24. oktober 2005 - 19:23 #26
Du er sikekr på det ikke bare er fordi mailen er undervejs?
Avatar billede Asger Carlsen Nybegynder
24. oktober 2005 - 19:24 #27
Endeligt! med mysql_fetch_array var der hul igennem!
Jeg siger mange mange tak for hjælpen pidgeot
smid et svar og få dine velfortjente point :)
Avatar billede pidgeot Nybegynder
24. oktober 2005 - 19:26 #28
Værsgo!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Analytiker til Security Operations Center i Cyberdivisionen

Ennova A/S

Senior Developer

IT-Universitetet i København

CIO

Akademikernes A-kasse

AI Product Owner