{"library":"prefect-email","title":"Prefect Email","description":"Prefect Email provides integrations for sending emails within Prefect workflows, enabling notifications and reporting capabilities. It's an official Prefect integration, currently at version 0.4.2, and its release cadence often aligns with new Prefect core features or significant updates to the Prefect platform.","language":"python","status":"active","last_verified":"Mon May 18","install":{"commands":["pip install prefect-email"],"cli":null},"imports":["from prefect_email.credentials import EmailServerCredentials","from prefect_email.tasks import email_send_message","from prefect_email.tasks import email_send_html_message"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom prefect import flow\nfrom prefect_email.credentials import EmailServerCredentials\nfrom prefect_email.tasks import email_send_message\n\n@flow(log_prints=True)\ndef send_notification_email_flow():\n    # For production, it is highly recommended to store credentials\n    # in a Prefect EmailServerCredentials Block for security and reusability.\n    # Example: EmailServerCredentials(host=..., port=..., username=..., password=...).save('my-email-creds')\n    # Then load: credentials = EmailServerCredentials.load('my-email-creds')\n\n    # For this quickstart, we'll instantiate directly from environment variables.\n    # Ensure these are set: SMTP_HOST, SMTP_PORT, SMTP_USERNAME, SMTP_PASSWORD, TO_EMAIL, FROM_EMAIL\n    credentials = EmailServerCredentials(\n        host=os.environ.get(\"SMTP_HOST\", \"smtp.mailtrap.io\"),\n        port=int(os.environ.get(\"SMTP_PORT\", 2525)),\n        username=os.environ.get(\"SMTP_USERNAME\", \"YOUR_USERNAME\"),\n        password=os.environ.get(\"SMTP_PASSWORD\", \"YOUR_PASSWORD\"),\n        use_tls=True # Often required for secure SMTP\n    )\n\n    to_emails = os.environ.get(\"TO_EMAIL\", \"recipient@example.com\").split(',')\n    from_email = os.environ.get(\"FROM_EMAIL\", \"sender@example.com\")\n    subject = \"Prefect Email Test Notification\"\n    body = \"This is a test email sent from a Prefect flow using prefect-email.\"\n\n    print(f\"Attempting to send email from {from_email} to {to_emails}...\")\n\n    try:\n        email_send_message(\n            smtp_credentials=credentials,\n            subject=subject,\n            msg=body,\n            email_from=from_email,\n            email_to=to_emails\n        )\n        print(\"Email sent successfully!\")\n    except Exception as e:\n        print(f\"Failed to send email: {e}\")\n\nif __name__ == \"__main__\":\n    # To run locally, set environment variables like:\n    # export SMTP_HOST=\"smtp.mailtrap.io\"\n    # export SMTP_PORT=\"2525\"\n    # export SMTP_USERNAME=\"your_mailtrap_username\"\n    # export SMTP_PASSWORD=\"your_mailtrap_password\"\n    # export TO_EMAIL=\"your_email@example.com\"\n    # export FROM_EMAIL=\"prefect@example.com\"\n\n    # Then execute: python your_script_name.py\n    send_notification_email_flow()","lang":"python","description":"This quickstart demonstrates how to define a Prefect flow that sends an email using `prefect-email`. It instantiates `EmailServerCredentials` directly from environment variables (recommended to use Prefect Blocks in production) and then uses the `email_send_message` task to send a simple text email. Replace placeholder values or set environment variables for `SMTP_HOST`, `SMTP_PORT`, `SMTP_USERNAME`, `SMTP_PASSWORD`, `TO_EMAIL`, and `FROM_EMAIL` to run.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-18","installed_version":"0.4.2","pypi_latest":"0.4.2","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":21,"avg_import_s":5.58,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"prefect-email","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":6.13,"mem_mb":54.7,"disk_size":"248.2M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"prefect-email","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":22.8,"import_time_s":5.25,"mem_mb":54.7,"disk_size":"249M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"prefect-email","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":6.62,"mem_mb":58.5,"disk_size":"269.9M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"prefect-email","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":21.9,"import_time_s":5.96,"mem_mb":58.5,"disk_size":"271M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"prefect-email","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":5.77,"mem_mb":57.6,"disk_size":"259.2M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"prefect-email","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":17.9,"import_time_s":6.08,"mem_mb":57.6,"disk_size":"261M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"prefect-email","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":5.4,"mem_mb":59,"disk_size":"256.6M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"prefect-email","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":18,"import_time_s":5.71,"mem_mb":59,"disk_size":"258M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"prefect-email","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.69,"mem_mb":53.2,"disk_size":"179.1M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"prefect-email","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":24.2,"import_time_s":4.14,"mem_mb":53.2,"disk_size":"180M"}]}}