def add_header(message, name, val): # Must bypass Django's SafeMIMEMessage.__set_item__, because its call to # forbid_multi_line_headers converts the val back to a str, undoing this # workaround. That makes this code responsible for sanitizing val: if '\n' in val or '\r' in val: raise BadHeaderError("Header values can't contain newlines (got %r for header %r)" % (val, name)) val = HeaderBugWorkaround(val, header_name=name) assert isinstance(message, MIMEBase) MIMEBase.__setitem__(message, name, val)