Как отправить письмо через 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)