iro/offer/smtp.py
author Sandro Knauß <knauss@netzguerilla.net>
Sat, 18 Feb 2012 17:13:38 +0100
branchdevel
changeset 169 aabc04843d25
parent 168 42b55855e3a6
child 171 5619596a0053
permissions -rw-r--r--
complete offer.smtp tests
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
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    18
from ..error import UnknownOption, NeededOption, NoRoute, NoTyp
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    19
from ..offer import providers
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    20
from .provider import Provider
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    21
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    22
class SMTP(Provider):
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    23
    def __init__(self, name, config):
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    24
        Provider.__init__(self,name,config,{"mail":[None]})
19
fcf8489f1c2f iro kann nun mit mails umgehen
Sandro Knauß <knauss@netzguerilla.net>
parents: 0
diff changeset
    25
        
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    27
    def loadConfig(self):
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    28
        """Read options from config"""
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    29
        needed=["send_from","host", "port", "user", "password"]
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    30
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    31
        for n in needed:
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    32
            setattr(self,n,None)
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    33
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    34
        Provider.loadConfig(self)
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    35
        self.bTLS = False
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    36
        self.bSSL = False
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    37
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    38
        for (n, v) in self.config:
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    39
            if n in needed:
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    40
                setattr(self,n,v)
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    41
            elif n == "TLS":
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    42
                self.bTLS = bool(v)
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    43
            elif n == "SSL":
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    44
                self.bSSL = bool(v)
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    45
            else:
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    46
                raise UnknownOption(self.name, n)
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    47
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    48
        for n in needed:
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    49
           if getattr(self,n) is None:
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    50
               raise NeededOption(self.name, n) 
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    52
    def send(self,mail,recipient):   
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    53
        if not self.testmode:
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    54
            if self.bSSL:
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    55
                smtp = smtplib.SMTP_SSL(self.host,self.port)
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    56
            else:
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    57
                smtp = smtplib.SMTP(self.host,self.port)
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    58
            
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    59
            if self.bTLS:
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    60
                smtp.starttls()
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    61
           
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    62
            if not self.user == "":
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    63
                smtp.login(self.user,self.password)
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    64
        try:
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    65
            frm=self.send_from
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    66
            
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    67
            if mail.getFrom():
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    68
                frm = mail.getFrom()
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    69
            
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    70
            tmpmail=copy.deepcopy(mail)
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    71
            tmpmail.content['From'] = frm 
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    72
            tmpmail.content['To']=recipient
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    73
            if not self.testmode:
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    74
                smtp.sendmail(frm,  recipient, tmpmail.as_string())
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    75
            return Status(self, "std")
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    76
        finally:
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    77
            smtp.quit()
68
85fc1e5dea79 Massenmails werden nun an eine Mailadresse verschickt
Sandro Knauß <knauss@netzguerilla.net>
parents: 58
diff changeset
    78
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    79
    def getSendFunc(self, typ, route):
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    80
        try:
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    81
            if route not in self.typs[typ]:
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    82
                raise NoRoute(route)
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    83
        except KeyError:
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    84
            raise NoTyp(route)
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    85
        
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    86
        return self.send
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    87
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    88
providers["smtp"]=SMTP
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    89