@@ -321,8 +321,44 @@ class TemplatedAttachmentEmailMessageView(TemplatedHTMLEmailMessageView):
321321 an attachment
322322 """
323323
324- def render_to_message (self , extra_context = None , attachment = None ,
325- mimetype = None , * args , ** kwargs ):
324+ def send (self , extra_context = None , ** kwargs ):
325+ """
326+ Renders and sends an email message.
327+
328+ All keyword arguments other than ``extra_context`` are passed through
329+ as keyword arguments when constructing a new :attr:`message_class`
330+ instance for this message.
331+
332+ This method exists primarily for convenience, and the proper
333+ rendering of your message should not depend on the behavior of this
334+ method. To alter how a message is created, override
335+ :meth:``render_to_message`` instead, since that should always be
336+ called, even if a message is not sent.
337+
338+ :param extra_context: Any additional context data that will be used
339+ when rendering this message.
340+
341+ :param kwargs : mail settings
342+ from_email=None,
343+ to=None,
344+ bcc=None,
345+ connection=None,
346+ attachments=None,
347+ cc=None
348+ headers=None,
349+ filename=None,
350+
351+ :type extra_context: :class:`dict`
352+
353+ """
354+ if kwargs .get ("filename" ) and not kwargs .get ("attachment" ):
355+ raise Exception ("If filename is passed, an attachment must be provided" )
356+ if not kwargs .get ("filename" ) and kwargs .get ("attachment" ):
357+ raise Exception ("If attachment is passed, a filename must be provided" )
358+ message = self .render_to_message (extra_context = extra_context , ** kwargs )
359+ return message .send ()
360+
361+ def render_to_message (self , extra_context = None , filename = None , attachment = None , mimetype = None , * args , ** kwargs ):
326362 """
327363 Renders and returns an unsent message with the given context.
328364
@@ -341,6 +377,9 @@ def render_to_message(self, extra_context=None, attachment=None,
341377 attachments=None,
342378 cc=None
343379 headers=None,
380+ :param filename: filename (with extension) of the attachment
381+ :param attachment: attachment content
382+ :param mimetype: mimetype of attachment
344383
345384 :returns: A message instance.
346385 :rtype: :attr:`.message_class`
@@ -351,15 +390,11 @@ def render_to_message(self, extra_context=None, attachment=None,
351390
352391 if extra_context is None :
353392 extra_context = {}
354-
355393 context = self .get_context_data (** extra_context )
356394 content = self .render_html_body (context )
357395 message .attach_alternative (content , mimetype = 'text/html' )
358- if attachment :
359- if type (attachment ) == 'string' :
360- message .attach (filename = attachment , mimetype = mimetype )
361- else :
362- message .attach (content = attachment , mimetype = mimetype )
396+ if filename and attachment :
397+ message .attach (filename = filename , content = attachment , mimetype = mimetype )
363398
364399 return message
365400
0 commit comments