From c8a7a285dc83f05cbbd8b935fcf1d9c780f77ced Mon Sep 17 00:00:00 2001 From: lnu Date: Mon, 2 Jan 2006 20:08:52 +0000 Subject: Now uses ruby-feedparser for feed parsing git-svn-id: svn+ssh://svn.gna.org/svn/feed2imap/trunk/feed2imap@73 f70e237a-67f3-0310-a06c-d2b8a7116972 --- lib/feed2imap/itemtomail.rb | 77 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 lib/feed2imap/itemtomail.rb (limited to 'lib/feed2imap/itemtomail.rb') diff --git a/lib/feed2imap/itemtomail.rb b/lib/feed2imap/itemtomail.rb new file mode 100644 index 0000000..9d1cbad --- /dev/null +++ b/lib/feed2imap/itemtomail.rb @@ -0,0 +1,77 @@ +=begin +Feed2Imap - RSS/Atom Aggregator uploading to an IMAP Server +Copyright (c) 2005 Lucas Nussbaum + +This file contains classes to parse a feed and store it as a Channel object. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +=end + +require 'rexml/document' +require 'time' +require 'rmail' +require 'feedparser' +require 'feedparser/text-output' +require 'feedparser/html-output' +require 'base64' +require 'feed2imap/rubymail_patch' + +class String + def needMIME + utf8 = false + self.unpack('U*').each do |c| + if c > 127 + utf8 = true + break + end + end + utf8 + end +end + +def item_to_mail(item, index, updated, from = 'Feed2Imap') + message = RMail::Message::new + message.header['From'] = "#{from} " + message.header['To'] = "#{from} " + if @date.nil? + message.header['Date'] = Time::new.rfc2822 + else + message.header['Date'] = item.date.rfc2822 + end + message.header['X-Feed2Imap-Version'] = F2I_VERSION if defined?(F2I_VERSION) + message.header['X-CacheIndex'] = "-#{index}-" + message.header['X-F2IStatus'] = "Updated" if updated + # treat subject. Might need MIME encoding. + subj = item.title or (item.date and item.date.to_s) or item.link + if subj + if subj.needMIME + message.header['Subject'] = "=?utf-8?b?#{Base64::encode64(subj).gsub("\n",'')}?=" + else + message.header['Subject'] = subj + end + end + textpart = RMail::Message::new + textpart.header['Content-Type'] = 'text/plain; charset=utf-8' + textpart.header['Content-Transfer-Encoding'] = '7bit' + textpart.body = item.to_text + htmlpart = RMail::Message::new + htmlpart.header['Content-Type'] = 'text/html; charset=utf-8' + htmlpart.header['Content-Transfer-Encoding'] = '7bit' + htmlpart.body = '' + item.to_html + '' + message.add_part(textpart) + message.add_part(htmlpart) + return message.to_s +end + -- cgit v1.2.3-70-g09d2