当详细信息来自数据库时,电子邮件发送Django返回错误

2024-04-26 07:47:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个在django helper文件中发送邮件的函数。我的函数如下

def mail_send(data):
    result = {}
    getTemplate = EmailTemplate.objects.filter(pk=data['type']).first()
    if getTemplate != None:
        templates = Template(getTemplate.template)
        config = EmailConfiguration.objects.filter(pk=1).first()
        context = Context(
            {
                'name': data['name'],
                'password': data['password'],
                'site_name': config.site_name
            }
        )
        msg_plain = 'Login Details ' + data['name'] + ' / ' + data['password']
        msg_html = templates.render(context)
        EMAIL_USE_TLS = config.tls
        EMAIL_HOST = config.host
        EMAIL_HOST_USER = config.from_email
        EMAIL_HOST_PASSWORD = config.password
        EMAIL_PORT = config.port
        mail = send_mail(
                    data['msg'],
                    msg_plain,
                    EMAIL_HOST_USER,
                    [data['email']],
                    fail_silently=False,
                    html_message=msg_html,
                )
    else:
        result['msg'] = 'Template Not Found .Unable to send Email..'
        result['status'] = False

它会向我返回如下错误:[Errno 111]连接被拒绝

但当我把所有这些设置都放在settings.py中时,我的工作很好,但我不想要这个,我想从数据库中获取并发送邮件,请建议我从最后一天起就被困在这里。我是django的新手,所以对我来说非常困难


1条回答
网友
1楼 · 发布于 2024-04-26 07:47:32

这是一个非常奇怪的设置,可能不是遵循的最佳实践

尽管如此,Django仍然支持你

让我们看一下send_mail的签名

send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None, connection=None, html_message=None)

遗憾的是,我们不能在这里给它主机,但我们可以给它一个连接

from django.core.mail import get_connection

def mail_send(data):
    ....
    connection = get_connection(
        host=config.host,
        port=config.port,
        username=config.from_email,
        password=config.password,
        use_tls=config.tls,
    )
    mail = send_mail(
        data['msg'],
        msg_plain,
        config.from_email,
        [data['email']],
        fail_silently=False,
        html_message=msg_html,
        connection=connection,
   )

相关问题 更多 >