django 使用 django-registration 以 html 格式发送电子邮件
Posted
技术标签:
【中文标题】django 使用 django-registration 以 html 格式发送电子邮件【英文标题】:django+ send email in html with django-registration 【发布时间】:2010-11-22 11:55:21 【问题描述】:我正在使用 django-registration,一切都很好,确认电子邮件以纯文本形式发送,但我知道我已修复并正在以 html 形式发送,但我有一个垃圾问题...正在显示 html 代码:
<a href="http://www.example.com/accounts/activate/46656b86eefc490baf4170134429d83068642139/">http://www. example.com/accounts/activate/46656b86eefc490baf4170134429d83068642139/</a>
而且我不需要像...那样显示 html 代码
有什么想法吗?
谢谢
【问题讨论】:
【参考方案1】:为避免修补 django-registration,您应该使用 proxy=True 扩展 RegistrationProfile 模型:
models.py
class HtmlRegistrationProfile(RegistrationProfile):
class Meta:
proxy = True
def send_activation_email(self, site):
"""Send the activation mail"""
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
ctx_dict = 'activation_key': self.activation_key,
'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS,
'site': site
subject = render_to_string('registration/activation_email_subject.txt',
ctx_dict)
# Email subject *must not* contain newlines
subject = ''.join(subject.splitlines())
message_text = render_to_string('registration/activation_email.txt', ctx_dict)
message_html = render_to_string('registration/activation_email.html', ctx_dict)
msg = EmailMultiAlternatives(subject, message_text, settings.DEFAULT_FROM_EMAIL, [self.user.email])
msg.attach_alternative(message_html, "text/html")
msg.send()
在您的注册后端,只需使用 HtmlRegistrationProfile 而不是 RegistrationProfile。
【讨论】:
如何在注册后台注册新的个人资料? 如何将后端设置为 HtmlRegistration 配置文件而不是 RegistrationProfile? 我们是否必须创建一个使用我们新代理模型的其他注册后端? 如何设置新的默认值?【参考方案2】:我建议同时发送文本版本和 html 版本。在 django-registration 的 models.py 中查找:
send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [self.user.email])
改为从文档http://docs.djangoproject.com/en/dev/topics/email/#sending-alternative-content-types 中执行类似操作
from django.core.mail import EmailMultiAlternatives
subject, from_email, to = 'hello', 'from@example.com', 'to@example.com'
text_content = 'This is an important message.'
html_content = '<p>This is an <strong>important</strong> message.</p>'
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.send()
【讨论】:
是的,保罗,感谢重播,但我没有这样做,但没有工作...但现在没问题 :),现在只需放置不带 这将发送一封文本电子邮件,一些客户将为其创建链接。如果您需要更有趣的 html,则必须按照我的建议进行操作。 是的,我试过了,但没用,但没关系 :) 我再试试 :)【参考方案3】:我知道这是旧的并且不再维护注册包。以防万一有人仍然想要这个。 @bpierre 答案的附加步骤是: - 继承 RegistrationView,即您的应用程序的 views.py
class MyRegistrationView(RegistrationView):
...
def register(self, request, **cleaned_data):
...
new_user = HtmlRegistrationProfile.objects.create_inactive_user(username, email, password, site)
- 在您的 urls.py 中将视图更改为子类视图,即 - 列表项
url(r'accounts/register/$', MyRegistrationView.as_view(form_class=RegistrationForm), name='registration_register'),'
【讨论】:
【参考方案4】:This guy have extended the defaultBackend 使我们能够添加激活电子邮件的 HTML 版本。
具体来说,替代版本工作已完成here
我成功使用了后端部分
【讨论】:
以上是关于django 使用 django-registration 以 html 格式发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章