【问题标题】:Django Email - Define Username and PasswordDjango 电子邮件 - 定义用户名和密码
【发布时间】:2017-08-15 14:30:23
【问题描述】:

documentation,我看到可以在后端文件中定义主机、端口、用户名和密码,但我想在我的代码本身中定义所有这些。 这可以做到吗?如果有,怎么做?

from django.core.mail import EmailMessage

email = EmailMessage(
    'Hello',
    'Body goes here',
    'from@example.com',
    ['to1@example.com', 'to2@example.com'],
    ['bcc@example.com'],
    reply_to=['another@example.com'],
    headers={'Message-ID': 'foo'},
)

message.attach_file('/images/weather_map.pdf')

提前致谢!

更新:

我想避免将凭据存储在任何文件中。最终,我希望代码提示输入用户名和密码作为输入变量。 更新:

我试过了:

import pandas as pd
from django.core.mail import EmailMessage
from django.core.mail.backends.smtp import EmailBackend
attachment_path=r'C:\path'+'\\'

connection = EmailBackend(
    host='host',
    port=587,
    username='login',
    password='password'
)

email = EmailMessage(
    'Hello',
    'Body goes here',
    'example@example.com',
    ['example@example.com'],
    ['example@example.com'],
    reply_to=['example@example.com'],
    headers={'Message-ID': 'foo'},
    connection=connection
)
email.attach_file(attachment_path+'attachment.pdf')
email.send()

【问题讨论】:

  • 尽量避免在代码中存储凭据是一个很好的目标。但是,您应该考虑在设置中从环境变量加载凭据,而不是每次发送电子邮件时都传递凭据。

标签: python django email attachment


【解决方案1】:

您可以使用get_connection 来实例化电子邮件后端:

from django.core.mail import get_connection

connection = get_connection(
    host='...',
    port='...',
    username='...',
    ...
)

然后在实例化EmailMessage 时传递你的连接。

email = EmailMessage(
    'Hello',
    'Body goes here',
    'from@example.com',
    ['to1@example.com', 'to2@example.com'],
    ['bcc@example.com'],
    reply_to=['another@example.com'],
    headers={'Message-ID': 'foo'},
    connection=connection,
)

【讨论】:

  • 我收到未定义 EmailBackend 的错误。我需要先 from django.core.mail.backends.smtp import EmailBackend 吗?
  • 糟糕,这是一个错字。应该是get_connection()。另一种方法是执行from django.core.mail.backends.smtp import EmailBackend ,然后实例化EmailBackend
  • 所以我试了一下,得到了这个错误:ImproperlyConfigured: Requested setting EMAIL_USE_TLS,但未配置设置。您必须在访问设置之前定义环境变量 DJANGO_SETTINGS_MODULE 或调用 settings.configure()。
  • 所以我想我只需要知道如何调用 settings.configure()
  • 在独立脚本中配置设置是一个完全不同的问题。请参阅the docsthis question
【解决方案2】:

Django 只是一个 Python 包。你可以用一百万种不同的方式做到这一点。

你可以在任何地方导入类(例如views.py等):

from django.core.mail import EmailMessage

然后像在文档中那样调用它..

如果你不知道views.py 是什么,我强烈推荐following the tutorial

【讨论】:

  • 我想我正在关注,但由于工作限制,我需要避免将凭据存储在任何地方(我最终会让代码要求输入凭据作为输入)。
猜你喜欢
  • 2013-01-18
  • 1970-01-01
  • 2021-07-04
  • 2014-11-20
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
相关资源
最近更新 更多