【问题标题】:Python Sendgrid add CC to emailPython Sendgrid 将抄送添加到电子邮件
【发布时间】:2018-10-11 13:59:08
【问题描述】:

我正在为 Python 使用 SendGrid。我想在电子邮件中抄送一些人。似乎他们可能不再支持对电子邮件进行抄送,但我不肯定这是真的吗?但肯定有某种解决方法,但我很惊讶我在这方面找不到太多支持。

这是我的基本代码:

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

我怎样才能修改它,以便它可以通过电子邮件抄送某人?

【问题讨论】:

    标签: python sendgrid


    【解决方案1】:

    使用 SendGrid 的 Personalization()Email() 类对我不起作用。这就是我让它工作的方式:

    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}')
    
    

    希望这对某人有所帮助。

    【讨论】:

      【解决方案2】:

      我解决了。圣地亚哥的回答让我大部分时间都在那里,但这是我需要做的:

      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())
      

      如果您不包含 p.add_to(to_email) 它会拒绝它,因为个性化对象中没有“to email”。另外,如果你没有在邮件对象中包含“to_email”,它会拒绝它,因为它正在寻找那个参数,所以你必须有点多余并定义它两次。

      【讨论】:

        【解决方案3】:

        我一直在看代码:https://github.com/sendgrid/sendgrid-python/blob/master/examples/mail/mail.py

        看起来您可以通过向邮件添加个性化来做到这一点,例如:

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

        【讨论】:

        • 感谢您的帮助。但是,这给了我以下错误: python_http_client.exceptions.BadRequestsError: HTTP Error 400: Bad Request
        • 如果我使用“p.add_to”而不是“p.add_cc”,它确实有效,但是,它会单独向他们发送电子邮件。我希望将他们包含在电子邮件链中,这样如果他们全部回复,就会发送给所有人。
        • 抱歉,我不知道会发生什么。此时最好查看 HTTP 请求和响应,看看那里是否有任何问题。
        • 这很奇怪,因为根据文档,它应该可以工作......我的 JSON 正文看起来就像他们在本文档中拥有的 JSON 对象:sendgrid.com/docs/for-developers/sending-email/personalizations
        【解决方案4】:

        根据here 的答案,如果您将另一封电子邮件添加到“to_email”,您可以抄送至电子邮件。

        【讨论】:

        • 谢谢,但这不是使用 SendGrid。
        【解决方案5】:

        如果您想抄送多个用户,那么在 djanogo 中使用 sendgrid 您需要导入以下行

        用于发送邮件的函数

        最后你需要如何将数据参数发送到上述函数,以便它可以抄送此人

        email = send_sandgridmail(sender=sender,receiver=receivers,subject=subject,content=message,reply_to=sender,cc=[admin_mail_account_mail,"rawatanup918@gmail.com"],attachment=None)
        

        【讨论】:

        • 您可以直接将代码粘贴到您的答案中,而不是发布代码的屏幕截图吗?这有助于我们的视障社区成员在使用屏幕阅读器浏览时理解您的答案。
        【解决方案6】:

        我希望这会有所帮助。从@anurag 图像脚本简化

        import os
        from sendgrid import SendGridAPIClient
        from sendgrid.helpers.mail import To,Mail,ReplyTo,Email,Cc
        def send_sandgridmail (sender, receiver, subject, content, reply_to=None, cc=[], attachment=None) :
            # content = convert_safe_text(content)
            # to email = To(receiver)
            message = Mail(
                from_email=str(sender),
                to_emails=receiver,
                subject= str(subject),
                html_content = content)
        
            if reply_to:
                message.reply_to= ReplyTo(reply_to)
        
            if attachment:
                message.add_attachment (attachment)
        
            if len(cc):
                cc_mail = [] 
                for cc_person in cc:
                    cc_mail.append(Cc(cc_person, cc_person)) 
                message.add_cc (cc_mail)
        
            try:
                SENDGRID_API_KEY = 'your sendgrid api key'
                sg= SendGridAPIClient (SENDGRID_API_KEY)
                response= sg.send(message)
                print (response.status_code)
                # print (response.body)
                # print (response.headers)
            except Exception as e:
                print(e)
                return response
        

        【讨论】:

          猜你喜欢
          • 2015-07-17
          • 2011-11-15
          • 1970-01-01
          • 1970-01-01
          • 2021-12-15
          • 1970-01-01
          • 2013-01-01
          • 2020-10-10
          • 1970-01-01
          相关资源
          最近更新 更多