Skip to content

SparkPost.transmissions.send is ignoring CC: and BCC: if recipient list ID is provided #226

Open

Description

@dgoldenberg-audiomack

My test code sends out email messages as intended to the given recipient list but appears to completely ignore the CC: and BCC: addresses. (Unless there's something wrong in the below invocation?)

SDK version: 1.3.10

Code:

from sparkpost import SparkPost
sp = SparkPost("1234..........6789")
response = sp.transmissions.send(
    use_sandbox=False,
    recipient_list="acme-test-recipient-list",
    html="<html><body><p>This is a test email notif; please ignore.</p></body></html>",
    from_email="reports@acme.com",
    subject="Test email message; please ignore",
    bcc=["my_own_personal_email@gmail.com", "my_own_personal_email@yahoo.com"],
    reply_to="data@acme.com",
)
print(response)

From debugging, I can tell the field is making it into the payload but doesn't appear to be used (email doesn't get sent to the CC: or BCC: addresses)

{
	"bcc": ["my_own_personal_email@gmail.com", "my_own_personal_email@yahoo.com"],
	"content": {
		"from": {
			"email": "reports@acme.com"
		},
		"reply_to": "data@acme.com",
		"subject": "Test email message; please ignore",
		"html": "<html><body><p>This is a test email notif; please ignore.</p></body></html>"
	},
	"options": {
		"sandbox": false
	},
	"recipients": {
		"list_id": "acme-test-recipient-list"
	}
}

Responses look like this:

{
	'total_rejected_recipients': 0,
	'total_accepted_recipients': 2,
	'id': '7204854351104320440'
}

(Of note: I have tried supplying CC or BCC as a string vs. list, and a single value vs. multiple values, to no avail so far)

Any idea as to why this is happening? A workaround? Thanks.

Activity

  1. dgoldenberg-audiomack commented on Feb 27, 2023

    @dgoldenberg-audiomack
    Author

    I can tell that the SparkPost SDK only looks at CC and BCC if it's being given a dictionary of recipients; if it's given a recipient list ID, it'll ignore the CC and the BCC.

            :param list|dict recipients: List of email addresses, or a dict:
                ``{'address': {'name': 'Kyla', 'email': 'hello@example.com' }}``
            :param str recipient_list: ID of recipient list. If this is set,
                the `recipients` param will be ignored
    .......
            if recipients and not isinstance(recipients, dict):
                model['recipients'] = self._extract_recipients(recipients)
                recipients = model['recipients']
    
                cc = model.pop('cc', None)
                if cc:
                    headers = content.setdefault('headers', {})
                    headers['CC'] = ','.join(cc)
                    cc_copies = self._format_copies(recipients, cc)
                    recipients.extend(cc_copies)
    
                bcc = model.pop('bcc', None)
                if bcc:
                    bcc_copies = self._format_copies(recipients, bcc)
                    recipients.extend(bcc_copies)
    

    These lines of code aren't executed b/c recipient list ID is treated as a dict so they bypass that chunk of code. The CC/BCC are still part of the payload but is apparently ignored.

  2. changed the title [-]SparkPost.transmissions.send doesn't appear to be handling CC: and BCC:[/-] [+]SparkPost.transmissions.send is ignoring CC: and BCC: if recipient list ID is provided[/+] on Feb 28, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions