Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
**kwargs
):
self.log = get_logger()
self.set_logging()
self.soft_email_validation = soft_email_validation
if oauth2_file is not None:
oauth2_info = get_oauth2_info(oauth2_file)
if user is None:
user = oauth2_info["email_address"]
if smtp_skip_login and user is None:
user = ""
elif user is None:
user = find_user_home_path()
self.user, self.useralias = make_addr_alias_user(user)
if soft_email_validation:
validate_email_with_regex(self.user)
self.is_closed = None
self.host = host
self.port = str(port) if port is not None else "465" if smtp_ssl else "587"
self.smtp_starttls = smtp_starttls
self.ssl = smtp_ssl
self.smtp_skip_login = smtp_skip_login
self.debuglevel = smtp_set_debuglevel
self.encoding = encoding
self.kwargs = kwargs
self.cache = {}
self.unsent = []
self.num_mail_sent = 0
self.oauth2_file = oauth2_file
self.credentials = password if oauth2_file is None else oauth2_info
def __init__(self, user=None, password=None, host='smtp.gmail.com', port='587',
smtp_starttls=True, smtp_set_debuglevel=0, smtp_skip_login=False,
encoding="utf-8", oauth2_file=None, soft_email_validation=True, **kwargs):
self.log = get_logger()
self.set_logging()
if smtp_skip_login and user is None:
user = ''
elif user is None:
user = self._find_user_home_path()
self.user, self.useralias = self._make_addr_alias_user(user)
self.soft_email_validation = soft_email_validation
if soft_email_validation and not smtp_skip_login:
validate_email_with_regex(self.user)
self.is_closed = None
self.host = host
self.port = port
self.starttls = smtp_starttls
self.smtp_skip_login = smtp_skip_login
self.debuglevel = smtp_set_debuglevel
self.encoding = encoding
self.kwargs = kwargs
if oauth2_file is not None:
self.login_oauth2(oauth2_file)
else:
self.login(password)
self.cache = {}
self.unsent = []
self.log.info('Connected to SMTP @ %s:%s as %s', self.host, self.port, self.user)
self.num_mail_sent = 0
def prepare_send(
self,
to=None,
subject=None,
contents=None,
attachments=None,
cc=None,
bcc=None,
headers=None,
newline_to_break=True,
):
addresses = resolve_addresses(self.user, self.useralias, to, cc, bcc)
if self.soft_email_validation:
for email_addr in addresses["recipients"]:
validate_email_with_regex(email_addr)
msg = prepare_message(
self.user,
self.useralias,
addresses,
subject,
contents,
attachments,
headers,
self.encoding,
newline_to_break,
)
recipients = addresses["recipients"]
msg_string = msg.as_string()
return recipients, msg_string
def _resolve_addresses(self, to, cc, bcc):
""" Handle the targets addresses, adding aliases when defined """
addresses = {'recipients': []}
if to is not None:
self._make_addr_alias_target(to, addresses, 'To')
elif cc is not None and bcc is not None:
self._make_addr_alias_target([self.user, self.useralias], addresses, 'To')
else:
addresses['recipients'].append(self.user)
if cc is not None:
self._make_addr_alias_target(cc, addresses, 'Cc')
if bcc is not None:
self._make_addr_alias_target(bcc, addresses, 'Bcc')
if self.soft_email_validation:
for email_addr in addresses['recipients']:
validate_email_with_regex(email_addr)
return addresses