#django #django-templates #sendgrid #email
# #django #django-шаблоны #sendgrid #Адрес электронной почты
Вопрос:
Я использую попытку использовать динамические шаблоны электронной почты Django через SendGrid API. Я понимаю, что уже есть некоторые темы по этому вопросу, однако я не смог заставить их работать.
У меня есть базовый шаблон с некоторыми динамическими переменными, основанными на результатах поиска, которые я хочу отправить пользователю по электронной почте. Все это работает, за исключением того, что HTML всегда отображается в тексте, несмотря на применение того, что я видел в ряде других потоков здесь.
Был бы благодарен за любую помощь здесь.
Views.py
def customer_selections_sent(request):
#make=request.POST['makeselection']
if request.method == 'GET':
current_site = get_current_site(request)
emailto = request.user.email_user
user = request.user.username
#call session values from SearchInventory function
modelvalue =request.session.get('modelvalue')
makevalue =request.session.get('makevalue')
subject = 'ShowVroom Selections'
#create variables to be used in the email template
Email_Vars = {
'user': user,
'make': makevalue,
'model': modelvalue,
'domain': current_site.domain,
}
#create the email msg
message = get_template('customer_selections_email.html').render(Email_Vars)
html_message = get_template('customer_selections_email.html').render(Email_Vars)
message.content_subtype = "html" # Main content is now text/html
#send email
request.user.email_user(subject,message)
#request.user.email_user(subject, html_message)
#return redirect('customer_selections_sent')
return render(
request,
'customer_selections_sent.html',
{
'title':'Deals are on the way',
'body':'We will email you shortly with more detail on your choices, you can respond to the dealers via the app until you agree to a viewing, test or purchase ',
'year':datetime.now().year,
}
)
send_mail(subject, message, 'Abc@xyz.org', emailto, fail_silently=False,html_message=html_message)
sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
response = sg.send(message)
#log respon
print(response.status_code)
print(response.body)
print(response.headers)
HTML-шаблон
<!DOCTYPE html>
<html lang="en">
{% load static %}
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Your ShowVroom Selections</title>
<img align="left" src="Logo1.png" alt="ShowVroom">
</head>
<body>
Hi {{ user }},
Here are your search selections;
<Strong>
<br>Make; {{make}} </br>
<br>Model; {{model}} </br>
</Strong>
</body>
<foot>
<a href = "mailto:info@showvroom.ie?subject = Offeramp;body = Message">
Contact ShowVroom
</a>
</foot>
</html>
ОБНОВЛЕННЫЙ VIEWS.PY
def customer_selections_sent(request):
if request.method == 'GET':
#User variables
emailto = request.user.email_user
user = request.user.username
#call session values from another function
modelvalue =request.session.get('modelvalue')
makevalue =request.session.get('makevalue')
subject = 'ShowVroom Selections'
#create variables to be used in the email template
Email_Vars = {
'user': user,
'make': makevalue,
'model': modelvalue,
#'offer': DisplayInventory.GaragePrice,
'domain': current_site.domain,
}
#create the email msg
message = get_template('customer_selections_email.html').render(Email_Vars)
html_message = get_template('customer_selections_email.html').render(Email_Vars)
message.content_subtype = "html" # Main content is now text/html
#Redirect to sent email Webpage
request.user.email_user(subject,message)
return render(
request,
'customer_selections_sent.html',
{
'title':'Deals are on the way',
'body':'We will email you shortly with more detail on your choices, you can respond to the dealers via the app until you agree to a viewing, test or purchase ',
'year':datetime.now().year,
}
)
#send email
send_mail(subject, message, 'email@domain.com', emailto, fail_silently=False,html_message=html_message)
sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
response = sg.send(message)
#log responses
print(response.status_code)
print(response.body)
print(response.headers)
Ответ №1:
Вам необходимо указать значение для html_message
параметра функции send_email.Как вы обнаружили, message
это значение для текстовой версии электронного письма.
Комментарии:
1. Итак, я добавил дополнительную переменную для html_message и добавил html_message в функцию send_mail. Я все еще, похоже, делаю что-то неправильно, хотя, поскольку полученное электронное письмо по-прежнему имеет формат html в текстовом формате.
2. Пожалуйста, создайте новый сегмент кода с кодом, который вы используете. Пожалуйста, также убедитесь, что он правильно отформатирован. В настоящее время очень сложно отладить вашу ситуацию.
3. Теперь это должно быть проще!
4. Что отправляет электронное письмо?
5. send_mail(тема, сообщение, ’email@domain.com ‘, emailto, fail_silently=False,html_message=html_message)