Kom ihåg mig?
Home Menu

Menu


Nyhetsbrevs webbapplikation...

Ämnesverktyg Visningsalternativ
Oläst 2008-04-28, 15:44 #1
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
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>
Här har vi min PHP sidan som hanterar utskicket:

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);
}
Som det är nu, skickas självklart bara ett epost ut, till första personen i epostlistan.
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.
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-28, 16:49 #2
Urme Urme är inte uppkopplad
Medlem
 
Reg.datum: Jun 2005
Inlägg: 108
Urme Urme är inte uppkopplad
Medlem
 
Reg.datum: Jun 2005
Inlägg: 108
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!
Urme är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-28, 19:28 #3
jlg jlg är inte uppkopplad
Medlem
 
Reg.datum: Nov 2004
Inlägg: 93
jlg jlg är inte uppkopplad
Medlem
 
Reg.datum: Nov 2004
Inlägg: 93
http://jquery.com/
jlg är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-29, 08:45 #4
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
Citat:
Originally posted by Urme@Apr 28 2008, 16:49
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
Lycka till

Tack, kanske inte direkt fick användning för någon av din kod, men din kod kläckte nöten eller vad man brukar säga.

setTimeout() var allt jag behövde! Nu rullar det på som det skall. Återkommer med resultat om någon är intresserad.
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-29, 08:55 #5
DeSotos avatar
DeSoto DeSoto är inte uppkopplad
Flitig postare
 
Reg.datum: Oct 2005
Inlägg: 323
DeSoto DeSoto är inte uppkopplad
Flitig postare
DeSotos avatar
 
Reg.datum: Oct 2005
Inlägg: 323
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.
DeSoto är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-29, 09:39 #6
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
Citat:
Originally posted by DeSoto@Apr 29 2008, 08:55
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.
Tack för din synpunkt. Hade detta som tanke oxå.
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.
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 16:22.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017