异步电子邮件传递。

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 Android:应用程序崩溃发送putExtra的意图   JNI错误:尝试传递java实例。字符串作为参数   JavaJMockit与静态初始化   java@products@消费意义。。。JSON或者它只是一个字符串   java如何解决在命令提示符中找不到或加载主类错误?   java使用JavaMail API发送带有内联图像的电子邮件   java为什么我不能与Twitter共享内容   jspservlet正在显示java。木卫一。FileNotFoundException:?E:\guru99\test。txt(文件名、目录名或卷标语法不正确)   java如何在单击另一页上的按钮时向表视图添加数据?   java在提交表单数据之后,它显示了以下问题   java Spring启动通知/严重错误后重启   java从数组列表中删除元素   java Spring引导批处理:如何使用CompositeWriter和自定义ItemWriter实现多线程步骤   Spring java代码表单post和重定向到其他服务器