PHPMailer bulkmail teller
Wellicht dat het helemaal niet kan met php, maar dat het misschien
met een iframe of javascript moet, maar...
Ik wil PHPmailer gaan gebruiken om naar/via mandrill van mailchimp te gaan mailen.
Dat gaat goed, geen probleem.
Heb de class geplaatst, en gebruik de default pagina die wordt aangeraden voor PHPMailer...
Maar als ik aan de deelnemers wil mailen op onze pagina, opgehaald uit de database,
en ik klik submit, schiet de pagina eerst in de "ik ben bezig"-stand (je ziet zo'n draai-dingetje dat ie bezig is).
En pas als alle mail is verzonden komt de eindtekst in beeld dat de mail is verzonden...
Maar ik wil eigenlijk in beeld een teller hebben die elke keer als een mail is verzonden,
afloopt van aantal deelnemers naar nul. Op zich moet me een teller wel lukken.
Maar de vraag is meer:
Hoe krijg ik nou een teller tijdens dat nadenken in beeld?
Iemand een idee?
Code (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
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
<?php
include_once('PHPMailer/class.phpmailer.php');
include_once('PHPMailer/PHPMailerAutoload.php');
$aanhef = $_REQUEST['templatesubject'];
$content = $_REQUEST['eigentekst'];
$towhom = $_REQUEST['towhom'];
$seiz_arr = getAdminVars($sleutel);
$seiz = substr($seiz_arr[2],2,2)+1; //echo $seiz."<br>";
if($towhom=="selftest"){
$query_sendto = mysql_query("SELECT email FROM deelnemers ORDER BY inschrijfnr");
while ( list($email) = mysql_fetch_array($query_sendto) ){
echo " OK ";
if($email!=""){
$mail = new PHPMailer(); // defaults to using php "mail()"
$replytomail = "[email protected]";
$replytoname = "afzendernaam";
$address = $email;
$bccaddress = "[email protected]";
$mail->AddReplyTo($replytomail,$replytoname);
$mail->IsSMTP();
$mail->IsHTML(true);
$mail->SetFrom($replytomail,$replytoname);
$mail->AddAddress($address, "");
$mail->AddBCC($bccaddress, "");
$mail->Subject = $aanhef;
//$mail->MsgHTML($body);
$mail->AddEmbeddedImage('images/Logo_ijsclub.jpg', 'logoimg', 'images/Logo_ijsclub.jpg');
$mail->AddEmbeddedImage('images/mailtemplate-bottom-bar.png', 'lijnimg', 'images/mailtemplate-bottom-bar.png');
include_once('mail_template_bodyis.php');
$mail->Body .= $body;
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent to ".$email." !<br>";
}
}
}//end of while
}//end of if
?>
include_once('PHPMailer/class.phpmailer.php');
include_once('PHPMailer/PHPMailerAutoload.php');
$aanhef = $_REQUEST['templatesubject'];
$content = $_REQUEST['eigentekst'];
$towhom = $_REQUEST['towhom'];
$seiz_arr = getAdminVars($sleutel);
$seiz = substr($seiz_arr[2],2,2)+1; //echo $seiz."<br>";
if($towhom=="selftest"){
$query_sendto = mysql_query("SELECT email FROM deelnemers ORDER BY inschrijfnr");
while ( list($email) = mysql_fetch_array($query_sendto) ){
echo " OK ";
if($email!=""){
$mail = new PHPMailer(); // defaults to using php "mail()"
$replytomail = "[email protected]";
$replytoname = "afzendernaam";
$address = $email;
$bccaddress = "[email protected]";
$mail->AddReplyTo($replytomail,$replytoname);
$mail->IsSMTP();
$mail->IsHTML(true);
$mail->SetFrom($replytomail,$replytoname);
$mail->AddAddress($address, "");
$mail->AddBCC($bccaddress, "");
$mail->Subject = $aanhef;
//$mail->MsgHTML($body);
$mail->AddEmbeddedImage('images/Logo_ijsclub.jpg', 'logoimg', 'images/Logo_ijsclub.jpg');
$mail->AddEmbeddedImage('images/mailtemplate-bottom-bar.png', 'lijnimg', 'images/mailtemplate-bottom-bar.png');
include_once('mail_template_bodyis.php');
$mail->Body .= $body;
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent to ".$email." !<br>";
}
}
}//end of while
}//end of if
?>
Maar ik raadt je aan met JavaScript een AJAX request te maken naar de bepaalde pagina en dan het resultaat van de AJAX request te printen op het scherm.
Dat is dynamischer
Maar hier jou wens;
Code (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
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
<?php
include_once('PHPMailer/class.phpmailer.php');
include_once('PHPMailer/PHPMailerAutoload.php');
$aanhef = $_REQUEST['templatesubject'];
$content = $_REQUEST['eigentekst'];
$towhom = $_REQUEST['towhom'];
$seiz_arr = getAdminVars($sleutel);
$seiz = substr($seiz_arr[2],2,2)+1; //echo $seiz."<br>";
if($towhom=="selftest"){
$query_sendto = mysql_query("SELECT email FROM deelnemers ORDER BY inschrijfnr");
while ( list($email) = mysql_fetch_array($query_sendto) ){
echo " OK ";
if($email!=""){
$mail = new PHPMailer(); // defaults to using php "mail()"
$replytomail = "[email protected]";
$replytoname = "afzendernaam";
$address = $email;
$bccaddress = "[email protected]";
$mail->AddReplyTo($replytomail,$replytoname);
$mail->IsSMTP();
$mail->IsHTML(true);
$mail->SetFrom($replytomail,$replytoname);
$mail->AddAddress($address, "");
$mail->AddBCC($bccaddress, "");
$mail->Subject = $aanhef;
//$mail->MsgHTML($body);
$mail->AddEmbeddedImage('images/Logo_ijsclub.jpg', 'logoimg', 'images/Logo_ijsclub.jpg');
$mail->AddEmbeddedImage('images/mailtemplate-bottom-bar.png', 'lijnimg', 'images/mailtemplate-bottom-bar.png');
include_once('mail_template_bodyis.php');
$mail->Body .= $body;
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
}
}
echo "Message sent to ".$email." !<br>";
}//end of while
}//end of if
?>
include_once('PHPMailer/class.phpmailer.php');
include_once('PHPMailer/PHPMailerAutoload.php');
$aanhef = $_REQUEST['templatesubject'];
$content = $_REQUEST['eigentekst'];
$towhom = $_REQUEST['towhom'];
$seiz_arr = getAdminVars($sleutel);
$seiz = substr($seiz_arr[2],2,2)+1; //echo $seiz."<br>";
if($towhom=="selftest"){
$query_sendto = mysql_query("SELECT email FROM deelnemers ORDER BY inschrijfnr");
while ( list($email) = mysql_fetch_array($query_sendto) ){
echo " OK ";
if($email!=""){
$mail = new PHPMailer(); // defaults to using php "mail()"
$replytomail = "[email protected]";
$replytoname = "afzendernaam";
$address = $email;
$bccaddress = "[email protected]";
$mail->AddReplyTo($replytomail,$replytoname);
$mail->IsSMTP();
$mail->IsHTML(true);
$mail->SetFrom($replytomail,$replytoname);
$mail->AddAddress($address, "");
$mail->AddBCC($bccaddress, "");
$mail->Subject = $aanhef;
//$mail->MsgHTML($body);
$mail->AddEmbeddedImage('images/Logo_ijsclub.jpg', 'logoimg', 'images/Logo_ijsclub.jpg');
$mail->AddEmbeddedImage('images/mailtemplate-bottom-bar.png', 'lijnimg', 'images/mailtemplate-bottom-bar.png');
include_once('mail_template_bodyis.php');
$mail->Body .= $body;
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
}
}
echo "Message sent to ".$email." !<br>";
}//end of while
}//end of if
?>
Simpelweg de echo aan het einde doet niet wat ik wil...
De pagina wordt dan nog steeds pas geladen als de gehele while lus is doorlopen...
Als ik in ons geval 250 mensen moet mailen, moet ik eerst 5 minuten wachten voordat ik een pagina te zien krijg dat alle 250 mails al dan niet succesvol waren.
Maar ik wil zo graag kunnen zien hoe lang ik nog moet wachten...
De optie om met javascript de pagina aan te roepen is misschien wel wat...
Het is in elk geval een poging waard om te kijken hoe het zich gedraagt.
Als er echt geen andere optie is vrees ik dat ik maar moet gaan werken met het steeds reloaden van de pagina op bijvoorbeeld een div. Aldanniet via javascript->ajax aanroep, danwel misschien via iframe...
Ik had gehoopt dat er echter een andere mogelijkheid was om in die while loop in te breken
na elke mail...
gr Eric
Met een AJAX-request kan je dit dan bekijken. Uiteraard moet het mailen zelf op de achtergrond plaatsvinden (cronjob) en niet via een browserproces. Dan hoeft je browser ook niet 'na te denken' wat eigenlijk wachten is tot het einde van de scriptuitvoer.
Gewijzigd op 14/08/2015 09:02:48 door - Ariën -
Schrijf een eigen mailqueue en handel deze (via een cron) in blokken van X e-mailberichten af oid (zodat je nog steeds een soort van bulkmail-functionaliteit hebt).
Helemaal nog niet aan gedacht...
Ga ik vanavond eens rustig op m'n gemakje uitvogelen :-)