异步电子邮件传递。

mailers的Python项目详细描述



异步邮件程序

安装

pip install mailers

如果您计划使用FileTransport,您还需要安装 ^{}额外:

^{pr2}$

或者一次安装所有可选的依赖项:

pip install mailers[full]

使用

这个包使用了两个主要的概念:邮件和传输。 mailer是一个类,它将您从底层传输中抽象出来 而传输执行实际的消息传递。在

frommailersimportEmailMessage,configure,send_mailconfigure(mailers={'default':'smtp://user:password@localhost:25?timeout=2'})message=EmailMessage(to='user@localhost',from_address='from@localhost',subject='Hello',text_body='World!')awaitsend_mail('user@localhost',message)

或者,如果您更喜欢对正在进行的操作进行更多控制,请选择以下更详细的路径:

frommailersimportMailer,SMTPTransport,EmailMessagemailer=Mailer(SMTPTransport('localhost',25))message=EmailMessage(to='user@localhost',from_address='from@localhost',subject='Hello',text_body='World!')awaitmailer.send(message)

快捷方式

包导出了一些实用方法来简化工作:configure和{}。在

{and-specers}允许一次绑定多个

frommailersimportconfigureconfigure(mailers={'default':'smtp://localhost','admin':'smtp://localhost'},transports={'myproto':'myproto.ImplementationClass'})

如果您有多个邮件发送程序,send_mail快捷方式接受mailer参数来指定要使用的邮件发送程序:

send_mail(to,message,mailer='admin')

如果不设置mailer参数,函数将使用名为default的mailer。在

撰写邮件

EmailMessage 类的参数和方法是不言而喻的,因此下面是一些基本示例:

frommailersimportEmailMessage,Attachmentmessage=EmailMessage(to='user@localhost',from_address='from@example.tld',cc='cc@example.com',bcc=['bcc@example.com'],text_body='Hello world!',html_body='<b>Hello world!</b>',attachments=[Attachment('CONTENTS','file.txt','text/plain'),])# attachments can be added on demand:withopen('file.txt','r')asf:message.attach(f.read(),f.name,'text/plain')# alternativelymessage.add_attachment(Attachment(f.read(),f.name,'text/plain'))

ccbcctoreply_to可以是字符串或字符串列表。在

关于附件

访问文件是一个阻塞操作。您可能需要使用aiofiles或备用库 它以非阻塞模式读取文件。在

此包目前不实现对文件的直接访问。 这是后期要做的事情。在

运输

预装运输工具

所有传输类都可以在mailers.transports模块中找到。在

ClassExample URLDescription
SMTPTransportsmtp://user:pass@hostname:port?timeout=&use_tls=1Sends mails using SMTP protocol.
InMemoryTransportnot availableStores sent messages in the local variable. See an example below.
FileTransportfile:///path/to/directoryWrites sent messages into directory.
NullTransportnull://Does not perform any sending.
StreamTransportnot availableWrites message to an open stream. See an example below.
ConsoleTransportconsole://Prints messages into stdout.
GMailTransportgmail://username:passwordSends via GMail.
MailgunTransportmailgun://username:passwordSends via Mailgun.

特别注意事项

内存传输

InMemoryTransport获取一个列表并将传出的邮件写入其中。 阅读此列表检查发件箱。在

frommailersimportInMemoryTransport,EmailMessagemessage=EmailMessage()mailbox=[]transport=InMemoryTransport(mailbox)awaittransport.send(message)assertmessageinmailbox

河流运输

将消息写入开放流。在

frommailersimportStreamTransport,EmailMessagefromioimportTextIOmessage=EmailMessage()transport=StreamTransport(output=TextIO())awaittransport.send(message)

output是任何IO兼容对象。在

定制运输。

每个传输都必须实现async def send(self, message: EmailMessage) -> None方法。 最好从BaseTransport类继承:

frommailersimportBaseTransport,Mailer,EmailMessageclassPrintTransport(BaseTransport):asyncdefsend(self,message:EmailMessage)->Noneprint(str(message))mailer=Mailer(PrintTransport())

为了使您的传输接受EmailURL实例,您的传输类必须实现from_url 类方法:

frommailersimportBaseTransport,EmailMessage,EmailURLclassPrintTransport(BaseTransport):@classmethoddeffrom_url(cls,url:EmailURL)->"PrintTransport":returncls()

添加自定义传输协议。

一旦构建了一个自定义传输,就可以添加它的URL来启用基于URL的配置。在

frommailersimportTransports,MailerTransports.bind_url('myprotocol','my.transport.Name')mailer=Mailer('myprotocol://')

注意,传输必须实现from_url方法来接受URL参数。 否则,它将被构造而不传递任何参数给__init__方法。在

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

推荐PyPI第三方库


热门话题
java等效mvn eclipse:clean eclipse:eclipse m2e命令   JDBC中SQL更新查询中的java错误   java试图从远程SSL地址为WebSocket连接下载并设置证书,但收到“签名不匹配”异常   java中hh:mm:ss格式的时间毫秒   java让精灵在碰撞中消失?   java在删除certan数据包的情况下创建新的wireshark文件   java将整数调用为布尔值   在从Java中的URL读取内容之前,请等待页面加载   java MediaPlayer在图像列表中仅播放一次有问题   在hibernate中使用注释时出现java异常   maven java。lang.NoClassDefFoundError:org/apache/http/HttpException在AWS EC2 ubuntu实例上   java我必须初始化所有变量吗?   java如何使用JavaSpark有效地处理数百万条记录   JavaDB/Derby错误08006   java如何在HQL中转义HQL特殊列“index”   如果没有得到输出,则使用java嵌套   java为Scanner方法编写模式   java创建了一个基于度分布和聚类系数分布的随机图   java Hibernate,用于获取subselect的基本整数列表