【发布时间】:2020-12-04 10:48:26
【问题描述】:
请任何人帮助我解决这个问题。我试图让我网站的用户通过在他们的个人资料页面上填写表格来向客户发送评论请求。他们只需要提供收件人的电子邮件地址,然后后端将使用它来配置 HTML 消息,然后发送给收件人。目前,如果我对收件人电子邮件地址进行硬编码,整个系统就可以正常工作。但是,一旦我尝试从 request.POST['receiver'] 获取电子邮件,它似乎没有将参数传递给函数。
这里是视图函数:
def request_review_api(request):
receiver_email = request.POST['receiver']
print(receiver_email)
request_review(request, receiver_email)
return redirect('profile_company')
@login_required(login_url='loginpage_company')
@allowed_users_company(allowed_roles=['company'])
def request_review(request, receiver_email):
company = get_object_or_404(Company, user=request.user)
company_id = company.pk
print(company)
html_tpl_path = 'companyusers/request_review.html'
context_data = {'company': company, 'company_id': company_id,}
email_html_template = get_template(html_tpl_path).render(context_data)
receiver = receiver_email
email_msg = EmailMessage('Review Request',
email_html_template,
settings.EMAIL_HOST_USER,
[receiver],
reply_to=['no-reply@bbb.com'],
)
# this part allows the message to be send as html instead of plain text
email_msg.content_subtype = 'html'
email_msg.send(fail_silently=False)
这是我的模板中的内容:
<p class="tm-request-review-display card-text">
<form class="tm-request-review-display" action="{%url
'request_review' %}" method="POST"> {% csrf_token %}
<div class="form-group">
<div class="col-md">
<input type="email" class="form-control" name="receiver"
id="receiver" placeholder="Enter Reviewer's Email">
</div>
</div>
<div class="form-group">
<div class="col-md">
<input class="btn btn-primary btn-sm" type="submit"
value="Send Request">
</div>
</div>
</form>
</p>
一旦我像这样对收件人电子邮件进行硬编码,电子邮件就会成功发送:
def request_review_api(request):
request_review(request)
return redirect('profile_company')
@login_required(login_url='loginpage_company')
@allowed_users_company(allowed_roles=['company'])
def request_review(request):
company = get_object_or_404(Company, user=request.user)
company_id = company.pk
print(company)
html_tpl_path = 'companyusers/request_review.html'
context_data = {'company': company, 'company_id': company_id,}
email_html_template = get_template(html_tpl_path).render(context_data)
receiver_email = 'sndnd@yahoo.com'
email_msg = EmailMessage(' Review Request',
email_html_template,
settings.EMAIL_HOST_USER,
[receiver_email],
reply_to=['no-reply@yahoo.ng'],
)
# this part allows the message to be send as html instead of plain text
email_msg.content_subtype = 'html'
email_msg.send(fail_silently=False)
【问题讨论】:
-
为什么在为接收者调用 EmailMessage 时使用方括号?为什么不在您的示例中使用 receiver_email 不起作用?您是否尝试在 request_review 函数中打印出receiver_message 的值?
-
你能显示你的
urls.py -
方括号是因为那是一个列表。这意味着它可能需要多个接收器,用逗号分隔。如果删除方括号,则会出现此错误:“to”参数必须是列表或元组
-
这是 url 路径:path('request_review', views.request_review_api, name='request_review'),
-
是的,先生,我已经在 request_review 函数中打印了receiver_email 的值,它打印得很好。只是没有传递给 email_msg = EmailMessage('Review Request', email_html_template, settings.EMAIL_HOST_USER, [receiver_email], reply_to=['no-reply@xxbbxx.com'], )
标签: django django-views django-forms django-templates html-email