Как отправить письмо через Sendgrid в качестве ответа на письмо, полученное через Sendgrid inbound parse с помощью Django?

Итак, я отправляю письмо с помощью персонализации sendgrid примерно так:

message = {
            "personalizations": context["personalizations"],
            "from": {"email": context["sender_email"]},
            "subject": context["subject"],
            "content": [{"type": MimeType.html, "value": context["body"]}],
            "reply_to": {"email": context["reply_to"]}
        }
sg = SendGridAPIClient(os.environ.get("SENDGRID_API_KEY"))
sg.send(message)

Здесь context["personalization"] - это объект, как показано ниже:

{
            "to": [{"email": applicant.email}],
            "custom_args": {
                "email_id": str(correspondance.id),
                "env": settings.ENVIRONMENT
            }
}

Отправка и получение электронных писем работают нормально. Проблема в том, что я не могу отправить письмо в качестве ответа на какое-то письмо. Например, пользователь отправляет мне письмо, которое я получаю через входящий разбор sendgrid. Теперь я хочу ответить на полученное письмо

Решение, которое я нашел в интернете, заключалось в том, что я должен добавить ID 'in_reply_to', который я получаю как Message_ID при разборе входящих сообщений, но это не сработало. Я сделал примерно следующее:

message = {
            "personalizations": context["personalizations"],
            "from": {"email": context["sender_email"]},
            "subject": context["subject"],
            "content": [{"type": MimeType.html, "value": context["body"]}],
            "reply_to": {"email": context["reply_to"]},
            "in_reply_to": message_id
        }
sg = SendGridAPIClient(os.environ.get("SENDGRID_API_KEY"))
sg.send(message)

Здесь message_id - это Message_ID, который я получил в json входящего письма.

Лучше всего мне помогает установка заголовка References в исходящем письме, чтобы проинструктировать почтовые клиенты о создании потока.

Писатели используют References, чтобы указать, что у сообщения есть родитель. Последний идентификатор в References идентифицирует родителя. Таким образом, заголовок References представляет собой разделенный пробелами список идентификаторов сообщений, обернутый <> в следующем формате:

"<MESSAGE_ID>"

Вам следует проверить, не обернуто ли уже в SendGrid сообщение, полученное от конечной точки разбора входящих сообщений, и затем добавить его к строке ссылок.

import sendgrid
import os
from sendgrid.helpers.mail import Mail, Email, To, Content

previously_received_mail_id = "<abc@email.com>"

references = "" + previously_received_mail_id # empty in your case as its the first reply
sg = sendgrid.SendGridAPIClient(api_key=os.environ.get('SENDGRID_API_KEY'))
from_email = Email("test@example.com")  # Change to your verified sender
to_email = To("test@example.com")  # Change to your recipient
subject = "Sending with SendGrid is Fun"
content = Content("text/plain", "and easy to do anywhere, even with Python")
mail = Mail(from_email, to_email, subject, content)
mail.personalizations[0].add_header(Header("References",references))
# Get a JSON-ready representation of the Mail object
mail_json = mail.get()

# Send an HTTP POST request to /mail/send
response = sg.client.mail.send.post(request_body=mail_json)
print(response.status_code)
print(response.headers)
Вернуться на верх