Zo zou hij moeten werken:
<?
require_once "lib/Swift.php";
require_once "lib/Swift/Connection/SMTP.php";
$smtp =& new Swift_Connection_SMTP("smtp1.servage.net", 25);
$smtp->setUsername("********");
$smtp->setpassword("********");
$swift =& new Swift($smtp);
$bericht = new Swift_Message("Mailing", $htmlbody, "text/html");
//mailadressen ophalen
$mailQuery = "SELECT email FROM mailing";
$mailResult = mysql_query($mailQuery);
if(!$mailResult)
{
echo 'Het ophalen van de mailadressen is mislukt! Error:' . mysql_error();
}
else
{
$ontvangers =& new Swift_RecipientList();
$ontvangers->addTo("[email protected] ", "Mailing");
while($row = mysql_fetch_assoc($mailResult))
{
$ontvangers->addTo($row['mail']);
}
//Het aantal dat verzonden is opvragen
$swift->batchSend($message, $recipients, new Swift_Address("[email protected] ", "Mailing");
}
?>
Link gekopieerd
Na 3 uur stoeien heb ik het onderstaande script..
Ik moet er nog een deel van een plain mail inzetten, en de verwijzing naar welke tabel moet er nog in...
Mijn vraag is nu:
Kan ik de plain tekst mail net zo erin zetten als de html?
Waar geef ik aan dat het script in tabal 'mailing' moet kijken naar de rijen email en naam?
En mijn laatste vraag...
Klopt dit script? of ben ik nog iets vergeten ???
Ik hoor graag jullie mening...Alvast bedankt !
<?
$hostname = '********';
$username = '********';
$password = '********';
$database = '********';
mysql_connect("$hostname","$username","$password");
mysql_select_db("$database");
// An HTML email through Swiftmailer (
http://www.swiftmailer.org ).
/************ Set up the HTML body. *******************/
// Below the $htmlbody variable contains all the HTML content of my email.
$htmlbody = ' Hier mijn htmlcontent '
require('lib/Swift.php');
require('lib/Swift/Connection/SMTP.php');
/* this handles the throttling */
require('lib/Swift/Plugin/AntiFlood.php');
/* this holds all of your addresses */
$recipients = new Swift_RecipientList();
/* Grab the addresses from the DB (this is using MDB2) */
$result = "SELECT email FROM mailing";
while ($row = $result->fetchRow())
{
$recipients->addTo($row['email'], $row['naam']);
}
@$result->free();
try
{
$smtp =& new Swift_Connection_SMTP("smtp1.********.net", 25);
$smtp->setUsername("********");
$smtp->setpassword("********");
set_time_limit(0);
$swift->log->enable();
/* 100 mails per batch with a 60 second pause between batches */
$swift->attachPlugin(new Swift_Plugin_AntiFlood(100, 60),
'anti-flood');
flush();
$message = new Swift_Message('Mailing');
$message->setCharset('utf-8');
$message->setReplyTo(
[email protected] );
$message->setReturnPath(
[email protected] );
$message->headers->set('Errors-To',
[email protected] );
$message->attach(new Swift_Message_Part($plain_content));
$message->attach(new Swift_Message_Part($htmlbody, 'text/html'));
$num_sent = $swift->batchSend($message, $recipients, new Swift_Address(
[email protected] , 'Update'));
$swift->disconnect();
?>
Link gekopieerd
Er moet een quote bij op regel 52.
Om adressen uit een database te halen kan je die gewoon net als altijd met een SQL query ophalen, bedoel je dat?
Link gekopieerd
Ik heb het script deels van het net.
Er staat op regel 28 /* Grab the addresses from the DB
Echter zie ik niet dat hij naar de database verwijst...
Wat moet ik daar dan neerzetten?
Link gekopieerd
Een SELECT query om de adressen uit de database te selecteren misschien?
Link gekopieerd
Heb de missende quote en de query aangepast in bovenstaand script...
Link gekopieerd
Uiteraard moet je de query wel nog uitvoeren. Verder zul je die while loop daarna ook nog aan willen passen aangezien je lijkt mij geen PDO gebruikt. Dus het zal zoiets worden:
<?php
$sql = "SELECT email FROM mailing";
if(!$result = mysql_query($sql))
{
trigger_error(mysql_error().' In query: '.$sql);
}
else
{
while($row = mysql_fetch_assoc($result))
{
// Rest van script...
}
}
?>
Link gekopieerd
Betreft die error die je krijgt. Ik krijg ook wel eens zo´n error omdat ik de mailtjes vanuit WAMPServer wil versturen.
Kijk eens of je ook een error krijgt als je online mailtjes verstuurd.
...mail dan wel alleen jezelf, als test dan...
Link gekopieerd
Ik weet nu waar de error vandaan komt.
Navraag bij de hosting leert dat ik maximaal 20 mailtjes per keer en max 300 mails per uur mag versturen.
Ik moet dus een batch maken die dat kan.
Ik hoop dat iemand mij kan helpen met het maken van de batch aangezien ik daar echt niet uitkom...
Link gekopieerd
Ik heb het script nu zo werkend dat ik een batch mail kan versturen.
Echter wil ik nu nog dat het script de mailadressen 'email' uit de database 'mailing_test' haalt en omdat ik de decorator er ook in heb moet ook de naam uit de rij 'naam' gehaald worden.
Ik heb het script geprobeert te maken met mysql,maar het werkt niet.
Wie kan mij helpen...
Deel van het script:
<?
$mailQuery = "SELECT email, naam FROM mailing_test";
$mailResult = mysql_query($mailQuery);
if(!$mailResult)
{
echo 'Het ophalen van de mailadressen is mislukt! Error:' . mysql_error();
}
else
{
$recipients =& new Swift_RecipientList();
while($row = mysql_fetch_assoc($mailResult))
{
$to->addBcc($row['email']);
}
$msg = new Swift_Message ($subj, $body, 'text/html');
$to = array (
new Swift_Address ($row['email'], $row['naam']),
);
$replacements = array (
$row['email'] => array ('{naam}' => $row['naam']),
);
$swift->attachPlugin(new Swift_Plugin_Decorator($replacements), "decorator");
foreach ($to as $address) {
$recipients->addTo ($address);
}
$number_sent = $swift->batchSend ($msg, $recipients, $from);
$swift->disconnect ();
echo 'De mailing is niet verstuurd naar de volgende e-mail adressen:';
echo '<pre>';
print_r ($log->getFailedRecipients());
echo '</pre>';
echo 'Het bericht is verzonden naar ' . $number_sent . ' ontvangers.';
?>
Alvast bedankt voor de hulp...
Link gekopieerd