Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

port of smtplibaio for python asyncio

License

NotificationsYou must be signed in to change notification settings

hwmrocker/smtplibaio

Repository files navigation

The smtplibaio package provides an SMTP client session object that canbe used to send e-mail in an asynchronous way (i.e. usingasyncio).

Examples

Let's start with a very basic example, usingSMTP_SSL:

import asynciofrom email.headerregistry import Addressfrom email.message import EmailMessagefrom smtplibaio import SMTP, SMTP_SSLasync def send_email():    from_addr = "bob@example.net"    to_addr = "alice@example.org"    message = "Hi Alice !"    async with SMTP_SSL() as client:        await client.sendmail(from_addr, to_addr, message)if __name__ == '__main__':    loop = asyncio.get_event_loop()    loop.run_until_complete(send_email())    loop.close()

As you can see, the Asynchronous Context Manager makes it really easy touse.

STARTTLS is supported only if you have theaioopenssl moduleinstalled. You must tellSMTP to use it upon instantiation:

async def send_email():    """    """    from_addr = "bob@example.net"    to_addr = "alice@example.org"    message = "Hi Alice !"    async with SMTP(use_aioopenssl=True) as client:    await client.starttls()        await client.sendmail(from_addr, to_addr, message)if __name__ == '__main__':    loop = asyncio.get_event_loop()    loop.run_until_complete(send_email())    loop.close()

In the next example, we are specifying the server hostname and port, weare using authentication and we are using the objects provided by theemail package available in the Python Standard Library (i.e.email.message.EmailMessage) to build a proper email message.

async def send_email():    # SMTP server:    smtp_server = "smtp.example.org"    port = 587    # Credentials used to authenticate:    username = "alice"    passwd = "5ecreT!"    # Use of Address object is not mandatory:    from_addr = Address("Alice", "alice", "example.org")    to_addr = Address("Bob", "bob", "example.net")    bcc_addr = Address("John", "john", "example.net")    # E-mail subject and content:    subject = "Testing smtplibaio"    content = "Look, all emails sent from this method are BCCed to John !"    # Build the list of recipients (To + Bcc):    recipients = [to_addr.addr_spec, bcc_addr.addr_spec]    # Build the EmailMessage object:    message = EmailMessage()    message.add_header("From", str(from_addr))    message.add_header("To", str(to_addr))    message.add_header("Bcc", str(bcc_addr))    message.add_header("Subject", subject)    message.add_header("Content-type", "text/plain", charset="utf-8")    message.set_content(content)    # Send the e-mail:    async with SMTP_SSL(hostname=smtp_server, port=port) as client:        await client.auth(username, passwd)        await client.sendmail(from_addr.addr_spec, recipients, message.as_string())if __name__ == "__main__":    loop = asyncio.get_event_loop()    loop.run_until_complete(send_email())    loop.close()

You can also have a more fine-grained control using the lower-levelmethods.

Supported SMTP commands

  • EHLO -SMTP.ehlo() ;
  • HELO -SMTP.helo() ;
  • STARTTLS -SMTP.starttls() (depending on aioopenssl availability);
  • AUTH -SMTP.auth() (LOGIN,PLAIN andCRAM-MD5 mechanisms aresuported) ;
  • MAIL FROM -SMTP.mail() ;
  • RCPT TO -SMTP.rcpt() ;
  • VRFY -SMTP.vrfy() ;
  • DATA -SMTP.data() ;
  • EXPN -SMTP.expn() ;
  • NOOP -SMTP.noop() ;
  • QUIT -SMTP.quit() ;
  • HELP -SMTP.help().

Current limitations

  • There is no direct support for Python'semail.message.EmailMessage. You can still useemail.message.EmailMessage.as_string() orstr(email.message.EmailMessage) instead. See the example above forfurther details.

How to contribute

We useblack,isort in combination withpre-commit to ensure one coding style and reduce the risk of merge conflicts.Please [install pre-commit] to ensure your commits also meet these standards. When you see something to improve, have ideas for better tests or documentation, please create issues or create a pull request.

About

port of smtplibaio for python asyncio

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp