有没有办法我可以自定义Django错误报告,所以当它通过电子邮件发送给我时,它让我知道哪个用户触发了错误?
如果重要的话,我在Django 1.2.
非常感谢提前!
有很多关于如何将文件附加到电子邮件的示例,但我找不到有关如何附加 MIMEBase 实例的示例。
来自文档:附件“这些可以是 email.MIMEBase.MIMEBase 实例,也可以是(文件名、内容、mimetype)三元组。”
所以我在一个函数中生成一个 iCal 文件就好了:
def ical()
cal = vobject.iCalendar()
cal.add('method').value = 'PUBLISH' # IE/Outlook needs this
vevent = cal.add('vevent')
vevent.add('dtstart').value = self.course.startdate
vevent.add('dtend').value = self.course.startdate
vevent.add('summary').value='get details template here or just post url'
vevent.add('uid').value=str(self.id)
vevent.add('dtstamp').value = self.created
icalstream = cal.serialize()
response = HttpResponse(icalstream, mimetype='text/calendar')
response['Filename'] = 'shifts.ics' # IE needs this
response['Content-Disposition'] = 'attachment; filename=shifts.ics'
return response
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
myicalfile = ical()
message.attach(myicalfile)
Run Code Online (Sandbox Code Playgroud) 我正在从Django发送HTML电子邮件,如下所示:
template_html = "email/deposit_email.html"
email_context = Context({ 'contact': contact, 'amount': amount})
subject, from_email, to = 'Deposit Successfully created.', settings.EMAIL_HOST_USER, contact_email
text_content = "Thank you for depositing the amount of " + str(amount) + "."
html = loader.get_template(template_html)
html_content = html.render(email_context)
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.send()
Run Code Online (Sandbox Code Playgroud)
我收到的电子邮件没有任何CSS.我使用以下方法在Django中加载模板本身:
return render(request, 'templatename_html')
Run Code Online (Sandbox Code Playgroud)
模板正在加载django中的所有css,但不是在gmail中发送电子邮件时.怎么了?
我已将Django配置为使用文件后端在本地计算机上发送电子邮件.这似乎在早期工作正常,所有邮件都记录在我在我的settings.py文件中指定的目录中:
EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = '/code/mails/'
Run Code Online (Sandbox Code Playgroud)
然而,这突然停止了工作.我已经检查了文件夹的权限,这似乎没问题.我没有看到任何错误.我正在使用docker,当我启动Python服务器时,我的终端显示了日志.通常当出现错误时我会在那里看到它.但没有出现.为了测试,我已重命名该文件夹并尝试发送邮件.这次,也没有出现错误.在制作中,我settings.py的不同但其他一切都是相同的,电子邮件发送得很好.所以代码似乎工作,但本地基于文件的后端似乎是一个问题.
有人有什么想法吗?
我已配置这些日志设置:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/code/logs/debug.log',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
Run Code Online (Sandbox Code Playgroud)
日志似乎工作正常并提供详细的日志记录; 但没有一个与电子邮件错误有关.
众所周知(或应该),您可以使用Django的模板系统来呈现电子邮件正文:
def email(email, subject, template, context):
from django.core.mail import send_mail
from django.template import loader, Context
send_mail(subject, loader.get_template(template).render(Context(context)), 'from@domain.com', [email,])
Run Code Online (Sandbox Code Playgroud)
这有一个缺陷:要编辑电子邮件的主题和内容,您必须编辑视图和模板.虽然我可以证明给管理员用户访问模板是合理的,但我并没有让他们访问原始的python!
真正酷的是,如果您可以在电子邮件中指定块并在发送电子邮件时单独将它们拉出来:
{% block subject %}This is my subject{% endblock %}
{% block plaintext %}My body{% endblock%}
{% block html %}My HTML body{% endblock%}
Run Code Online (Sandbox Code Playgroud)
但是你会怎么做?你会如何一次只渲染一个块?
我的Django应用程序有10,000个用户,都有电子邮件.我想发一封电子邮件给所有人说一个月一次.此消息可能包含一些pdf附件.
我尝试过使用EmailMessage对象向所有人发送电子邮件.我在发送之前将所有用户的电子邮件地址添加到此EmailMessage的密件抄送组件中.
recList = []
for recipient in rec:
reci = str.strip(str(recipient))
recList.append(reci)
message = (form.cleaned_data['subject'], form.cleaned_data['message'], 'emailAdmin@yahoo.com', recList)
mail = EmailMessage(form.cleaned_data['subject'], form.cleaned_data['message'], 'email_manager@mysite.org', ['email_list@mysite.org'], recList)
num_attachments = 0
if form.cleaned_data['attachment'] != None:
email_attachment = EmailAttachment(
document_name = form.cleaned_data['attachment'].name,
email_message = email,
document = form.cleaned_data['attachment'],
)
email_attachment.save()
mail.attach_file(settings.MEDIA_ROOT + "/" + email_attachment.document.name)
mail.send(fail_silently=False)
Run Code Online (Sandbox Code Playgroud)
但是,当我发送电子邮件时,Django抱怨"连接已重置"并且不发送.我假设服务器连接已关闭.
在Django中发送大量电子邮件爆炸的有效方法是什么?会send_mass_mail()更有效吗?
我在我的Django应用程序中使用自定义电子邮件后端(在本例中为CeleryEmailBackend):
EMAIL_BACKEND = 'djcelery_email.backends.CeleryEmailBackend'
Run Code Online (Sandbox Code Playgroud)
我的日志配置:
LOGGING = {
# ...
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler',
},
# ...
}
Run Code Online (Sandbox Code Playgroud)
管理员错误电子邮件也会由同一电子邮件后端发送.
因此,如果电子邮件后端出现问题(例如Celery未运行).然后我将不会收到服务器错误电子邮件.
有没有办法AdminEmailHandler使用自定义电子邮件后端?
我使用namecheap.com注册了域名和私人电子邮件.我正在尝试通过此私人电子邮件发送电子邮件.但是,我在标题中收到错误.
在我的settings.py中,我有以下设置:
EMAIL_HOST = 'mail.privateemail.com'
EMAIL_HOST_USER = 'contact@mysite.com'
EMAIL_HOST_PASSWORD = 'my password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
Run Code Online (Sandbox Code Playgroud)
我试图通过视图发送电子邮件:
send_mail(
'Subject here',
'Here is the message.',
'contact@mysite.com',
['myname@gmail.com'],
fail_silently=False,
)
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误:
SMTPException at /
STARTTLS extension not supported by server.
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?任何帮助表示赞赏.
编辑
将EMAIL_USE_TLS更改为False,并将其删除以单独检查两者后,我现在收到此错误:
SMTP AUTH extension not supported by server.
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?谢谢!
是否有现成的插件可以在Django中生成每日或每周的摘要电子邮件?(我们希望将许多小通知合并到一封电子邮件中,而不是一直打扰人们.)
Django-mailer声称支持这一点,但我告诉它并不是真的.
我正在尝试在AWS实例上设置Django以通过我的主网站的服务器(非AWS)发送电子邮件,而不是需要使用外部邮件服务,如Mandrill,Amazon SES ......等
我首先设置主服务器的DNS记录,将子域指向aws实例的弹性IP,例如:
mail1.website.com - > 1.1.1.1
我提交了一个反向DNS记录设置请求,将我的AWS实例的弹性IP指向子域,他们将其设置为例如:
1.1.1.1 - > mail1.website.com
现在设置了反向DNS记录mail1.website.com应该能够在django中用来发送电子邮件而不将它们标记为垃圾邮件.
https://docs.djangoproject.com/es/1.9/topics/email/#smtp-backend
使用以下内容是否足够?
EMAIL_HOST = 'mail1.website.com'
DEFAULT_FROM_EMAIL = 'test.website.com'
Run Code Online (Sandbox Code Playgroud)
如果我需要提供电子邮件用户/密码/端口,可以将其设置为使用特定电子邮件登录,aws_no_reply@website.com但然后通过电子邮件发送test@website.com或者我是否必须将smtp设置设置为根电子邮件地址
No_reply电子邮件:
EMAIL_HOST = 'mail1.website.com'
EMAIL_HOST_USER = 'aws_no_reply@website.com'
EMAIL_HOST_PASSWORD = 'mypasshere'
EMAIL_PORT = 465
DEFAULT_FROM_EMAIL = 'test.website.com'
Run Code Online (Sandbox Code Playgroud)
或根:
EMAIL_HOST = 'mail1.website.com'
EMAIL_HOST_USER = 'root'
EMAIL_HOST_PASSWORD = 'mypasshere'
EMAIL_PORT = 465
DEFAULT_FROM_EMAIL = 'test@website.com'
Run Code Online (Sandbox Code Playgroud)