首页 > 解决方案 > Django-python 电子邮件表单未通过 gmail smtp 转发发件人的电子邮件地址

问题描述

我在基于 django-python 的网页上设置电子邮件表单。我看过这个很酷的视频,很好地解释了如何设置 django 以及如何将 gmail 合并为 smtp 服务器。

该表单具有三个字段:全名;电子邮件地址; 和消息。

一切正常,但 gmail smtp 说我 (EMAIL_HOST_USER) 是邮件的发件人,而不是填写表单的人,即我缺少使用默认 youtube 视频实现的已填写电子邮件地址。

这个线程这个线程说,我们不能改变发件人地址。我已将通过表单(即变量 message_email)询问的人的电子邮件地址添加到收件人中。这样您就不会丢失电子邮件地址,提问者会收到您正在处理他/她的问题的反馈。

我们需要得到另外两个动态变量。1.) message_name(提问者的全名) 2.) message(即来自表单的纯文本,在每个段落的末尾带有 \r\n 标记,具有非常好的 python print() 输出)。看:

message = 'Dear website developers,\r\nI would like to ask when the website will be online available.\r\nKind regards,\r\nJohn Doe'

print(message)
Dear website developers,
I would like to ask when the website will be online available.
Kind regards,
John Doe

@Maina Kamau 建议通过 hmtl 格式将动态内容添加到具有清晰内容的电子邮件中,如此所述。是一个有用的线程,描述了如何在 python 中替换部分文本。修改后的 nad 工作代码现在如下所示:

from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.utils.html import strip_tags

html_message = render_to_string(
        'email.html',
        {'name': message_name,'email': message_email, 'message': message}
)
plain_message = strip_tags(html_message)
html_message = html_message.replace("\r\n", "<br>")

send_mail(
        'message from ' + message_name, # email_subject
        plain_message, # message
        message_email, # from email
        ['recepient1@example.com', message_email], # To Email
        html_message=html_message, # html formated message
)

email.html(来自 render_to_string 命令)将动态内容合并到电子邮件消息中,可以如下所示:

<p style="text-align: justify">Dear {{ name }},
   <br>We have recieved your message and will respond as soon as possible.
   <br>This is an automatically generated message.
   <br>If you want to provide some additional information to us you can easily respond at this email.
   <br>Yours sincerely,
   <br>Helpdesk
</p>
<p style="text-align: justify"><br></p>
<p style="text-align: justify"><i>Your initial message details are as follows:</i>
   <br><b>Full Name:</b> {{ name }}
   <br><b>Email Address:</b> {{ email }}
   <br><b>Message:</b>
   <br>{{ message }}
</p>

非常感谢@Maina Kamau 的评论,没有他们我不会让它工作!!!

最好的,雷内

标签: pythondjangoemailsmtpgmail

解决方案


我相信就更改无法更改的发件人地址而言,这是因为发件人电子邮件是配置了执行发送所需的所有凭据的电子邮件。至于格式化您的电子邮件,这可以通过在您的电子邮件正文中添加一些 HTML 语法来实现。该线程上投票最多的答案显示了如何实现这一目标。


推荐阅读