Set subscriber status in Magento programmatically

Here an import script:

<?php
require_once("./app/Mage.php");
Mage::app();

$subscribers = array('[email protected]', '[email protected]');

foreach ($subscribers as $email) {
    # create new subscriber without send an confirmation email
    Mage::getModel('newsletter/subscriber')->setImportMode(true)->subscribe($email);

    # get just generated subscriber
    $subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email);

    # change status to "subscribed" and save
    $subscriber->setStatus(Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED);
    $subscriber->save();
}
?>

It seems that newsletter subscribers are also stored elsewhere. What you are setting is just a check in the customer base for some other use.

You need to do the following for each customer as well.

Mage::getModel('newsletter/subscriber')->subscribe($email);

See this link for a complete reference.


Thanks to the link @Ozair shared I was able to figure out what I needed to do.

I was successfully setting the status of the subscriber in the Magento subscriber object but I was not saving the object. I needed to call Magento's save method so it would call the ORM and write it to the database. All I need to do was add

$cust->save();

in the for loop. Below is the whole code snippet.

$collection = Mage::getResourceModel('newsletter/subscriber_collection')->showStoreInfo()->showCustomerInfo();

foreach ($collection as $cust) {
    $cust->setStatus(1);
    $cust->save();
}

I Hope this helps someone in the future. I needed it for a Constant Contact - Magento Synchronization extension I was making: http://www.freelunchlabs.com/store/constant-contact-and-magento-sync.html