Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
... content_type='plain',
... extra_headers={'Approved': 'joe@bob.org'})
>>> print(message.as_string()) # doctest: +REPORT_UDIFF
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
From: John
To: =?utf-8?b?zpbOtc+Nz4I=?=
Subject: Testing
Approved: joe@bob.org
Hello, world!
"""
if config is None:
config = _config.CONFIG
if section not in config.sections():
section = 'DEFAULT'
encodings = [
x.strip() for x in config.get(section, 'encodings').split(',')]
# Split real name (which is optional) and email address parts
sender_name,sender_addr = _parseaddr(sender)
recipient_list = []
for recipient_name, recipient_addr in _getaddresses([recipient]):
recipient_encoding = guess_encoding(recipient_name, encodings)
recipient_name = str(_Header(recipient_name, recipient_encoding).encode())
recipient_addr.encode('ascii')
recipient_list.append(_formataddr((recipient_name, recipient_addr)))
sender_encoding = guess_encoding(sender_name, encodings)
recipient_encoding = guess_encoding(recipient_name, encodings)
def sendmail_send(sender, recipient, message, config=None, section='DEFAULT'):
if config is None:
config = _config.CONFIG
message_bytes = _flatten(message)
sendmail = config.get(section, 'sendmail')
sender_name,sender_addr = _parseaddr(sender)
_LOG.debug(
'sending message to {} via {}'.format(recipient, sendmail))
try:
p = _subprocess.Popen(
[sendmail, '-F', sender_name, '-f', sender_addr, recipient],
stdin=_subprocess.PIPE, stdout=_subprocess.PIPE,
stderr=_subprocess.PIPE)
stdout,stderr = p.communicate(message_bytes)
status = p.wait()
if status:
raise _error.SendmailError(
status=status, stdout=stdout, stderr=stderr)
except Exception as e:
key.replace('-', '_') for key in _config.CONFIG['DEFAULT'].keys()]
_default_configured_attributes[
_default_configured_attributes.index('from')
] = 'from_email' # `from` is a Python keyword
_default_configured_attributes[
_default_configured_attributes.index('user_agent')
] = '_user_agent' # `user_agent` is a getter that does substitution
# all attributes that are saved/loaded from .config
_configured_attributes = (
_non_default_configured_attributes + _default_configured_attributes)
# attribute name -> .config option
_configured_attribute_translations = dict(
(attr,attr) for attr in _non_default_configured_attributes)
_configured_attribute_translations.update(dict(
zip(_default_configured_attributes,
_config.CONFIG['DEFAULT'].keys())))
# .config option -> attribute name
_configured_attribute_inverse_translations = dict(
(v,k) for k,v in _configured_attribute_translations.items())
# hints for value conversion
_boolean_attributes = [
'digest',
'force_from',
'use_publisher_email',
'active',
'date_header',
'trust_guid',
'trust_link',
'html_mail',
'use_css',
'unicode_snob',