iro/offer/smtp.py
author Sandro Knauß <knauss@netzguerilla.net>
Sat, 25 Feb 2012 16:12:07 +0100
branchdevel
changeset 186 b381eaa774ab
parent 183 07ee5543751b
child 218 91f87ad13540
permissions -rw-r--r--
refactoring ifo.config
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
183
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    16
from functools import partial
68
85fc1e5dea79 Massenmails werden nun an eine Mailadresse verschickt
Sandro Knauß <knauss@netzguerilla.net>
parents: 58
diff changeset
    17
183
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    18
from ..validate import vInteger, vEmail,vBool
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    19
from ..model.status import Status
183
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    20
from ..config import Option
180
55ab949cf0f8 providers now handeld in offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 171
diff changeset
    21
from .provider import Provider, providers
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    22
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    23
class SMTP(Provider):
186
b381eaa774ab refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents: 183
diff changeset
    24
    def __init__(self, name):
b381eaa774ab refactoring ifo.config
Sandro Knauß <knauss@netzguerilla.net>
parents: 183
diff changeset
    25
        Provider.__init__(self,name,{"mail":[None]})
183
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    26
        self.options.update({
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    27
            "send_from":Option(vEmail,long="Emailaddress from which mail will be sended.",must=True),
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    28
            "host":Option(lambda x,y:x, long="Hostname of MTA", must=True),
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    29
            "port":Option(partial(vInteger,minv=0),long="Port of the MTA", default=25),
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    30
            "user":Option(lambda x,y:x, long="username to login into MTA.",default=""),
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    31
            "password":Option(lambda x,y:x, long="password to login into MTA.",default=""),
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    32
            "TLS":Option(vBool,long="use TLS for connection to MTA", default=False),
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    33
            "SSL":Option(vBool,long="use SSL for connection to MTA", default=False),
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    34
            })
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
    def send(self,mail,recipient):   
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    37
        if not self.testmode:
183
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    38
            if self.SSL:
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    39
                smtp = smtplib.SMTP_SSL(self.host,self.port)
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    40
            else:
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    41
                smtp = smtplib.SMTP(self.host,self.port)
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    42
            
183
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    43
            if self.TLS:
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    44
                smtp.starttls()
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    45
           
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    46
            if not self.user == "":
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    47
                smtp.login(self.user,self.password)
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    48
        try:
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    49
            frm=self.send_from
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    50
            
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    51
            if mail.getFrom():
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    52
                frm = mail.getFrom()
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    53
            
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    54
            tmpmail=copy.deepcopy(mail)
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    55
            tmpmail.content['From'] = frm 
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    56
            tmpmail.content['To']=recipient
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    57
            if not self.testmode:
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    58
                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
    59
            return Status(self, None)
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    60
        finally:
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 168
diff changeset
    61
            smtp.quit()
68
85fc1e5dea79 Massenmails werden nun an eine Mailadresse verschickt
Sandro Knauß <knauss@netzguerilla.net>
parents: 58
diff changeset
    62
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    63
    def getSendFunc(self, typ, route):
171
5619596a0053 getSendFunc logic from smtp to Provider(offer.provider)
Sandro Knauß <knauss@netzguerilla.net>
parents: 169
diff changeset
    64
        Provider.getSendFunc(self, typ, route)
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    65
        return self.send
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    66
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 68
diff changeset
    67
providers["smtp"]=SMTP
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    68