如何确保在使用Django EmailMessage课程发送垃圾邮件时未收到电子邮件?

时间:2018-04-19 08:43:45

标签: django email spam

我的settings.py文件中有以下设置。

EMAIL_HOST = 'mail.domain.com'
EMAIL_HOST_USER = 'me@domain.com'
EMAIL_HOST_PASSWORD = 'mypassword'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

我的Django应用程序中的用户可以使用EmailMessage类向带有PDF附件的客户端发送电子邮件。这是代码:

email = EmailMessage()
email.subject = 'Demo subject'
email.body = self.request.GET.get('email_body', '')
email.from_email = 'Full Name <user@domain.com>'
email.to = ['{}'.format(self.request.GET.get('to_address'))]

email.attach_file(os.path.join(settings.MEDIA_ROOT, 'quotation_email.pdf'))

email.send()

我的问题是,

  1. 由于我可以创建代码以不同的方式发送电子邮件,因此某些域中的电子邮件是否会被标记为垃圾邮件?

  2. 我可以访问已设置的邮件服务器。我可以将电子邮件帐户映射到Django应用程序中的用户帐户,以便Django使用电子邮件服务器作为媒介根据登录用户发送电子邮件吗?

  3. 当我永远不会使用该电子邮件帐户发送任何邮件时,为什么我需要在settings.py文件中提供电子邮件和密码?每次有人发送电子邮件时,我都不能登录电子邮件吗?

1 个答案:

答案 0 :(得分:2)

  
      
  1. 由于我可以创建代码以便以不同的方式发送电子邮件,因此电子邮件是否会在某些域中被标记为垃圾邮件?
  2.   

电子邮件的域名部分(@之后的部分)主要决定了电子邮件是否最终会成为垃圾邮件(当然,还有确定垃圾邮件的其他条件,但兔子漏洞非常深入。讨论这将是一个很长的答案)。

如果您是特定域的授权发件人,则可以发送john@domain.comno-reply@domain.com等电子邮件,而无需担心。

了解有关域授权的SPF和DKIM记录。这是一个我无法在答案中真正涵盖的话题。

  
      
  1. 我可以访问已设置的邮件服务器。我可以将电子邮件帐户映射到Django应用程序中的用户帐户,以便Django使用电子邮件服务器作为媒介根据登录用户发送电子邮件吗?
  2.   

是的,你可以。只需获取用户的电子邮件地址,然后将其用作From地址即可发送电子邮件。

  
      
  1. 当我可能永远不会使用该电子邮件帐户发送任何邮件时,为什么我需要在settings.py文件中提供电子邮件和密码?每次有人发送电子邮件时,我都不能登录电子邮件吗?
  2.   

您指的是EMAIL_HOST_USER吗?这是出于身份验证的目的。登录SMTP服务器需要此电子邮件。如果没有这个,SMTP服务器将不知道您是服务器的所有者还是试图使用其服务器发送垃圾邮件的垃圾邮件发送者。

但是如果SMTP服务器在本地运行,您可以使用localhost作为EMAIL_HOST并忽略身份验证。因为大多数电子邮件服务器(MTA)从本地主机中继电子邮件而不需要身份验证。但这也取决于配置。

更新:

电子邮件就像真正的邮件一样发送 - 在信封内。信封及其中的字母可以有不同的From地址。在电子邮件的情况下也是如此。

这是一个说明性的例子。假设您拥有PO Box。如果你想给你的朋友发一封信,你可以这样做:

  1. 在纸上写下您的信息。你将签署这封信。
  2. 购买信封。在信封上写下您朋友的To地址。
  3. 在信封上写下邮政信箱的From地址。您不会写自己的地址,因为如果邮件无法发送,它将被退还给您的邮政信箱。
  4. 寄出信。
  5. 漂亮,简单。假设您家中的某个人也想给他们认识的人发一封信。但他们并不拥有邮政信箱。他们必须花一些钱和时间才能获得邮政信箱。但为什么要打扰,因为你已经有一个。这是如何工作的:

    1. 他们会在纸上写下这封邮件。他们将以自己的名义签署这封信。
    2. 购买信封。写下他们朋友的To地址。
    3. 写下您的邮政信箱的From地址,以便邮件无法送达您的邮政信箱。
    4. 寄出信件。
    5. 这是实际电子邮件的工作方式。

      1. SMTP服务器就像邮局。
      2. 您的电子邮件帐户就像邮政信箱。
      3. 您发送的每条消息都会进入信封。
      4. 信封上的发件人地址可能与发件人不同 在里面留言的地址。
      5. 我认为Django使用EMAIL_HOST_USER设置来撰写电子邮件信封,并将您提供的from_email地址用作From地址。

        信封上的发件人地址称为MAIL FROM地址或Return-Path地址。这不会向接收用户显示。您在Gmail或Yahoo Mail中看到的From地址称为MIME From地址。它们都可以不同。