2024-06-01 10:41:23 发布
网友
在我的django项目中,我想在数据库中存储一封电子邮件,以便以后检索并发送它。我正在实施一个限制机制来向许多用户发送电子邮件。在
我以为这会像存储“收件人、发件人、主题、正文”一样简单,但后来我发现其中有附件、多部分电子邮件等,至少有两个类EmailMessage和{}。。。变量和选项太多了!在
EmailMessage
我考虑过用message()方法存储收到的原始电子邮件,但不确定如何构造回电子邮件。也尝试了pickle,但得到了{}。在
message()
pickle
有什么想法吗?在
我将根据您的can't pickle lock objects消息进行猜测,您可能正在尝试pickle包含默认SMTP connection的对象。在
can't pickle lock objects
connection
试着不使用它-通过源代码-它是smtp模块,它有一个self._lock。将connection=None传递给消息的构造函数。在
smtp
self._lock
connection=None
在django1.9上,这对我很有用(Python2):
from django.core.mail import EmailMessage from django.core.mail import EmailMultiAlternatives import pickle 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=None, ) email.attach("foo", [l for l in open(__file__)], 'text') print len(pickle.dumps(email)) 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], connection=None) msg.attach_alternative(html_content, "text/html") print len(pickle.dumps(msg))
根据messages.py中的Django代码,稍后当您调用send()时,如果EmailMessage.connection是None,那么它将尝试使用get_connection()fromdjango.core.mail来获取默认连接。在
messages.py
send()
EmailMessage.connection
None
get_connection()
django.core.mail
……或者,如果您想使用json,这也适用于connection=None:
json
这意味着您可以相当容易地编写一个JSONEncoder和JSONDecoder来序列化/反序列化对象,基本上是使用对象的__dict__。在
JSONEncoder
JSONDecoder
__dict__
更多JSON:
如上所述,编码__dict__使编码变得简单。{{cd19>你必须改变它的值。因此,您可以使用具有伪值的msg初始化EmailMessage,然后分配{},或者解码{},并通过将JSON中存储的参数(…和函数)传递给构造函数显式地构造对象。不过,这需要您了解内部情况。在
msg
我将使用pickle,尽管存在安全隐患。在
This SO question还包括其他一些替代方案。在
我将根据您的
can't pickle lock objects
消息进行猜测,您可能正在尝试pickle
包含默认SMTPconnection
的对象。在试着不使用它-通过源代码-它是
smtp
模块,它有一个self._lock
。将connection=None
传递给消息的构造函数。在在django1.9上,这对我很有用(Python2):
根据
messages.py
中的Django代码,稍后当您调用send()
时,如果EmailMessage.connection
是None
,那么它将尝试使用get_connection()
fromdjango.core.mail
来获取默认连接。在……或者,如果您想使用
^{pr2}$json
,这也适用于connection=None
:这意味着您可以相当容易地编写一个
JSONEncoder
和JSONDecoder
来序列化/反序列化对象,基本上是使用对象的__dict__
。在更多JSON:
如上所述,编码},或者解码{},并通过将JSON中存储的参数(…和函数)传递给构造函数显式地构造对象。不过,这需要您了解内部情况。在
__dict__
使编码变得简单。{{cd19>你必须改变它的值。因此,您可以使用具有伪值的msg
初始化EmailMessage
,然后分配{我将使用
pickle
,尽管存在安全隐患。在This SO question还包括其他一些替代方案。在
相关问题 更多 >
编程相关推荐