11.. _sendinblue-backend :
22
3- SendinBlue
3+ Sendinblue
44==========
55
6- Anymail integrates with the `SendinBlue `_ email service, using their `API v3 `_.
7- SendinBlue 's transactional API does not support some basic email features, such as
6+ Anymail integrates with the `Sendinblue `_ email service, using their `API v3 `_.
7+ Sendinblue 's transactional API does not support some basic email features, such as
88inline images. Be sure to review the :ref: `limitations <sendinblue-limitations >` below.
99
1010.. important ::
1111
1212 **Troubleshooting: **
13- If your SendinBlue messages aren't being delivered as expected, be sure to look for
14- events in your SendinBlue `logs `_.
13+ If your Sendinblue messages aren't being delivered as expected, be sure to look for
14+ events in your Sendinblue `logs `_.
1515
16- SendinBlue detects certain types of errors only *after * the send API call reports
16+ Sendinblue detects certain types of errors only *after * the send API call reports
1717 the message as "queued." These errors appear in the logging dashboard.
1818
19- .. _ SendinBlue : https://www.sendinblue.com/
19+ .. _ Sendinblue : https://www.sendinblue.com/
2020.. _API v3 : https://developers.sendinblue.com/docs
2121.. _logs : https://app-smtp.sendinblue.com/log
2222
@@ -26,7 +26,7 @@ Settings
2626
2727.. rubric :: EMAIL_BACKEND
2828
29- To use Anymail's SendinBlue backend, set:
29+ To use Anymail's Sendinblue backend, set:
3030
3131 .. code-block :: python
3232
@@ -39,7 +39,7 @@ in your settings.py.
3939
4040.. rubric :: SENDINBLUE_API_KEY
4141
42- The API key can be retrieved from your SendinBlue `SMTP & API settings `_.
42+ The API key can be retrieved from your Sendinblue `SMTP & API settings `_.
4343Make sure the version column indicates "v3." (v2 keys don't work with
4444Anymail. If you don't see a v3 key listed, use "Create a New API Key".)
4545Required.
@@ -62,7 +62,7 @@ nor ``ANYMAIL_SENDINBLUE_API_KEY`` is set.
6262
6363.. rubric :: SENDINBLUE_API_URL
6464
65- The base url for calling the SendinBlue API.
65+ The base url for calling the Sendinblue API.
6666
6767The default is ``SENDINBLUE_API_URL = "https://api.sendinblue.com/v3/" ``
6868(It's unlikely you would need to change this.)
@@ -73,17 +73,17 @@ The default is ``SENDINBLUE_API_URL = "https://api.sendinblue.com/v3/"``
7373esp_extra support
7474-----------------
7575
76- To use SendinBlue features not directly supported by Anymail, you can
76+ To use Sendinblue features not directly supported by Anymail, you can
7777set a message's :attr: `~anymail.message.AnymailMessage.esp_extra ` to
78- a `dict ` that will be merged into the json sent to SendinBlue 's
78+ a `dict ` that will be merged into the json sent to Sendinblue 's
7979`smtp/email API `_.
8080
8181Example:
8282
8383 .. code-block :: python
8484
8585 message.esp_extra = {
86- ' hypotheticalFutureSendinBlueParam ' : ' 2022' , # merged into send params
86+ ' hypotheticalFutureSendinblueParam ' : ' 2022' , # merged into send params
8787 }
8888
8989
@@ -98,59 +98,59 @@ to apply it to all messages.)
9898Limitations and quirks
9999----------------------
100100
101- SendinBlue 's v3 API has several limitations. In most cases below,
101+ Sendinblue 's v3 API has several limitations. In most cases below,
102102Anymail will raise an :exc: `~anymail.exceptions.AnymailUnsupportedFeature `
103103error if you try to send a message using missing features. You can
104104override this by enabling the :setting: `ANYMAIL_IGNORE_UNSUPPORTED_FEATURES `
105105setting, and Anymail will try to limit the API request to features
106- SendinBlue can handle.
106+ Sendinblue can handle.
107107
108108**HTML body required **
109- SendinBlue 's API returns an error if you attempt to send a message with
109+ Sendinblue 's API returns an error if you attempt to send a message with
110110 only a plain-text body. Be sure to :ref: `include HTML <sending-html >`
111111 content for your messages if you are not using a template.
112112
113- (SendinBlue *does * allow HTML without a plain-text body. This is generally
113+ (Sendinblue *does * allow HTML without a plain-text body. This is generally
114114 not recommended, though, as some email systems treat HTML-only content as a
115115 spam signal.)
116116
117117**Inline images **
118- SendinBlue 's v3 API doesn't support inline images, at all.
119- (Confirmed with SendinBlue support Feb 2018.)
118+ Sendinblue 's v3 API doesn't support inline images, at all.
119+ (Confirmed with Sendinblue support Feb 2018.)
120120
121121 If you are ignoring unsupported features, Anymail will try to send
122122 inline images as ordinary image attachments.
123123
124124**Attachment names must be filenames with recognized extensions **
125- SendinBlue determines attachment content type by assuming the attachment's
125+ Sendinblue determines attachment content type by assuming the attachment's
126126 name is a filename, and examining that filename's extension (e.g., ".jpg").
127127
128128 Trying to send an attachment without a name, or where the name does not end
129- in a supported filename extension, will result in a SendinBlue API error.
129+ in a supported filename extension, will result in a Sendinblue API error.
130130 Anymail has no way to communicate an attachment's desired content-type
131- to the SendinBlue API if the name is not set correctly.
131+ to the Sendinblue API if the name is not set correctly.
132132
133133**Single Reply-To **
134- SendinBlue 's v3 API only supports a single Reply-To address.
134+ Sendinblue 's v3 API only supports a single Reply-To address.
135135
136136 If you are ignoring unsupported features and have multiple reply addresses,
137137 Anymail will use only the first one.
138138
139139**Metadata **
140- Anymail passes :attr: `~anymail.message.AnymailMessage.metadata ` to SendinBlue
140+ Anymail passes :attr: `~anymail.message.AnymailMessage.metadata ` to Sendinblue
141141 as a JSON-encoded string using their :mailheader: `X-Mailin-custom ` email header.
142142 The metadata is available in tracking webhooks.
143143
144144**No delayed sending **
145- SendinBlue does not support :attr: `~anymail.message.AnymailMessage.send_at `.
145+ Sendinblue does not support :attr: `~anymail.message.AnymailMessage.send_at `.
146146
147147**No click-tracking or open-tracking options **
148- SendinBlue does not provide a way to control open or click tracking for individual
148+ Sendinblue does not provide a way to control open or click tracking for individual
149149 messages. Anymail's :attr: `~anymail.message.AnymailMessage.track_clicks ` and
150150 :attr: `~anymail.message.AnymailMessage.track_opens ` settings are unsupported.
151151
152152**No envelope sender overrides **
153- SendinBlue does not support overriding :attr: `~anymail.message.AnymailMessage.envelope_sender `
153+ Sendinblue does not support overriding :attr: `~anymail.message.AnymailMessage.envelope_sender `
154154 on individual messages.
155155
156156
@@ -159,37 +159,37 @@ SendinBlue can handle.
159159Batch sending/merge and ESP templates
160160-------------------------------------
161161
162- SendinBlue supports :ref: `ESP stored templates <esp-stored-templates >` populated with
162+ Sendinblue supports :ref: `ESP stored templates <esp-stored-templates >` populated with
163163global merge data for all recipients, but does not offer :ref: `batch sending <batch-send >`
164164with per-recipient merge data. Anymail's :attr: `~anymail.message.AnymailMessage.merge_data `
165165and :attr: `~anymail.message.AnymailMessage.merge_metadata ` message attributes are not
166- supported with the SendinBlue backend, but you can use Anymail's
167- :attr: `~anymail.message.AnymailMessage.merge_global_data ` with SendinBlue templates.
166+ supported with the Sendinblue backend, but you can use Anymail's
167+ :attr: `~anymail.message.AnymailMessage.merge_global_data ` with Sendinblue templates.
168168
169- SendinBlue supports two different template styles: a `new template language `_
169+ Sendinblue supports two different template styles: a `new template language `_
170170that uses Django template syntax (with ``{{ param.NAME }} `` style substitutions),
171171and an "old" template language that used percent-delimited ``%NAME% `` style
172172substitutions. Anymail v7.0 and later require new style templates.
173173
174174.. versionchanged :: 7.0
175175
176- Anymail switched to a SendinBlue API that supports the new template language
176+ Anymail switched to a Sendinblue API that supports the new template language
177177 and removes several limitations from the earlier template send API. But the new API
178178 does not support attachments, and can behave oddly if used with old style templates.
179179
180180.. caution ::
181181
182182 Anymail v7.0 and later work *only * with Sendinblue's *new * template language. You should
183- follow SendinBlue 's instructions to `convert each old template `_ to the new language.
183+ follow Sendinblue 's instructions to `convert each old template `_ to the new language.
184184
185185 Although unconverted old templates may appear to work with Anymail v7.0, some
186186 features may not work properly. In particular, ``reply_to `` overrides and recipient
187187 display names are silently ignored when *old * style templates are sent with the
188188 *new * API used in Anymail v7.0.
189189
190- To use a SendinBlue template, set the message's
190+ To use a Sendinblue template, set the message's
191191:attr: `~anymail.message.AnymailMessage.template_id ` to the numeric
192- SendinBlue template ID, and supply substitution attributes using
192+ Sendinblue template ID, and supply substitution attributes using
193193the message's :attr: `~anymail.message.AnymailMessage.merge_global_data `:
194194
195195 .. code-block :: python
@@ -199,15 +199,15 @@ the message's :attr:`~anymail.message.AnymailMessage.merge_global_data`:
199199 # ...multiple to emails would all get the same message
200200 # (and would all see each other's emails in the "to" header)
201201 )
202- message.template_id = 3 # use this SendinBlue template
202+ message.template_id = 3 # use this Sendinblue template
203203 message.from_email = None # to use the template's default sender
204204 message.merge_global_data = {
205205 ' name' : " Alice" ,
206206 ' order_no' : " 12345" ,
207207 ' ship_date' : " May 15" ,
208208 }
209209
210- Within your SendinBlue template body and subject, you can refer to merge
210+ Within your Sendinblue template body and subject, you can refer to merge
211211variables using Django template syntax, like ``{{ params.order_no }} `` or
212212``{{ params.ship_date }} `` for the example above.
213213
@@ -233,7 +233,7 @@ Status tracking webhooks
233233------------------------
234234
235235If you are using Anymail's normalized :ref: `status tracking <event-tracking >`, add
236- the url at SendinBlue 's site under `Transactional > Settings > Webhook `_.
236+ the url at Sendinblue 's site under `Transactional > Settings > Webhook `_.
237237
238238The "URL to call" is:
239239
@@ -243,23 +243,23 @@ The "URL to call" is:
243243 * *yoursite.example.com * is your Django site
244244
245245Be sure to select the checkboxes for all the event types you want to receive. (Also make
246- sure you are in the "Transactional" section of their site; SendinBlue has a separate set
246+ sure you are in the "Transactional" section of their site; Sendinblue has a separate set
247247of "Campaign" webhooks, which don't apply to messages sent through Anymail.)
248248
249- If you are interested in tracking opens, note that SendinBlue has both a "First opening"
249+ If you are interested in tracking opens, note that Sendinblue has both a "First opening"
250250and an "Opened" event type, and will generate both the first time a message is opened.
251251Anymail normalizes both of these events to "opened." To avoid double counting, you should
252252only enable one of the two.
253253
254- SendinBlue will report these Anymail :attr: `~anymail.signals.AnymailTrackingEvent.event_type `\s :
254+ Sendinblue will report these Anymail :attr: `~anymail.signals.AnymailTrackingEvent.event_type `\s :
255255queued, rejected, bounced, deferred, delivered, opened (see note above), clicked, complained,
256256unsubscribed, subscribed (though this should never occur for transactional email).
257257
258- For events that occur in rapid succession, SendinBlue frequently delivers them out of order.
258+ For events that occur in rapid succession, Sendinblue frequently delivers them out of order.
259259For example, it's not uncommon to receive a "delivered" event before the corresponding "queued."
260260
261261The event's :attr: `~anymail.signals.AnymailTrackingEvent.esp_event ` field will be
262- a `dict ` of raw webhook data received from SendinBlue .
262+ a `dict ` of raw webhook data received from Sendinblue .
263263
264264
265265.. _Transactional > Settings > Webhook : https://app-smtp.sendinblue.com/webhook
@@ -270,4 +270,4 @@ a `dict` of raw webhook data received from SendinBlue.
270270Inbound webhook
271271---------------
272272
273- SendinBlue does not support inbound email handling.
273+ Sendinblue does not support inbound email handling.
0 commit comments