Initial commit for the email source support

This commit is contained in:
Roberto Rosario
2012-03-07 01:26:36 -04:00
parent d8be649107
commit 5651b3b4df
3 changed files with 40 additions and 2 deletions

View File

@@ -7,7 +7,7 @@ from django.utils.translation import ugettext
from documents.forms import DocumentForm
from .models import (WebForm, StagingFolder, SourceTransformation,
WatchFolder)
WatchFolder, POP3Email)
from .widgets import FamFamRadioSelect
from .utils import validate_whitelist_blacklist
@@ -114,3 +114,8 @@ class SourceTransformationForm_create(forms.ModelForm):
class Meta:
model = SourceTransformation
exclude = ('content_type', 'object_id')
class POP3EmailSetupForm(forms.ModelForm):
class Meta:
model = POP3Email

View File

@@ -1,5 +1,8 @@
from django.utils.translation import ugettext_lazy as _
POP3_PORT = 110
POP3_SSL_PORT = 995
SOURCE_UNCOMPRESS_CHOICE_Y = 'y'
SOURCE_UNCOMPRESS_CHOICE_N = 'n'
SOURCE_UNCOMPRESS_CHOICE_ASK = 'a'

View File

@@ -26,7 +26,7 @@ from .literals import (SOURCE_CHOICES, SOURCE_CHOICES_PLURAL,
SOURCE_INTERACTIVE_UNCOMPRESS_CHOICES, SOURCE_CHOICE_WEB_FORM,
SOURCE_CHOICE_STAGING, SOURCE_ICON_DISK, SOURCE_ICON_DRIVE,
SOURCE_ICON_CHOICES, SOURCE_CHOICE_WATCH, SOURCE_UNCOMPRESS_CHOICES,
SOURCE_UNCOMPRESS_CHOICE_Y)
SOURCE_UNCOMPRESS_CHOICE_Y, POP3_PORT, POP3_SSL_PORT)
from .compressed_file import CompressedFile, NotACompressedFile
logger = logging.getLogger(__name__)
@@ -151,6 +151,36 @@ class InteractiveBaseModel(BaseModel):
abstract = True
class POP3Email(BaseModel):
#is_interactive = False
uncompress = models.CharField(max_length=1, choices=SOURCE_UNCOMPRESS_CHOICES, verbose_name=_(u'uncompress'), help_text=_(u'Whether to expand or not compressed archives.'))
ssl = models.BooleanField(verbose_name=_(u'SSL'))
port = models.PositiveIntegerField(blank=True, verbose_name=_(u'port'))
host = models.CharField(max_length=32, verbose_name=_(u'host'))
username = models.CharField(max_length=64, verbose_name=_(u'username'))
password = models.CharField(max_length=64, verbose_name=_(u'password'))
delete = models.BooleanField(verbose_name=_(u'delete messages'))
def fetch_mail(self):
if ssl:
port = self.port or POP3_PORT
mailbox = poplib.POP3_SSL(self.host, port)
else:
port = self.port or POP3_SSL_PORT
mailbox = poplib.POP3(self.host, port)
mailbox.user(self.username)
mailbox.pass_(self.password)
message_count = len(mailbox.list()[1])
for message_list in range(message_count):
for message in mailbox.retr(message_list+1)[1]:
mail = email.message_from_string(''.join(message))
class Meta(BaseModel.Meta):
verbose_name = _(u'POP email')
verbose_name_plural = _(u'POP email')
class StagingFolder(InteractiveBaseModel):
is_interactive = True
source_type = SOURCE_CHOICE_STAGING