首页 > 解决方案 > 没有 sendgrid 的 Django 联系页面

问题描述

我有一个有效的 django 联系页面,当前配置为将邮件消息发送到控制台,并在我的服务器上进行了测试。使用我的服务器设置的唯一问题是它使用我的 settings.py 中预先配置的电子邮件来发送消息。我想输入自定义电子邮件地址。我已经看到 sendgrid 是这样做的一种方式,但我想知道是否可以在不使用 sendgrid 之类的服务的情况下实现这一目标?

编辑:项目代码。我希望用户在 from_email 字段中输入他们的电子邮件地址并使用我的服务器发送消息,而不是使用像 sendgrid 这样的服务。

设置.py

    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_HOST = 'server.domain.tld'
    EMAIL_HOST_USER = 'email@domain.tld'
    EMAIL_HOST_PASSWORD = 'password'
    EMAIL_PORT = 587
    EMAIL_USE_TLS = True

表格.py


    class ContactForm(forms.Form):
        from_email = forms.EmailField(
            required=True,
            widget=forms.EmailInput(attrs={"placeholder": "Your email address", "class": "heading"}),
            label=''
        )
        subject = forms.CharField(
            required=True,
            widget=forms.TextInput(attrs={"placeholder": "Your subject", "class": "heading"}),
            label=''
        )
        message = forms.CharField(
            required=True,
            widget=forms.Textarea(attrs={"placeholder": "Your message here"}),
            label=''
        )

视图.py


    def contact_page_view(request):
        contact_query = ContactForm(request.POST or None)
    
        if request.method == 'POST':
            if contact_query.is_valid():
                from_email = contact_query.cleaned_data['from_email']
                subject = contact_query.cleaned_data['subject']
                message = contact_query.cleaned_data['message']
    
                try:
                    send_mail(subject, message, from_email, ['email@domain.tld'])
                except BadHeaderError:
                    return HttpResponse('Invalid header found.')
                return redirect('pagesapp:confirm')
        return render(request, 'pagesapp/contact.html', {'contact_sub': contact_query})

联系人.html


      <div class="centre form-container centre-pad mobile-pad">
        <form class="article-form" method="POST">
          <h1 class="gold-card">Email Us</h1>
          {% csrf_token %}
          {{contact_sub.as_p}}
          <input type="submit" value="Send email">
        </form>
      </div>

标签: djangoemail

解决方案


如果您不想使用任何付费服务,那么您可以在您的主机上设置一个 SMTP 服务器,并在 Django 设置中使用该配置来发送电子邮件。


推荐阅读