swiftmailer probleem
ik probeer mijn horizon te verruimen door automatisch mails te versturen via swiftmailer, spijtig genoeg krijg ik dit niet voorelkaar. Ik probeer namelijk om connectie te maken met mijn database en vervolgens de mails te versturen.
ik zou ook graag willen dat de rij send in mijn database van 0 op 1 gezet wordt wanneer een mail verstuurd is weet alleen niet hoe ik dit moet implementeren.
dit is de code die ik tot nu toe heb
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
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
<?php
/** THIS CODE REQUIRES Swift 3.1 OR HIGHER **/
require_once("init1.php");
require_once "lib/Swift.php";
require_once "lib/Swift/Connection/SMTP.php";
require_once "lib/Swift/Plugin/Decorator.php";
//Instantiate Swift as usual
$swift =& new Swift(new Swift_Connection_SMTP("smtp.yourhost.com"));
//Create the message, using some unique variables to search for
$message =& new Swift_Message("Hey {name}, what's up?", "It's a bit {weather} today wouldn't you say?");
//Extend the replacements class
class Replacements extends Swift_Plugin_Decorator_Replacements {
function getReplacementsFor($address) {
$query = "select
naam as `{name}`, lastname as `{lastname}`
from testmail
where email = '" . mysql_real_escape_string($address) . "'";
$result = mysql_query($query);
if (mysql_num_rows($result) > 0)
{
return mysql_fetch_assoc($result);
}
}
}
//Load the plugin with the extended replacements class
$swift->attachPlugin(new Swift_Plugin_Decorator(new Replacements()), "decorator");
//Send messages
$swift->send($message, "[email protected]", "my@adress");
$swift->send($message, "[email protected]", "my@adress");
$swift->disconnect();
?>
/** THIS CODE REQUIRES Swift 3.1 OR HIGHER **/
require_once("init1.php");
require_once "lib/Swift.php";
require_once "lib/Swift/Connection/SMTP.php";
require_once "lib/Swift/Plugin/Decorator.php";
//Instantiate Swift as usual
$swift =& new Swift(new Swift_Connection_SMTP("smtp.yourhost.com"));
//Create the message, using some unique variables to search for
$message =& new Swift_Message("Hey {name}, what's up?", "It's a bit {weather} today wouldn't you say?");
//Extend the replacements class
class Replacements extends Swift_Plugin_Decorator_Replacements {
function getReplacementsFor($address) {
$query = "select
naam as `{name}`, lastname as `{lastname}`
from testmail
where email = '" . mysql_real_escape_string($address) . "'";
$result = mysql_query($query);
if (mysql_num_rows($result) > 0)
{
return mysql_fetch_assoc($result);
}
}
}
//Load the plugin with the extended replacements class
$swift->attachPlugin(new Swift_Plugin_Decorator(new Replacements()), "decorator");
//Send messages
$swift->send($message, "[email protected]", "my@adress");
$swift->send($message, "[email protected]", "my@adress");
$swift->disconnect();
?>
dus ik zou dit graag met een iterator doen die niet alleen de mails verstuurd maar ook de kolom send aanpast iedere keer dat een mailing verstuurd wordt.
bijv huidige mailing wordt alles op 1 gezet bij volgende mailingwordt eerst alles terug op 0 gezet en vervolgens weer op 1 als de mailing verstuurd is, of zou het handiger zijn om aan de hand van het aantal mailings het van 0 naar 1,2 enz op te laten lopen.
ik kan spijtig genoeg geen foutmeldingen geven omdat de pagina blank blijft en de mail die ik probeer te versturen niet verstuurd wordt.
graag een werkend voorbeeld aangezien ik eerst de code moet zien wil ik het naar eigen behoeften kunnen aanpassen
alvast bedankt voor jullie hulp
mvg Paul
Gewijzigd op 01/01/1970 01:00:00 door Paul prive
Als je het script zoals dat daar staat uitgevoerd hebt, klopt het wel dat de pagina leeg blijft en je zelf geen mailtje krijgt. De email adressen die je in de send() methode opgeeft lijken me niet helemaal correct...
weet ik ook wel dit zijn fictieve
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$conn = new Swift_Connection_SMTP ();
$swift = new Swift ($conn);
$from = new Swift_Address ('[email protected]', 'Jouw Naam');
$subj = 'Jouw Titel';
$body = 'Jouw HTML';
$msg = new Swift_Message ($subj, $body, 'text/html');
$recipients = new Swift_RecipientList();
$sql = "
SELECT naam, email
FROM leden
ORDER BY naam ASC
";
if (!$res = mysql_query ($sql)) {
trigger_error (mysql_error ());
}
else {
while ($row = mysql_fetch_assoc ($res)) {
$recipient = new Swift_Address ($row['email'], $row['naam']);
$recipients->addTo ($recipient);
}
// en verzenden maar die hap
$swift->batchSend ($msg, $recipients, $from);
}
?>
$conn = new Swift_Connection_SMTP ();
$swift = new Swift ($conn);
$from = new Swift_Address ('[email protected]', 'Jouw Naam');
$subj = 'Jouw Titel';
$body = 'Jouw HTML';
$msg = new Swift_Message ($subj, $body, 'text/html');
$recipients = new Swift_RecipientList();
$sql = "
SELECT naam, email
FROM leden
ORDER BY naam ASC
";
if (!$res = mysql_query ($sql)) {
trigger_error (mysql_error ());
}
else {
while ($row = mysql_fetch_assoc ($res)) {
$recipient = new Swift_Address ($row['email'], $row['naam']);
$recipients->addTo ($recipient);
}
// en verzenden maar die hap
$swift->batchSend ($msg, $recipients, $from);
}
?>
Hartelijk dank voor deze oplossing je hebt me hier al reuze mee opweg geholpen, nog een klein vraagje hoe pas ik mijn kolom send nu aan zodat er een 1 komt te staan als de mail verstuurd is en voordat de nieuwe mailing buitengaat weer op 0 gezet wordt?
alvast bedankt voor je reactie
dat gaat niet rechtstreeks, want die batch wordt in 1 keer verzonden. Je kunt wel naderhand een array opvragen van adressen die fout gegaan zijn:
Vanuit een soort omgekeerde logica mag je er vanuit gaan dat alle adressen die niet in die array voorkomen, gelukt zijn. Met behulp van die array kun je dus een query maken die alle niet gelukte op 0 laat staan en de wel gelukt op 1.
Ik stel dan ook voor: zet alles aan het begin van je script op 1 met
UPDATE leden
SET verzonden = 1
en aan het eind de foute op 0 met behulp van die array. Dan kun je het later nog eens proberen.
als ik dit doe dan krijg ik de volgende foutmelding
Fatal error: Call to undefined method Swift::getFailedRecipients() in D:\workspace\indiana\gallery\batch.php on line 27
als ik volgens de pagina Dealing with failed recipients dit toevoeg
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
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
<?php
require_once "lib/Swift.php";
require_once "lib/Swift/Connection/SMTP.php";
$swift =& new Swift(new Swift_Connection_SMTP("smtp.myhost"));
$swift->log->enable();
$from = new Swift_Address ('[email protected]', 'webmaster ');
$subj = 'nieuwsbrief';
$body = 'my body ';
$msg = new Swift_Message ($subj, $body, 'text/html');
require_once('init.php');
$recipients = new Swift_RecipientList();
$sql = "
SELECT naam, email
FROM testmail
ORDER BY naam ASC
";
if (!$res = mysql_query ($sql)) {
trigger_error (mysql_error ());
}
else {
while ($row = mysql_fetch_assoc ($res)) {
$recipient = new Swift_Address ($row['email'], $row['naam']);
$recipients->addTo ($recipient);
}
// en verzenden maar die hap
$num_sent = $swift->send($msg, $recipients, $from);
//$errors = $swift->getFailedRecipients();
echo "Message sent to $num_sent of 2 recipients";
echo "Failed recipients:<br />";
echo implode(" ,", $swift->log->getFailedRecipients());
}
?>
require_once "lib/Swift.php";
require_once "lib/Swift/Connection/SMTP.php";
$swift =& new Swift(new Swift_Connection_SMTP("smtp.myhost"));
$swift->log->enable();
$from = new Swift_Address ('[email protected]', 'webmaster ');
$subj = 'nieuwsbrief';
$body = 'my body ';
$msg = new Swift_Message ($subj, $body, 'text/html');
require_once('init.php');
$recipients = new Swift_RecipientList();
$sql = "
SELECT naam, email
FROM testmail
ORDER BY naam ASC
";
if (!$res = mysql_query ($sql)) {
trigger_error (mysql_error ());
}
else {
while ($row = mysql_fetch_assoc ($res)) {
$recipient = new Swift_Address ($row['email'], $row['naam']);
$recipients->addTo ($recipient);
}
// en verzenden maar die hap
$num_sent = $swift->send($msg, $recipients, $from);
//$errors = $swift->getFailedRecipients();
echo "Message sent to $num_sent of 2 recipients";
echo "Failed recipients:<br />";
echo implode(" ,", $swift->log->getFailedRecipients());
}
?>
krijg ik deze foutmelding
Notice: Undefined property: Swift::$log in D:\workspace\indiana\gallery\batch.php on line 5
Fatal error: Call to a member function enable() on a non-object in D:\workspace\indiana\gallery\batch.php on line 5
heb jij er een idee van hoe ik dit kan oplossen?
Gewijzigd op 01/01/1970 01:00:00 door paul prive
alvast bedankt voor de hulp
.
ik zou graag weten waar ik de aanpassingen moet doen om het loggen aan te zetten maar weet niet waar ik dit moet doen in de swiftmailer classe zonder dat ik zometeen de hele boel naar de knoppen help
alvast bedankt voor julie Hulp
mvg Paul
Code (php)
1
2
3
4
2
3
4
<?php
require_once "swift/Swift/Log.php";
require_once "swift/Swift/LogContainer.php";
?>
require_once "swift/Swift/Log.php";
require_once "swift/Swift/LogContainer.php";
?>
en het loglevel op 3 zet:
dan kun je aan het einde van je script dit doen:
Nogmaals bedankt voor je hulp
Ik wens jou en natuurlijk alle andere phpers een gelukkig Nieuwjaar toe.
Paul
YW :-)