iro/offer/smtp.py
author Sandro Knauß <knauss@netzguerilla.net>
Thu, 23 Feb 2012 16:52:06 +0100
branchdevel
changeset 180 55ab949cf0f8
parent 171 5619596a0053
child 183 07ee5543751b
permissions -rw-r--r--
providers now handeld in offer.provider
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     2
#Copyright (C) 2009  Sandro Knauß <bugs@sandroknauss.de>
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     3
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
#This program is free software; you can redistribute it and/or modify it under the terms
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     5
#of the GNU General Public License as published by the Free Software Foundation;
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
#either version 3 of the License, or any later version.
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
#This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     8
#without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
#See the GNU General Public License for more details.
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    10
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    11
#You should have received a copy of the GNU General Public License
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    12
#along with this program; if not, see <http://www.gnu.org/licenses/>.
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    13
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    14
import smtplib
68
85fc1e5dea79 Massenmails werden nun an eine Mailadresse verschickt
Sandro Knauß <knauss@netzguerilla.net>
parents: 58
diff changeset
    15
import copy
85fc1e5dea79 Massenmails werden nun an eine Mailadresse verschickt
Sandro Knauß <knauss@netzguerilla.net>
parents: 58
diff changeset
    16
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    17
from ..model.status import Status
180
55ab949cf0f8 providers now handeld in offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 171
diff changeset
    18
from .provider import Provider, providers
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    19
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    20
class SMTP(Provider):
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    21
    def __init__(self, name, config):
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    22
        Provider.__init__(self,name,config,{"mail":[None]})
19
fcf8489f1c2f iro kann nun mit mails umgehen
Sandro Knauß <knauss@netzguerilla.net>
parents: 0
diff changeset
    23
        
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    25
    def loadConfig(self):
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    26
        """Read options from config"""
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    27
        needed=["send_from","host", "port", "user", "password"]
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    28
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    29
        for n in needed:
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    30
            setattr(self,n,None)
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    31
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    32
        Provider.loadConfig(self)
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    33
        self.bTLS = False
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    34
        self.bSSL = False
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    35
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    36
        for (n, v) in self.config:
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    37
            if n in needed:
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    38
                setattr(self,n,v)
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    39
            elif n == "TLS":
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    40
                self.bTLS = bool(v)
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    41
            elif n == "SSL":
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    42
                self.bSSL = bool(v)
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    43
            else:
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    44
                raise UnknownOption(self.name, n)
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    45
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    46
        for n in needed:
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    47
           if getattr(self,n) is None:
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    48
               raise NeededOption(self.name, n) 
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    49
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    50
    def send(self,mail,recipient):   
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    51
        if not self.testmode:
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    52
            if self.bSSL:
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    53
                smtp = smtplib.SMTP_SSL(self.host,self.port)
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    54
            else:
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    55
                smtp = smtplib.SMTP(self.host,self.port)
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    56
            
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    57
            if self.bTLS:
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    58
                smtp.starttls()
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    59
           
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    60
            if not self.user == "":
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    61
                smtp.login(self.user,self.password)
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    62
        try:
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    63
            frm=self.send_from
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    64
            
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    65
            if mail.getFrom():
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    66
                frm = mail.getFrom()
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    67
            
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    68
            tmpmail=copy.deepcopy(mail)
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    69
            tmpmail.content['From'] = frm 
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    70
            tmpmail.content['To']=recipient
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    71
            if not self.testmode:
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    72
                smtp.sendmail(frm,  recipient, tmpmail.as_string())
171
5619596a0053 getSendFunc logic from smtp to Provider(offer.provider)
Sandro Knauß <knauss@netzguerilla.net>
parents: 169
diff changeset
    73
            return Status(self, None)
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    74
        finally:
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    75
            smtp.quit()
68
85fc1e5dea79 Massenmails werden nun an eine Mailadresse verschickt
Sandro Knauß <knauss@netzguerilla.net>
parents: 58
diff changeset
    76
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    77
    def getSendFunc(self, typ, route):
171
5619596a0053 getSendFunc logic from smtp to Provider(offer.provider)
Sandro Knauß <knauss@netzguerilla.net>
parents: 169
diff changeset
    78
        Provider.getSendFunc(self, typ, route)
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    79
        return self.send
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    80
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    81
providers["smtp"]=SMTP
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    82