Lines Matching refs:self

99     def __init__(self, code, msg):
100 self.smtp_code = code
101 self.smtp_error = msg
102 self.args = (code, msg)
111 def __init__(self, code, msg, sender):
112 self.smtp_code = code
113 self.smtp_error = msg
114 self.sender = sender
115 self.args = (code, msg, sender)
125 def __init__(self, recipients):
126 self.recipients = recipients
127 self.args = (recipients,)
229 def __init__(self, host='', port=0, local_hostname=None,
247 self._host = host
248 self.timeout = timeout
249 self.esmtp_features = {}
250 self.command_encoding = 'ascii'
251 self.source_address = source_address
252 self._auth_challenge_count = 0
255 (code, msg) = self.connect(host, port)
257 self.close()
260 self.local_hostname = local_hostname
267 self.local_hostname = fqdn
275 self.local_hostname = '[%s]' % addr
277 def __enter__(self):
278 return self
280 def __exit__(self, *args):
282 code, message = self.docmd("QUIT")
288 self.close()
290 def set_debuglevel(self, debuglevel):
297 self.debuglevel = debuglevel
299 def _print_debug(self, *args):
300 if self.debuglevel > 1:
305 def _get_socket(self, host, port, timeout):
310 if self.debuglevel > 0:
311 self._print_debug('connect: to', (host, port), self.source_address)
313 self.source_address)
315 def connect(self, host='localhost', port=0, source_address=None):
328 self.source_address = source_address
339 port = self.default_port
340 sys.audit("smtplib.connect", self, host, port)
341 self.sock = self._get_socket(host, port, self.timeout)
342 self.file = None
343 (code, msg) = self.getreply()
344 if self.debuglevel > 0:
345 self._print_debug('connect:', repr(msg))
348 def send(self, s):
350 if self.debuglevel > 0:
351 self._print_debug('send:', repr(s))
352 if self.sock:
357 s = s.encode(self.command_encoding)
358 sys.audit("smtplib.send", self, s)
360 self.sock.sendall(s)
362 self.close()
367 def putcmd(self, cmd, args=""):
378 self.send(f'{s}{CRLF}')
380 def getreply(self):
394 if self.file is None:
395 self.file = self.sock.makefile('rb')
398 line = self.file.readline(_MAXLINE + 1)
400 self.close()
404 self.close()
406 if self.debuglevel > 0:
407 self._print_debug('reply:', repr(line))
409 self.close()
425 if self.debuglevel > 0:
426 self._print_debug('reply: retcode (%s); Msg: %a' % (errcode, errmsg))
429 def docmd(self, cmd, args=""):
431 self.putcmd(cmd, args)
432 return self.getreply()
435 def helo(self, name=''):
440 self.putcmd("helo", name or self.local_hostname)
441 (code, msg) = self.getreply()
442 self.helo_resp = msg
445 def ehlo(self, name=''):
450 self.esmtp_features = {}
451 self.putcmd(self.ehlo_msg, name or self.local_hostname)
452 (code, msg) = self.getreply()
457 self.close()
459 self.ehlo_resp = msg
462 self.does_esmtp = True
464 assert isinstance(self.ehlo_resp, bytes), repr(self.ehlo_resp)
465 resp = self.ehlo_resp.decode("latin-1").split('\n')
477 self.esmtp_features["auth"] = self.esmtp_features.get("auth", "") \
490 self.esmtp_features[feature] = self.esmtp_features.get(feature, "") \
493 self.esmtp_features[feature] = params
496 def has_extn(self, opt):
498 return opt.lower() in self.esmtp_features
500 def help(self, args=''):
503 self.putcmd("help", args)
504 return self.getreply()[1]
506 def rset(self):
508 self.command_encoding = 'ascii'
509 return self.docmd("rset")
511 def _rset(self):
519 self.rset()
523 def noop(self):
525 return self.docmd("noop")
527 def mail(self, sender, options=()):
537 if options and self.does_esmtp:
539 if self.has_extn('smtputf8'):
540 self.command_encoding = 'utf-8'
545 self.putcmd("mail", "FROM:%s%s" % (quoteaddr(sender), optionlist))
546 return self.getreply()
548 def rcpt(self, recip, options=()):
551 if options and self.does_esmtp:
553 self.putcmd("rcpt", "TO:%s%s" % (quoteaddr(recip), optionlist))
554 return self.getreply()
556 def data(self, msg):
566 self.putcmd("data")
567 (code, repl) = self.getreply()
568 if self.debuglevel > 0:
569 self._print_debug('data:', (code, repl))
579 self.send(q)
580 (code, msg) = self.getreply()
581 if self.debuglevel > 0:
582 self._print_debug('data:', (code, msg))
585 def verify(self, address):
587 self.putcmd("vrfy", _addr_only(address))
588 return self.getreply()
592 def expn(self, address):
594 self.putcmd("expn", _addr_only(address))
595 return self.getreply()
599 def ehlo_or_helo_if_needed(self):
600 """Call self.ehlo() and/or self.helo() if needed.
610 if self.helo_resp is None and self.ehlo_resp is None:
611 if not (200 <= self.ehlo()[0] <= 299):
612 (code, resp) = self.helo()
616 def auth(self, mechanism, authobject, *, initial_response_ok=True):
642 (code, resp) = self.docmd("AUTH", mechanism + " " + response)
643 self._auth_challenge_count = 1
645 (code, resp) = self.docmd("AUTH", mechanism)
646 self._auth_challenge_count = 0
649 self._auth_challenge_count += 1
653 (code, resp) = self.docmd(response)
655 if self._auth_challenge_count > _MAXCHALLENGE:
664 def auth_cram_md5(self, challenge=None):
665 """ Authobject to use with CRAM-MD5 authentication. Requires self.user
666 and self.password to be set."""
670 return self.user + " " + hmac.HMAC(
671 self.password.encode('ascii'), challenge, 'md5').hexdigest()
673 def auth_plain(self, challenge=None):
674 """ Authobject to use with PLAIN authentication. Requires self.user and
675 self.password to be set."""
676 return "\0%s\0%s" % (self.user, self.password)
678 def auth_login(self, challenge=None):
679 """ Authobject to use with LOGIN authentication. Requires self.user and
680 self.password to be set."""
681 if challenge is None or self._auth_challenge_count < 2:
682 return self.user
684 return self.password
686 def login(self, user, password, *, initial_response_ok=True):
714 self.ehlo_or_helo_if_needed()
715 if not self.has_extn("auth"):
720 advertised_authlist = self.esmtp_features["auth"].split()
735 self.user, self.password = user, password
739 (code, resp) = self.auth(
740 authmethod, getattr(self, method_name),
752 def starttls(self, keyfile=None, certfile=None, context=None):
769 self.ehlo_or_helo_if_needed()
770 if not self.has_extn("starttls"):
773 (resp, reply) = self.docmd("STARTTLS")
790 self.sock = context.wrap_socket(self.sock,
791 server_hostname=self._host)
792 self.file = None
797 self.helo_resp = None
798 self.ehlo_resp = None
799 self.esmtp_features = {}
800 self.does_esmtp = False
808 def sendmail(self, from_addr, to_addrs, msg, mail_options=(),
872 self.ehlo_or_helo_if_needed()
876 if self.does_esmtp:
877 if self.has_extn('size'):
881 (code, resp) = self.mail(from_addr, esmtp_opts)
884 self.close()
886 self._rset()
892 (code, resp) = self.rcpt(each, rcpt_options)
896 self.close()
900 self._rset()
902 (code, resp) = self.data(msg)
905 self.close()
907 self._rset()
912 def send_message(self, msg, from_addr=None, to_addrs=None,
943 self.ehlo_or_helo_if_needed()
971 if not self.has_extn('smtputf8'):
986 return self.sendmail(from_addr, to_addrs, flatmsg, mail_options,
989 def close(self):
992 file = self.file
993 self.file = None
997 sock = self.sock
998 self.sock = None
1002 def quit(self):
1004 res = self.docmd("quit")
1006 self.ehlo_resp = self.helo_resp = None
1007 self.esmtp_features = {}
1008 self.does_esmtp = False
1009 self.close()
1030 def __init__(self, host='', port=0, local_hostname=None,
1044 self.keyfile = keyfile
1045 self.certfile = certfile
1049 self.context = context
1050 SMTP.__init__(self, host, port, local_hostname, timeout,
1053 def _get_socket(self, host, port, timeout):
1054 if self.debuglevel > 0:
1055 self._print_debug('connect:', (host, port))
1057 new_socket = self.context.wrap_socket(new_socket,
1058 server_hostname=self._host)
1084 def __init__(self, host='', port=LMTP_PORT, local_hostname=None,
1090 def connect(self, host='localhost', port=0, source_address=None):
1095 if self.timeout is not None and not self.timeout:
1100 self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
1101 if self.timeout is not socket._GLOBAL_DEFAULT_TIMEOUT:
1102 self.sock.settimeout(self.timeout)
1103 self.file = None
1104 self.sock.connect(host)
1106 if self.debuglevel > 0:
1107 self._print_debug('connect fail:', host)
1108 if self.sock:
1109 self.sock.close()
1110 self.sock = None
1112 (code, msg) = self.getreply()
1113 if self.debuglevel > 0:
1114 self._print_debug('connect:', msg)