Avatar billede straszek Praktikant
28. september 2004 - 12:39 Der er 8 kommentarer og
1 løsning

trimning af mail funktion

Jeg bruger nedenstående kode til at hente email adresse ud fra en mysql database og derefter sende en mail til disse adresser. Det virker efter hensigten, men er ufatteligt langsomt. Det drejer sig om ca. 45 mails der skal sendes og det kan tage mellem 30-45 sek.

Så det vil være fedt hvis der var nogen der kunne hjælpe mig, således at det blev hurtigere at sende mail. Et alternativ kunne være at mail blev sendt i baggrunden uden at brugeren opdagede det. Nå man nu trykker på send sker der der ingen ting før alle mails er sendt, og det sker derfor ofte at nogen trykker på send flere gang.

Så en eller anden tekst " vent venligst" men processen er igang kunne også være godt.


Koden:

                   
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>SEND MAIL</title>
<LINK REL=StyleSheet href="http://www.xx.dk/css/nb.css">
        </head>
       
        <?
               
        if($test==1){
           

$findemail = mysql_query("select * from xxx_menux, user where user.id=xxx_menux.user_id and xxx_menux.menu_id ='$gruppeid' AND user.aktiv='ja'")
            or    die(mysql_error());
            while ($raekke = mysql_fetch_array($findemail))
        {
              extract($raekke);
           
                    mail("$email",
                    "overskrift",
                    "tekst",
                            "From: disku-dennis@xxx.dk\nReply-to: disku-dennis@xxx.dk");
        }
           
           
           
echo "
            <p>    <p>
        <center><a href=luk2.php?submenu=$gruppeid&type=opretemne&debathe=$kat&kat=$kat><b>Din mail er blevet sendt<br></b>luk vinduet</font></a></center>    ";
       
       

       
            }else{
       
    echo"<h3>Sendmail</h3>";
echo "<Form Method=post Action=sendmail.php>
<input type=\"hidden\" name=\"test\" value=\"1\">";
echo "<p><font size=-2><strong>Titel</strong><br> <input type=text name=\"titel\" size=35 maxlenght=8><br>";

echo "Skriv teksten her:<br>
<textarea name=\"tekst\" cols=40 rows=10></textarea><p>";
echo "<input type=submit value=Opret> - <B>N.B: Der kan gå op til 30 sekunder fra du trykke på 'send' til der sker noget. Tryk kun på 'send' <strong>én</strong> gang!</B>";
echo "</form>";

}
Avatar billede bromer Nybegynder
28. september 2004 - 14:27 #1
Det tager normalt langt tid at sende en mail. Jeg har tidligere løst det ved at indsætte mailen i en tabel i min database og så samle dem op i et cronjob, der ikke laver andet end at sende mails.
Avatar billede straszek Praktikant
28. september 2004 - 14:28 #2
Vil du ikke lave et eksempel og poste lidt kode til hvordan det kan gøres?
Avatar billede bromer Nybegynder
28. september 2004 - 14:33 #3
Din while ville jeg udskifte med

    while ($raekke = mysql_fetch_array($findemail))
        {
              extract($raekke);
         
                    mysql_query("INSERT INTO mail (to,subject,body,from) VAULES ("$email","overskrift","tekst","From: disku-dennis@xxx.dk\nReply-to: disku-dennis@xxx.dk");
        }


Dertil er er så oprettet en tabel som:
CREATE TABLE mail(id int(32) unsigned auto_increment primary key, to varchar(200), subject varchar(200),body TEXT,from TEXT, done INT(32));

og så have dette i et cron job
$res = mysql_query("SELECT * FROM mail WHERE done = '0');
while($row = mysql_fetch_array($res)) {
  mail($row['to'],$row['subject'],$row['body'],$row['from']);
  mysql_query("UDPATE mail SET done = 1 WHERE id = " . $row['id']);
}
Avatar billede bromer Nybegynder
28. september 2004 - 14:34 #4
ahh.. jeg kan se at der mangler en slut-parentes i den første query.. sådan er det når man skriver det direkte i boksen her :)
Avatar billede straszek Praktikant
28. september 2004 - 14:58 #5
Det ser lovende ud, jeg får dog en fejl  - Parse error: parse error -i denne linje:
mysql_query("INSERT INTO send_mail (to, subject, body, from) VAULES ('$email", "$overskrift", "$tekst", "From:disku-dennis@xxx.dk\nReply-to: disku-dennis@xxx.dk");
Avatar billede bromer Nybegynder
28. september 2004 - 15:04 #6
yep.. se hvad jeg skrev før.. det skal nok være:

mysql_query("INSERT INTO send_mail (to, subject, body, from) VAULES ("$email", "$overskrift", "$tekst", "From:disku-dennis@xxx.dk\nReply-to: disku-dennis@xxx.dk"));
Avatar billede straszek Praktikant
28. september 2004 - 15:15 #7
Jeg får stadig samme fejl samme sted
Avatar billede bromer Nybegynder
28. september 2004 - 15:22 #8
mysql_query("INSERT INTO send_mail (to, subject, body, from) VALUES ($email,$overskrift,$tekst,'From:disku-dennis@xxx.dk\nReply-to: disku-dennis@xxx.dk')");
Avatar billede straszek Praktikant
01. oktober 2004 - 10:23 #9
Det går frem af, men jeg har problemer med at få det til at køre som et cron job. Hvis du har tid så tag et kik på http://www.eksperten.dk/spm/545703

Søren
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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