FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Flitig postare
|
Hej,
Jag håller på att försöka skapa en egen nyhetsbrevs webbapplikation i PHP, MySQL och AJAX/JS. Har en del problem dock. Och funderingar jag vill dela med mig av, i hopp om åsikter och vägledning. Att tillägga är att jag aldrig försökt göra något liknande inna, och aldrig gjort något seriöst i AJAX. Dock ser jag en potential med AJAX när det gäller denna applikation. Vad jag vill: 1. Man sparar sin e-post lista i mysql, vi kan låtsas att detta redan är klart. (I listan sparas, namn, efternamn, e-post, företag, senast utskick.) 2. Man skriver sitt e-post, och detta epost sparas i mysql. (denna funktion är också färdig) 3. Man klickar på skicka så skall epostet skickas ut till alla i epostlistan med phps mail() funktion. Första problemet jag stötte på var enkelt, att om man hade många e-post i sin lista så gjorde sidan en "time-out", och laddade aldrig färdigt. Annan nackdel var att sidan laddade och lät användaren stirra på en blank sida till hgela proceduren var färdig. Så jag vill alltså att användaren skall kunna följa händelseförloppet. e-post, för e-post, i sin webbläsare. Då tänkte jag, kan man inte dels hålla användaren uppdaterad men även göra så att man laddar listan bitvis och bara skickar 1-10 mail åt gången. Detta skulle även gjort så att sidan inte riskerade att sluta laddas. Med en AJAX funktion borde detta vara möjligt. Mitt problem landar dock på att jag enbart kan få igång AJAX funktionen, men att sedan få den att upprepa sig själv till dess att e-postlistan är genomkörd får jag ej att fungera och skulle vara tacksam för hjälp. Här har vi min AJAX function: Kod:
<script type="text/javascript" language="javascript"> <!-- //Browser Support Code function ajaxFunction(id, url, startAt){ var ajaxRequest; try{ ajaxRequest = new XMLHttpRequest(); } catch (e){ try{ ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try{ ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e){ alert("Your browser broke!"); return false; } } } ajaxRequest.onreadystatechange = function(){ if(ajaxRequest.readyState == 4){ document.getElementById(id).innerHTML = ajaxRequest.responseText; } else { document.getElementById(id).innerHTML = '<img src="image_layout/loading_bro.gif" alt="Laddar, detta kan ta ett flertal minuter..." /> Laddar...'; } } ajaxRequest.open("GET", url+startAt, true); ajaxRequest.send(null); startAt++; } startAt = 0; ajaxFunction('mailGateway', 'include/mailgate.php?startat=', startAt); //--> </script> Kod:
include('sendmail.php'); include('config.php'); //CONNECT TO MYSQL mysql_connect($server, $user, $pass); mysql_select_db($db); $testtext = 'Detta är ett test mail!<br />För att testa nya mailutskick.'; $from = '[email protected]'; $nummail = 1; $startat = $_GET['startat']; //id, firstname, lastname, company, email, gruop, lastmail, city, zip, street $sql = "SELECT id, firstname, lastname, email FROM ".$prefix."_qews_maillist ORDER BY firstname ASC LIMIT ".$startat.", ".$nummail.""; $result = mysql_query($sql); $i = 0; while ($row = mysql_fetch_assoc($result)) { $maillist[$i]['id'] = $row['id']; $maillist[$i]['email'] = $row['email']; $maillist[$i]['firstname'] = $row['firstname']; $maillist[$i]['lastname'] = $row['lastname']; $i++; } for($i = 0; $i < sizeof($maillist); $i++){ sendmail($maillist[$i]['email'], $testtext, 'Testar!', $from); $sql = "UPDATE ".$prefix."_qews_maillist SET lastmail = '".date('YmdHis')."' WHERE id = '".$maillist[$i]['id']."'"; mysql_query($sql) or die(mysql_error()); ?>skickat:<?=$maillist[$i]['email']?>;<? sleep(1); } Sedan uppdateras användarsidan med ett meddelande om att ett epost är utskickat till - någon epost-. Hur skall jag nu få det hela att upprepa sig till dess att alla epost fårr sitt meddelande. Tacksam för all vägledning och alla kreativa idéer ni har att komma med. |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Medlem
|
Jag gjorde ett sånt för skoj skull för typ två år sedan, men jag genererade bara ut emails i en sida och fake skickade e-mails på en annan sida.
Nu vet jag inte om detta är bästa sättet att göra det på. Du kan få kolla på källkoden, har laddat upp den här: http://www.urme.com/ajaxemail.zip Innehåller getemails.php där hämtar den emailadresserna, just nu är det bara en for-loop med fake-emails. Sendemail.php "skickar" mailet. Tar ju lite tid att skicka emails eftersom varje e-mail tar iaf 1sek som det är inställt nu. Du kanske kan förstå principen hur jag gjorde och bygga vidare ![]() Jag är ingen vidare expert på AJAX, så alla klagomål på koden undanbedes :P Lycka till! |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Medlem
|
|||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Flitig postare
|
Citat:
setTimeout() var allt jag behövde! Nu rullar det på som det skall. Återkommer med resultat om någon är intresserad. |
||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Flitig postare
|
Använd inte PHP:s egen mail-funktion för att göra massutskick, den öppnar en connection till mail-servern för varje mail som skickas, vilket gör utskicket väldigt långsamt. Jag tycker att du ska titta på Swift Mailer (http://www.swiftmailer.org), och även att istället för att använda Ajax för att göra utskicken, så schemalägger du en process som skickar ut kanske 100 mail åt gången, och låter den processen köras en gång i halvtimmen eller liknande. Detta kommer göra både att din mail-server mår bättre, och det gör att användaren inte behöver vänta på att utskicket ska göras eftersom det sker i bakgrunden.
|
|||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Flitig postare
|
Citat:
Dock är ett av kriterierna just att användaren "vill" se varje e-post som skickas. Dumt ja. hehe. Nä men jag försöker emulera program så som, SamLogic MultiMailer. Mest för att lära mig lite. Men om vi fortsätter kolla på nackdelarna med mail(). Hur dåligt mår servern av det? Vad är det värsta som kan hända? Finns det någon smärtgräns på hur många e-post som kan skickas? Har inget direkt behov av några MASSIVA utskick på 10 000 mail. Mer i landet 300 till 3000. Jag har valt att göra mitt script relativt slött, och som det fungerar nu påminner det nästan exakt om SamLogic MultiMailer. Har en delay på 1.5 sek per e-post. |
||
![]() |
![]() |
Svara |
|
|