异步电子邮件传递。
mailers的Python项目详细描述
异步邮件程序
安装
pip install mailers
如果您计划使用FileTransport
,您还需要安装
^{
或者一次安装所有可选的依赖项:
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}允许一次绑定多个 如果您有多个邮件发送程序, 如果不设置 访问文件是一个阻塞操作。您可能需要使用 此包目前不实现对文件的直接访问。
这是后期要做的事情。在 所有传输类都可以在 将消息写入开放流。在 每个传输都必须实现 为了使您的传输接受 一旦构建了一个自定义传输,就可以添加它的URL来启用基于URL的配置。在 注意,传输必须实现 标签: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'))
cc
,bcc
,to
,reply_to
可以是字符串或字符串列表。在关于附件
aiofiles
或备用库
它以非阻塞模式读取文件。在运输
预装运输工具
mailers.transports
模块中找到。在Class Example URL Description SMTPTransport smtp://user:pass@hostname:port?timeout=&use_tls=1 Sends mails using SMTP protocol. InMemoryTransport not available Stores sent messages in the local variable. See an example below. FileTransport file:///path/to/directory Writes sent messages into directory. NullTransport null:// Does not perform any sending. StreamTransport not available Writes message to an open stream. See an example below. ConsoleTransport console:// Prints messages into stdout. GMailTransport gmail://username:password Sends via GMail. MailgunTransport mailgun://username:password Sends 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()
添加自定义传输协议。
frommailersimportTransports,MailerTransports.bind_url('myprotocol','my.transport.Name')mailer=Mailer('myprotocol://')
from_url
方法来接受URL参数。
否则,它将被构造而不传递任何参数给__init__
方法。在推荐PyPI第三方库