使用 Django EmailMessage class 发送时,如何确保不在垃圾邮件中收到电子邮件?

How to make sure email is not received in spam when sent with Django EmailMessage class?

我的 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 class 向客户端发送带有 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. Since I can create a code to send the email as a different person, will the email not be marked as spam in certain domains?

电子邮件的域部分(@ 之后的部分)主要决定电子邮件是否最终会成为垃圾邮件(当然,确定垃圾邮件还有其他条件,例如发送方的 IP 信誉邮件服务器,即此 IP 过去是否用于发送垃圾邮件等)。

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

阅读有关域授权的 SPF 和 DKIM 记录。这是一个我无法真正涵盖的话题。

  1. I have access to a mail server which is already setup. Can I map the email accounts to the user accounts in the Django application in such a way that Django uses the email server as a medium to send email based on the logged in users?

是的,如果您拥有电子邮件的域名,就可以。只需获取用户的电子邮件地址并将其用作 From 地址即可发送电子邮件。

  1. Why do I need to provide an email and password in settings.py file when I may never use that email account to send any mail? Can I not log in to the email every time someone sends an email?

你指的是EMAIL_HOST_USER吗?这是为了验证目的。此电子邮件是登录您的 SMTP 服务器所必需的。如果没有这个,SMTP 服务器将不知道您是服务器的所有者还是试图使用他们的服务器发送垃圾邮件的垃圾邮件发送者。

但是如果 SMTP 服务器是 运行 本地,您可以只使用 localhost 作为 EMAIL_HOST 而忽略身份验证。因为大多数电子邮件服务器 (MTA) 无需身份验证即可中继来自本地主机的电子邮件。不过这个也要看配置。



对电子邮件发送方式的基本了解:

电子邮件就像真正的邮件一样在信封中发送。信封和里面的信可以有不同的 From 地址。对于电子邮件也是如此。

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

  1. 将您的信息写在纸上。你会在这封信上签名。
  2. 买一个信封。在信封上写To你朋友的地址。
  3. 在信封上写下您邮政信箱的 From 地址。您不写自己的地址,因为如果邮件无法投递,它会被退回到您的邮政信箱。
  4. 把信发出去。

漂亮,简单。假设你家里有人也想寄一封信给他们认识的人。但他们没有邮政信箱。他们必须花一些钱和时间来获得邮政信箱。但为什么要打扰,因为你已经有了一个。这就是它的工作原理:

  1. 他们会把消息写在纸上。他们会以自己的名义在信上签名。
  2. 买一个信封。写下他们朋友的 To 地址。
  3. 写下您的邮政信箱的 From 地址,这样如果邮件没有送达,可以将其退回您的邮政信箱。
  4. 把信发出去。

这就是实际电子邮件的工作方式。

  1. SMTP 服务器就像 Post 办公室。
  2. 您的电子邮件帐户就像一个邮政信箱。
  3. 您发送的每条消息都会放入信封中。
  4. 信封上的发件人地址可以与发件人不同
    地址就在留言里面。

我认为 Django 使用 EMAIL_HOST_USER 设置来组成电子邮件信封,并且您提供的 from_email 地址用作 From 地址。

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