The Python Oracle

Python Sendgrid add CC to email

--------------------------------------------------
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------

Music by Eric Matyas
https://www.soundimage.org
Track title: Popsicle Puzzles

--

Chapters
00:00 Python Sendgrid Add Cc To Email
00:40 Answer 1 Score 0
00:51 Answer 2 Score 3
01:06 Accepted Answer Score 7
01:46 Answer 4 Score 11
02:16 Thank you

--

Full question
https://stackoverflow.com/questions/5276...

--

Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...

--

Tags
#python #sendgrid

#avk47



ANSWER 1

Score 11


Using the SendGrid's Personalization() or Email() class did not work for me. This is how I got it to work:

from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail, Cc

# using a list of tuples for emails
# e.g. [('email1@example.com', 'email1@example.com'),('email2@example.com', 'email2@example.com')]
to_emails = []
for r in recipients:
  to_emails.append((r, r))

# note the Cc class
cc_emails = []
for c in cc:
  cc_emails.append(Cc(c, c))

message = Mail(
  from_email=from_email,
  to_emails=to_emails,
  subject='My Subject',
  html_content=f'<div>My HTML Email...</div>'
)

if cc_emails:
  message.add_cc(cc_emails)

try:
  sg = SendGridAPIClient(os.getenv('SENDGRID_API_KEY'))            
  sg.send(message)  
except Exception as e:            
  print(f'{e}')

Hopefully this helps someone.




ACCEPTED ANSWER

Score 7


I resolved it. Santiago's answer got me mostly there, but here is what I needed to do:

sg = sendgrid.SendGridAPIClient(apikey='****')
from_email = Email(sender_address, sender_name)
to_email = Email(to_email)
cc_email = Email(cc_email)
p = Personalization()
p.add_to(to_email)
p.add_cc(cc_email)
subject = subject
content = Content("text/plain", email_message)
mail = Mail(from_email, subject, to_email, content)
mail.add_personalization(p)
response = sg.client.mail.send.post(request_body=mail.get())

If you don't include the p.add_to(to_email) it rejects it because there is no "to email" in the personalization object. Also, if you don't include the "to_email" inside the mail object it rejects it because it is looking for that argument, so you have to be a bit redundant and define it twice.




ANSWER 3

Score 3


I've been looking at the code: https://github.com/sendgrid/sendgrid-python/blob/master/examples/mail/mail.py

And it looks like you can do that by adding a personalization to the mail, for example:

cc_email = Email(cc_address)
p = Personalization()
p.add_cc(cc_email)
mail.add_personalization(p)



ANSWER 4

Score 0


Based on the answers here you can CC to email if you add another email to 'to_email'.