Symfony1.4でRSS Feedを取得 and SwiftMailerでメール送信(gmail)

sfFeed2Pluginをインストールします。

# symfony plugin:install sfFeed2Plugin
# symfony cc

あとは簡単。RSSフィードをsfFeed2を使って取得します。

$feed = sfFeedPeer::createFromWeb('http://feed/rss.xml');
foreach( $feed->getItems() as $item)
{
    /* 
        $item->getTitle();
        $item->getLink();
        $item->getAuthorName();
        $item->getAuthorEmail();
        $item->getPubdate();
        $item->getUniqueId();
        $item->getDescription();
    */
}

複数のフィードをまとめて取得することも可能です。

$feed1 = sfFeedPeer::createFromWeb('http://feed/rss2.0.xml');
$feed2 = sfFeedPeer::createFromWeb('http://feed/rss2.0.xml');
$feed = sfFeedPeer::aggregate(array($feed1, $feed2),array('limit' => 30));
foreach( $feed->getItems() as $item){ }

User-Agentなどを指定して取得する方法もあります。

# symfony plugin:install sfFeed2Plugin
# symfony plugin:install sfWebBrowserPlugin
# symfony cc

でsfWebBrowserPluginを追加にンストールします。

$browser = new sfWebBrowser(
	array(
		'user_agent' => 'symfony 1.4 sfWebBrowser and sfFeed2Plugin',
		'timeout' => 15
	)
);
$url = 'http://feed/rss2.0.xml';
$feedString = $browser->get($url)->getResponseText();
$rssFeed = new sfRssFeed();
$rssFeed->fromXml($feedString);
$feed = $rssFeed->feed;
foreach( $feed->getItems() as $item){ }

SwiftMailerでメール送信(gmail)

添付ファイルのメールを送信しています。

      $message = $this->getMailer()->compose(
        'from@example.com',
        'to@example.com',
        'Subject is here.',
        'Body is here.'
      )->attach(
            Swift_Attachment::fromPath('/var/www/tmp/image.jpg')
      );
      $this->getMailer()->send($message);

いっぺんにセンドしてしまうこともできます。

      $message = $this->getMailer()->composeAndSend(
        'from@example.com',
        'to@example.com',
        'Subject is here.',
        'Body is here.'
      )->attach(
            Swift_Attachment::fromPath('/var/www/tmp/image.jpg')
      );

gmailで送るには/apps/frontend/config/factories.ymlに設定します。

dev:
  mailer:
    param:
      transport:
        class: Swift_SmtpTransport
        param:
          host: smtp.gmail.com
          port: 465
          encryption: ssl
          username: username
          password: password

gmailsmtpコネクションに多少時間がかかります。symfonyphpエンジンが遅いわけではないと思います。exim4のスマートホスト・sendmailで送るといいでしょう。

日本語のメールは上記では化けてしまうので(タイトル・本文) 文字化けしないように色々と自分で実装できるのですが、色々とややこしいのでkzl_Jp_Swift_Messageをお借りします。
http://www.kuzilla.co.jp/article.php/20100301symfony

PluginはDownloadしてplugins Directoryで解凍し
/config/ProjectConfiguration.class.phpのpublic function setup()内に下記の一行を追加します。

$this->enablePlugins('kzlJpSwiftMailerPlugin');

メールを送信する手順は下記のとおりです。

$message = kzl_Jp_Swift_Message::newInstance();
$message->setFrom('from@example.com');
$message->setTo('to@example.com');
$message->setSubject('日本語のタイトルでも大丈夫です');
$message->setBody('日本語の本文です。');
$message->attach(
    Swift_Attachment::fromPath('/var/www/tmp/image.jpg')
);
$this->getMailer()->send($message);

jpMailPluginを使う方法もありますがkzl_Jp_Swift_Messageがたぶん一番楽ちんです。ちょっと名前が長いので覚えられないな。kzl... 自分で実装するとなるとタイトルのエンコードが多少ややこしいです。いつか自分用ライブラリ書くことにする。