一个django可重用的应用程序,提供了使用django模板系统发送pgp加密和多部分电子邮件的能力。

django-secure-mail的Python项目详细描述


…图片::https://travis-ci.org/blag/django-secure-mail.svg?branch=master
:目标:https://travis ci.org/blag/django secure mail

…图片::https://coveralls.io/repos/github/blag/django secure mail/badge.svg
:目标:https://coveralls.io/github/blag/django secure mail




`` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `.com/stephen_mcd>;``简介
==


django secure mail是一款django可重复使用的应用程序,提供一个邮件后端,使用pgp发送有机会签名和加密的电子邮件。还提供了
模型和用于管理上载的pgp密钥的管理页。


请注意,提供的后端仅在收件人已上载有效公钥时对传出邮件进行签名。没有有效公钥的用户将*没有对其传出邮件进行签名或加密。




django安全邮件直接来自pypi
,使用"pip<;https://pip.pypa.io/en/stable/>;"`,方法是运行下面的命令


。代码块::bash

$pip install django secure mail

代码块::bash

$python setup.py install



将"安全邮件"添加到"已安装的应用程序"设置并运行数据库
迁移:

…代码块:bash

$python manage.py迁移安全邮件

>2。将设置模块中的"email_backend"设置为
"secure_mail.backends.encryptingsmtpemailbackend"或"development and testing"3中列出的
开发/测试后端之一。将"secure_mail_gnupg_home"设置设置为包含
gpg密钥环的目录。如果运行多个django节点,则每个节点都需要对该目录的
read*和write*访问权限。

4。将"secure-mail-gnupg-encoding"变量设置为gpg
可执行文件所需的编码。对于gpg 1.x,这通常是"拉丁语-1";对于gpg 2.x,这通常是"utf-8"。


5。由于不需要发送加密邮件,因此强烈建议为传出邮件生成签名密钥。请按照"生成签名密钥"部分中的
说明进行操作。所有将要发送传出邮件的节点都需要对"secure\u mail\u gnupg\u home"指定的目录具有读取权限。

还有其他配置选项可用。有关完整的列表,请参见"选项"部分。




评估并导出签名密钥:``电子邮件签名密钥`。

首先需要在
项目的``settings.py``中设置``安全邮件签名密钥数据``选项。这是一个直接作为关键字参数传递给"gpg.gen_key()`"的字典,因此请阅读并理解其文档中的所有可用选项<;https://pythonhosted.org/python gnupg/\generating keys>;`。默认设置为:

…代码块::python

安全邮件签名密钥数据={
密钥类型:"rsa",
"密钥长度":4096,
"名称真实":设置。站点名称,
"名称注释":"发送电子邮件服务器",
"名称电子邮件":设置。默认来自电子邮件,
"过期日期":"2y",
}


/>例如dsa或过期日期。

满足签名密钥设置后,使用`--generate``选项生成新的签名密钥:

。代码块::bash

$python manage.py email_signing_key--generate

代码块::bash

$python manage.py电子邮件签名密钥7ab59fe794a7ac12eba87507ef33f601153cfe28

代码块::bash

$python manage.py电子邮件签名密钥7ab59fe794a7ac12eba87507ef33f601153cfe28--打印私钥

电话:

…代码块::bash

$python manage.py电子邮件签名密钥7ab59fe794a7ac12eba87507ef33f601153cfe28-k keys.ubuntu.com keys.redhat.com-k pgp.mit.edu

代码块::bash

$python manage.py email-signing-key--generate--keyserver pgp.mit.edu--print private key

使用`--help``选项查看命令的完整帮助文本。

``使用它。将"安全邮件密钥指纹"设置设置为要使用的传出签名密钥的指纹。


options
----


您可以在项目的
``settings.py``模块中配置一些设置:

*``secure` mail` u gnupg` home`-表示gnupg密钥环的自定义位置的字符串。如果运行多个django节点,则应将其设置为所有节点共享的目录,并且所有节点上的可执行文件"gpg"都需要对其进行读写访问。
*"secure"mail"使用"gnupg"布尔值,该布尔值控制是否使用pgp
加密功能。如果指定了"secure-mail-gnupg-home",则默认为"true",否则为"false"。
*"secure-mail-gnupg-encoding"是本地"gpg"可执行文件所需的编码。此选项传递给"str.encode"函数。在
常规中,对于gpg 1.x,它应该设置为"latin-1",对于gpg 2.x,它应该设置为"utf-8"。查看
"python gnupg文档"lt;https://pythonhosted.org/python gnupg/"入门">;`"python gnupg文档"了解更多信息。
*`"安全邮件失败处理程序"`-映射失败类型的字典错误处理程序的
点路径表示法。有关
的详细信息和示例,请参见"错误处理"部分。
*``安全邮件始终信任密钥``-跳过密钥验证,并假设使用的
密钥始终完全可信。这只需设置`--always trust``(或
`--trust model`,用于更现代的gpg版本)。有关此设置的详细信息,请参阅gpg文档
中的`--trust model``选项。
*``secure`mail`signing`u key`data`-用于生成
新签名密钥的密钥选项字典。有关详细信息,请参见
`python gnupg文档https://pythonhosted.org/python gnupg`.


默认值:

。代码块::python

