将.png文件附加到satchmo发送的电子邮件中

时间:2012-04-14 09:14:39

标签: django satchmo

在Satchmo商店中,我需要将一个小的.png(条形码)附加到django在完成订单时发送的电子邮件中。电子邮件使用send_order_confirmation()格式化为HTML格式,调用send_store_mail()(两者都是satchmo的一部分。)这些函数都没有提供附加文件的能力(我认为)所以我应该重新编写它们吗?我想知道使用信号是否可能/更好。也许rendering_store_mail()?

顺便说一句,条形码会动态生成,因此无法在某处的某个服务器上建立文件链接。

非常感谢, 托马斯

1 个答案:

答案 0 :(得分:0)

我也必须在确认电子邮件中添加额外的信息,但只有文字。因此,这将是使用信号向电子邮件添加额外内容的非常简单的方法,恕我直言,这是最好的方法。如果可以避免覆盖satchmo-core,请始终使用信号; - )

  1. 定义您的侦听器以添加渲染的上下文。在这种情况下,我正在添加额外注释字段的内容,并且假设有一个名为get_barcode_img(<order>)的函数的上下文,该订单的条形码。我也在这里假设,get_barcode_img函数不仅会返回一个png,而且还会返回类似于MIMEImage(如from email.MIMEImage import MIMEImage)的内容,以便能够将其包含在内联中。此外,可能需要更多的信息,例如img的MIME标题。

    # localsite/payment/listeners.py
    
    def add_extra_context_to_store_mail(sender,
            send_mail_args={}, context={}, **kwargs):
        if not 'order' in context:
            return
        context['barcode_header'] = get_barcode_header(context['order'])
        context['barcode_img'] = get_barcode_img(context['order'])
        context['notes'] = context['order'].notes
    
  2. 将侦听器连接到信号某处可以“发现”的信号,例如models.py

    # localsite/payment/models.py 
    
    from satchmo_store.shop.signals import rendering_store_mail, order_notice_sender
    
    rendering_store_mail.connect(payment_listeners.add_extra_context_to_store_mail, sender=order_notice_sender)
    
  3. 在本地覆盖模板(例如order_placed_notice.html)以添加新上下文。请注意放置模板的位置,因为路径对于django采用新模板而不是satchmo的模板至关重要。在这种情况下,从项目的根路径开始,可能有一个templates-folder,在其中,必须有与satchmo-folder完全相同的路径。例如。 /templates/shop/email/order_placed_notice.html ...这可以应用于应用内的任何“有效”模板文件夹。由您来决定模板的组织位置和方式。

    <!-- templates/shop/email/order_placed_notice.html -->
    <!DOCTYPE ...><html>
    <head>
        <!-- include the image-header here somewhere??? -->
        <title></title>
    </head>
    <body>        
    ...
    Your comments:
    {{ notes }}
    
    Barcode:
    {{ barcode_img }}"