[Python编程(第4版)].(Programming.Python.4th.Edition).Mark.Lutz.文字版

(yzsuai) #1

pass # no login required for this server/class


def getPassword(self):
pass # no login required for this server/class


################################################################################


specialized subclasses


################################################################################


class MailSenderAuth(MailSender):
"""
use for servers that require login authorization;
client: choose MailSender or MailSenderAuth super
class based on mailconfig.smtpuser setting (None?)
"""
smtpPassword = None # 4E: on class, not self, shared by poss N instances


def init(self, smtpserver=None, smtpuser=None):
MailSender.init(self, smtpserver)
self.smtpUser = smtpuser or mailconfig.smtpuser
#self.smtpPassword = None # 4E: makes PyMailGUI ask for each send!


def authenticateServer(self, server):
server.login(self.smtpUser, self.smtpPassword)


def getPassword(self):
"""
get SMTP auth password if not yet known;
may be called by superclass auto, or client manual:
not needed until send, but don't run in GUI thread;
get from client-side file or subclass method
"""
if not self.smtpPassword:
try:
localfile = open(mailconfig.smtppasswdfile)
MailSenderAuth.smtpPassword = localfile.readline()[:-1] # 4E
self.trace('local file password' + repr(self.smtpPassword))
except:
MailSenderAuth.smtpPassword = self.askSmtpPassword() # 4E


def askSmtpPassword(self):
assert False, 'Subclass must define method'


class MailSenderAuthConsole(MailSenderAuth):
def askSmtpPassword(self):
import getpass
prompt = 'Password for %s on %s?' % (self.smtpUser, self.smtpServerName)
return getpass.getpass(prompt)


class SilentMailSender(SilentMailTool, MailSender):
pass # replaces trace


966 | Chapter 13: Client-Side Scripting

Free download pdf