From 1e479ff9a005e9b4da05a2abee7acd05acd5c814 Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Mon, 16 Sep 2013 20:20:26 +0200 Subject: [PATCH 1/5] Add support for Maildir Signed-off-by: Thibaut Girka --- rss2email/config.py | 3 +++ rss2email/email.py | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/rss2email/config.py b/rss2email/config.py index 6b5155f..020b66b 100644 --- a/rss2email/config.py +++ b/rss2email/config.py @@ -193,6 +193,9 @@ def setup_html2text(self, section='DEFAULT'): ('imap-port', str(143)), ('imap-ssl', str(False)), # connect to the IMAP server using SSL ('imap-mailbox', 'INBOX'), # where we should store new messages + # Maildir configuration + ('maildir-path', '~/Maildir'), + ('maildir-mailbox', 'INBOX'), ### Miscellaneous # Verbosity (one of 'error', 'warning', 'info', or 'debug'). diff --git a/rss2email/email.py b/rss2email/email.py index ef798f7..50e4057 100644 --- a/rss2email/email.py +++ b/rss2email/email.py @@ -31,12 +31,14 @@ from email.mime.text import MIMEText as _MIMEText from email.utils import formataddr as _formataddr from email.utils import parseaddr as _parseaddr +import mailbox as _mailbox import imaplib as _imaplib import io as _io import smtplib as _smtplib import subprocess as _subprocess import sys as _sys import time as _time +import os as _os from . import LOG as _LOG from . import config as _config @@ -199,6 +201,14 @@ def imap_send(message, config=None, section='DEFAULT'): finally: imap.logout() +def maildir_send(message, config=None, section='DEFAULT'): + if config is None: + config = _config.CONFIG + path = config.get(section, 'maildir-path') + mailbox = config.get(section, 'maildir-mailbox') + maildir = _mailbox.Maildir(_os.path.join(path, mailbox)) + maildir.add(message) + def _decode_header(header): """Decode RFC-2047-encoded headers to Unicode strings @@ -340,6 +350,8 @@ def send(sender, recipient, message, config=None, section='DEFAULT'): config=config, section=section) elif protocol == 'imap': imap_send(message=message, config=config, section=section) + elif protocol == 'maildir': + maildir_send(message=message, config=config, section=section) else: sendmail_send( sender=sender, recipient=recipient, message=message, From 7cd70b2526fcecc0ef8aec4b5a0e196f2636f264 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Martano?= Date: Mon, 30 Jun 2014 00:45:19 -0300 Subject: [PATCH 2/5] using maildir methods to get folder --- rss2email/email.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rss2email/email.py b/rss2email/email.py index 50e4057..32c15cc 100644 --- a/rss2email/email.py +++ b/rss2email/email.py @@ -32,6 +32,7 @@ from email.utils import formataddr as _formataddr from email.utils import parseaddr as _parseaddr import mailbox as _mailbox +from mailbox import NoSuchMailboxError import imaplib as _imaplib import io as _io import smtplib as _smtplib @@ -206,7 +207,11 @@ def maildir_send(message, config=None, section='DEFAULT'): config = _config.CONFIG path = config.get(section, 'maildir-path') mailbox = config.get(section, 'maildir-mailbox') - maildir = _mailbox.Maildir(_os.path.join(path, mailbox)) + maildir = _mailbox.Maildir(path) + try: + maildir = maildir.get_folder(mailbox) + except NoSuchMailboxError: + maildir = maildir.add_folder(mailbox) maildir.add(message) def _decode_header(header): From a5e42143d3f618ae2ca93bd9eea529d0ff159912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Martano?= Date: Mon, 30 Jun 2014 22:52:44 -0300 Subject: [PATCH 3/5] preparing config for maildir support --- rss2email/config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rss2email/config.py b/rss2email/config.py index 020b66b..a3626fe 100644 --- a/rss2email/config.py +++ b/rss2email/config.py @@ -194,8 +194,8 @@ def setup_html2text(self, section='DEFAULT'): ('imap-ssl', str(False)), # connect to the IMAP server using SSL ('imap-mailbox', 'INBOX'), # where we should store new messages # Maildir configuration - ('maildir-path', '~/Maildir'), - ('maildir-mailbox', 'INBOX'), + ('maildir-path', '~/Maildir'), # main maildir path + ('maildir-mailbox', 'INBOX'), # for easier per-feed overrides ### Miscellaneous # Verbosity (one of 'error', 'warning', 'info', or 'debug'). From b56cbd21afa27bc27c04c770e4d6612a88101ea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Martano?= Date: Mon, 30 Jun 2014 22:54:16 -0300 Subject: [PATCH 4/5] preparing config for setting user-agent support --- rss2email/config.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rss2email/config.py b/rss2email/config.py index a3626fe..e94b282 100644 --- a/rss2email/config.py +++ b/rss2email/config.py @@ -85,6 +85,8 @@ def setup_html2text(self, section='DEFAULT'): ('proxy', ''), # Set the timeout (in seconds) for feed server response ('feed-timeout', str(60)), + # Set User Agent + ('user-agent', ''), ### Processing # True: Fetch, process, and email feeds. From 92a7b96889d8008aa8646fa43c4a21351c7eef59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Martano?= Date: Mon, 30 Jun 2014 23:00:02 -0300 Subject: [PATCH 5/5] Allows setting user-agent for fetching feeds. --- rss2email/feed.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/rss2email/feed.py b/rss2email/feed.py index 37845c1..0c00315 100644 --- a/rss2email/feed.py +++ b/rss2email/feed.py @@ -813,7 +813,18 @@ def run(self, send=True): """ if not self.to: raise _error.NoToEmailAddress(feed=self) - parsed = self._fetch() + + if self.section in self.config: + config = self.config[self.section] + else: + config = self.config['DEFAULT'] + agent = config['user-agent'] + if agent: + _feedparser.USER_AGENT = agent + parsed = self._fetch() + _feedparser.USER_AGENT = _USER_AGENT + else: + parsed = self._fetch() if self.digest: digest = self._new_digest()