{
"密钥类型":"rsa",
"密钥长度":4096,
"名称真实":设置。站点名称,
"名称注释":"发送电子邮件服务器",
"名称电子邮件":设置。默认来自电子邮件,
"过期"_日期':'2y',
}

*``安全邮件密钥指纹``签名时要使用的密钥指纹传出邮件,必须存在于配置的密匙环中。



>发送pgp加密邮件


这意味着
如果将邮件发送给在
数据库和gpg/pgp密匙环中具有有效公钥的收件人,则后端将尝试对发送给他们的邮件进行签名和加密。





当加密
对以下对象失败时,自定义错误处理程序:

*纯文本邮件本身
*任何邮件附件
*任何可选邮件(例如:使用纯文本发送的HTML邮件
回退)


异常时调用错误处理程序引发并传递引发的异常。代码块::python

def handle_failed_encryption(异常):
默认错误处理程序只需重新引发异常,但这对于所有情况来说都是不可取的。


为了帮助处理错误,包提供了一些可以在自定义错误处理程序中使用的帮助函数:

*`` force_send_message``-接受未加密的message作为参数,
发送消息而不尝试对其进行加密或签名。
*`` force\u delete\u key`-接受收件人的地址作为参数,
强制从数据库和gpg/pgp密匙环中删除所有密钥。
*`` force\u mail\u admins`-接受未加密的消息和失败的
地址作为参数。如果地址处于"admins"设置中,则发送未加密的消息,否则,将向管理员发送一条消息,其中包含
原始消息的主题和原始预期收件人。
*``从"exception"获取"variable"--接受异常和变量名
作为参数,然后回溯stacktrace以查找具有指定名称的第一个
变量。


若要指定自定义错误处理程序,请在项目的
``setting s.py``设置字典中的
``secure\u mail\u failure\u handlers``中将键设置为ER的点路径错误处理程序:

…代码块::python

secure\u mail\u failure\u handlers={
'message':'myapp.handlers.handle\u failed\u encryption',
'alternative':'myapp.handlers.handle\u failed\u alternative\u encryption',
'attachment':'myapp.handlers.handle\u failed\u attachment\u encryption',
}

不必覆盖所有处理程序,您可以根据需要覆盖任意多个或任意少个处理程序。




或者创建自己的自定义后端:

…代码块::python

class encryptinglocmememailbackend(encryptingemailbackend,locmembackend):
pass

对于在另一个django应用程序中使用"encryptingemailbackendmixin"的实际工作示例,请查看"emailhub.backends.secure"mail.encryptingemailbackendmixin``来自
`django emailhub<;https://github.com/fixme/django emailhub>;``项目:


除了提供的``encryptingsmtpemailbackend``之外,此包还附带了几个后端,这些后端反映了内置的django后端:

*``encryptingconsoleemailbackend``
*``encryptinglocmememailbackend``
*``encryptingfilebasedemailbackend``



>数据库模型
----

`pgp解释<;https://en.wikipedia.org/wiki/pretty嫒good嫒u privacy>使用python gnupg,在secure-mail.models`-
``key``和``address``中定义了两个模型,它们分别表示pgp密钥和成功导入的密钥的电子邮件地址。这些模型的存在纯粹是为了通过django
管理导入
密钥并删除特定地址的密钥。


添加密钥时,密钥将导入服务器上的密钥环,并且不会保存"密钥"模型的实例。密钥的
电子邮件地址也会被提取并保存为一个
``address``实例。


`address``模型在发送电子邮件时用于检查
现有密钥以确定是否应加密电子邮件。
密钥已从服务器上的密钥环中删除。





可选的django应用程序
=====


>其他具有类似功能的django应用程序有:

*`django email extras<;https://github.com/stephenmcd/django email extras>;`-
提供两个功能用于使用django的模板系统发送pgp加密的多部分电子邮件的ons。还提供一个邮件后端,在开发期间在浏览器中显示html
邮件。
*`django gnupg mail s<;https://github.com/jandd/django gnupg mails>;`-
提供一个``gnupgmessage``(django的``emailmessage``的子类)来发送
pgp/mime签名的电子邮件。

bot其中h个应用程序要求第三方应用程序开发人员"选择加入"发送
加密邮件。此项目自动对所有应用程序的所有传出邮件进行加密和签名。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何克服带有空值的不可空bean级验证   “此行有多个标记”的authenticateUser上的java MySQLConnection错误   java处理Jackson异常   java Netbeans编辑器如何知道文件在撤消后不会被修改?   目标C相当于Java的ArrayList   java当需要int时,可以将short传递给方法调用吗?   drawString()方法上的java MouseListener   java服务器socket是执行此操作的最佳选项   java需要单个匹配bean,但找到了2:org。springframework。网状物servlet。mvc。方法注释。RequestMappingHandlerMapping   如何在Java中执行Windows命令?   安卓应用程序的java文件主机   java将所有spring引导属性都设置在内。将yml文件转换为系统属性   Java邮件中的html内联链接在邮件客户端中不起作用   Java二进制文件的bazel版本控制   java如何在自定义ListView中使用Intent   java(Spring MVC+Hibernate 4+Test 4)自动连线DAO返回NULL   java一次add()调用可以在Solr服务器中索引多少文档?   java如何获取Avro GenericRecord大小