Swiftmailer en MYsql

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marco

Marco

11/01/2009 13:33:00
Quote Anchor link
Weet iemand of het mogelijk is om met swiftmailer bij het versturen van de mail een mysql link erin te zetten?

Dus in dit stukje:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
if ($swift->send($message, new Swift_Address("[email protected]", "Marco"), new Swift_Address("[email protected]", "Mijn site")))
?>


Iets als?:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?
$result
= mysql_query("SELECT * FROM mailing_test");
while ($row = mysql_fetch_assoc ($query)) {
$mailer->addBCC($row['email']);
$mail->SMTPAuth = true;
}

?>


Dit stukje komt uit mijn phpmailer, maar dit werkt niet meer.

Is dit dan in swiftmailer te plaatsen???

Als iemand mij hiermee kan helpen...graag...

Alvast bedankt...
 
PHP hulp

PHP hulp

24/11/2024 20:05:57
 
Joren de Wit

Joren de Wit

11/01/2009 13:46:00
Quote Anchor link
Uiteraard kan dat. Maak gebruik van de Swift_RecipientList: http://www.swiftmailer.org/wikidocs/v3/tutorials/multirecipients
 
Marco

Marco

11/01/2009 14:41:00
Quote Anchor link
Dank je, k heb het nu werkend!
 
Marco

Marco

11/01/2009 15:44:00
Quote Anchor link
Ik dacht dat ik het werkend had. Als ik een mailing van 250 verstuur krijg ik een error.

Is het ook mogelijk dat het script elke keer 25 of 50 stuks mailt en dan even wacht voordat hij weer verder mailt?

Ik heb het script deels hieronder :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?
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->addBcc($row['email']);
            }

            
            //Het aantal dat verzonden is opvragen
            $number_sent = $swift->send($bericht, $ontvangers, "[email protected]", "Mailing");
            echo 'Het bericht is verzonden naar ' . $number_sent . ' ontvangers.';
        }

?>


Ik weet dat het kan, alleen kom ik er niet uit hoe ik dat moet doen, hopelijk wil iemand mij hiermee helpen.

Niet Bumpen::
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de Afbeelding knop om je tekst aan te passen.

SanThe.
Gewijzigd op 01/01/1970 01:00:00 door Marco
 
Joren de Wit

Joren de Wit

11/01/2009 15:48:00
Quote Anchor link
Marco schreef op 11.01.2009 15:44:
Ik dacht dat ik het werkend had. Als ik een mailing van 250 verstuur krijg ik een error.
Welke error? Het zou in principe gewoon moeten werken...
 
Marco

Marco

11/01/2009 16:02:00
Quote Anchor link
Als ik naar een kleine database van 3 stuur om te testen werkt het inderdaad,maar zodra ik het naar de echte verstuur niet meer...

Dit is de melding:

Fatal error: Uncaught exception 'Swift_BadResponseException' with message 'Expected response code(s) [250] but got response [421 smtp1.servage.net Error: too many errors]' in /mounted-storage/home114a/sub008/sc22098-IKIW/www/site/admin/mailing/swift/lib/Swift.php:250 Stack trace: #0 /mounted-storage/home114a/sub008/sc22098-IKIW/www/site/admin/mailing/swift/lib/Swift.php(310): Swift->assertCorrectResponse(Object(Swift_Events_ResponseEvent), 250) #1 /mounted-storage/home114a/sub008/sc22098-IKIW/www/site/admin/mailing/swift/lib/Swift.php(319): Swift->command('RSET', 250) #2 /mounted-storage/home114a/sub008/sc22098-IKIW/www/site/admin/mailing/swift/lib/Swift.php(455): Swift->reset() #3 /mounted-storage/home114a/sub008/sc22098-IKIW/www/site/admin/mailing/swift/update-mailing.php(139): Swift->send(Object(Swift_Message), Object(Swift_RecipientList), 'noreply@derodeh...', 'De Rode Haan') #4 {main} thrown in /mounted-storage/home114a/sub008/sc22098-IKIW/www/site/admin/mailing/swift/lib/Swift.php on line 250
 
Joren de Wit

Joren de Wit

11/01/2009 16:09:00
Quote Anchor link
Quote:
421 smtp1.servage.net Error: too many errors
Hmm, de smtp server geeft aan dat er teveel fouten opgetreden zijn?

Misschien eens googlen naar deze foutmelding om te zien wat daar de oorzaak van zou kunnen zijn? Wellicht email adressen die niet kloppen, alhoewel ik dat niet zou verwachten. Andere mogelijkheid die ik kan bedenken is dat de server het als spam ziet dat je 250 mailtjes achter elkaar verzendt. Maar goed, wellicht dat google een antwoord heeft...
 
Midas

Midas

11/01/2009 16:11:00
Quote Anchor link
Kijk eens op swiftmailer.org naar batch mailen, en gebruik dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$batch
->setSleepTime(10); //Sleep for 10 seconds if an error occurs
?>
 
Marco

Marco

11/01/2009 16:17:00
Quote Anchor link
Ik heb dat batch mailen bekeken,maar snap niet hoe ik dat moet opzetten.
 
- SanThe -

- SanThe -

11/01/2009 16:22:00
Quote Anchor link
421 betekent 'service niet toegankelijk'
Dit kan worden veroorzaakt door te veel mailtjes tegelijk.
 
Marco

Marco

11/01/2009 16:26:00
Quote Anchor link
Dan zal ik dus toch via de batch moeten werken.

Op de site kan ik nergens voorbeelden vinden hoe dat werkt met een mysql database...
 
Midas

Midas

11/01/2009 19:44:00
Quote Anchor link
Zo zou hij moeten werken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?
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");
        }

?>
 
Marco

Marco

11/01/2009 19:47:00
Quote Anchor link
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 !

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
58
59
60
61
62
63
64
65
<?

$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(noreply@site.com);
        $message->setReturnPath(noreply@site.com);
        $message->headers->set('Errors-To', noreply@site.com);

        $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(noreply@site.com, 'Update'));

        $swift->disconnect();
?>
Gewijzigd op 01/01/1970 01:00:00 door Marco
 
Midas

Midas

11/01/2009 19:51:00
Quote Anchor link
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?
 
Marco

Marco

11/01/2009 19:54:00
Quote Anchor link
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?
 
Joren de Wit

Joren de Wit

11/01/2009 19:59:00
Quote Anchor link
Een SELECT query om de adressen uit de database te selecteren misschien?
 
Marco

Marco

11/01/2009 20:03:00
Quote Anchor link
Heb de missende quote en de query aangepast in bovenstaand script...
 
Joren de Wit

Joren de Wit

11/01/2009 20:09:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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...
    }
}

?>
 
Meddiecap B

Meddiecap B

12/01/2009 16:19:00
Quote Anchor link
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...
 
Marco

Marco

12/01/2009 17:35:00
Quote Anchor link
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...
 
Marco

Marco

13/01/2009 20:18:00
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?


         $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...
Gewijzigd op 01/01/1970 01:00:00 door Marco
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.