Can you please help me to send a eamil using Email...
# ask-community
a
Can you please help me to send a eamil using EmailTask notification task?
m
Hello! This is a snippet for EmailTask. Do you have any particular errors/questions?
Copy code
import random

from prefect.triggers import all_successful, all_failed
from prefect import task, Flow
from prefect.tasks.notifications.email_task import EmailTask


@task(name="Task A")
def task_a():
    if random.random() > 0.5:
        raise ValueError("Non-deterministic error has occurred.")


@task(name="Task B", trigger=all_successful)
def task_b():
    EmailTask(
        subject="Test Prefect EmailTask Success",
        msg="Hello success",
        email_to="<mailto:email@gmail.com|email@gmail.com>",
    )


@task(name="Task C", trigger=all_failed)
def task_c():
    EmailTask(
        subject="Test Prefect EmailTask Fail",
        msg="Hello failed",
        email_to="<mailto:email@gmail.com|email@gmail.com>",
    )


with Flow("Trigger example") as flow:
    success = task_b(upstream_tasks=[task_a])
    fail = task_c(upstream_tasks=[task_a])

flow.register(project="")
Btw, are you using Prefect Cloud. I would recommend to check out Email Cloud Hook (it's very easy to setup) https://docs.prefect.io/orchestration/concepts/cloud_hooks.html#cloud-hooks
a
@Mariia Kerimova Thanks a lot. I will work on this. Thanks for your help
@Mariia Kerimova I wanna ran in PREFECT Server not cloud. Please help on this thanks
(prefect-env) root@ip-10-57-33-50:/venv/prefect-env/flows# python email.py Traceback (most recent call last): File "email.py", line 2, in <module> from prefect.triggers import all_successful, all_failed File "/venv/prefect-env/lib/python3.6/site-packages/prefect/__init__.py", line 1, in <module> import prefect.utilities File "/venv/prefect-env/lib/python3.6/site-packages/prefect/utilities/__init__.py", line 9, in <module> import prefect.utilities.notifications File "/venv/prefect-env/lib/python3.6/site-packages/prefect/utilities/notifications/__init__.py", line 1, in <module> from prefect.utilities.notifications.notifications import callback_factory File "/venv/prefect-env/lib/python3.6/site-packages/prefect/utilities/notifications/notifications.py", line 7, in <module> import smtplib File "/usr/lib/python3.6/smtplib.py", line 47, in <module> import email.utils File "/venv/prefect-env/flows/email.py", line 2, in <module> from prefect.triggers import all_successful, all_failed File "/venv/prefect-env/lib/python3.6/site-packages/prefect/triggers.py", line 47, in <module> from prefect import context ImportError: cannot import name 'context' (prefect-env) root@ip-10-57-33-50:/venv/prefect-env/flows# pip install context Collecting context Downloading context-0.0.tar.gz (1.0 kB) ERROR: Could not find a version that satisfies the requirement context.viewer (from context) ERROR: No matching distribution found for context.viewer WARNING: You are using pip version 20.3.3; however, version 21.1.2 is available. You should consider upgrading via the '/venv/prefect-env/bin/python -m pip install --upgrade pip' command. (prefect-env) root@ip-10-57-33-50:/venv/prefect-env/flows#
👀 1
m
Not sure my it failed on that step, what version of prefect are you using? Can you try to remove triggers from that flow and try running it again, does it fail?
a
(prefect-env) root@ip-10-57-33-50:/venv/prefect-env/leo# prefect version 0.14.15 (prefect-env) root@ip-10-57-33-50:/venv/prefect-env/leo#
@Mariia Kerimova can you help me
m
I'm not sure why that flow failed for you. Can you try this example?
Copy code
from prefect import task, Flow
from prefect.tasks.notifications.email_task import EmailTask

@task(name="Task A")
def send_email():
    EmailTask(
        subject="Test Prefect EmailTask",
        msg="Hello success",
        email_to="<mailto:email@gmail.com|email@gmail.com>"
    )

with Flow("Email Task example") as flow:
    send_email()

flow.register(project_name="")
a
(prefect-env) root@ubuntu:/venv/prefect-env/flows# python email.py Traceback (most recent call last): File "email.py", line 1, in <module> from prefect import task, Flow File "/venv/prefect-env/lib/python3.8/site-packages/prefect/__init__.py", line 1, in <module> import prefect.utilities File "/venv/prefect-env/lib/python3.8/site-packages/prefect/utilities/__init__.py", line 9, in <module> import prefect.utilities.notifications File "/venv/prefect-env/lib/python3.8/site-packages/prefect/utilities/notifications/__init__.py", line 1, in <module> from prefect.utilities.notifications.notifications import callback_factory File "/venv/prefect-env/lib/python3.8/site-packages/prefect/utilities/notifications/notifications.py", line 7, in <module> import smtplib File "/usr/lib/python3.8/smtplib.py", line 47, in <module> import email.utils File "/venv/prefect-env/flows/email.py", line 1, in <module> from prefect import task, Flow ImportError: cannot import name 'task' from partially initialized module 'prefect' (most likely due to a circular import) (/venv/prefect-env/lib/python3.8/site-packages/prefect/__init__.py) (prefect-env) root@ubuntu:/venv/prefect-env/flows# cat email.py from prefect import task, Flow from prefect.tasks.notifications.email_task import EmailTask @task(name="Task A") def send_email(): EmailTask( subject="Test Prefect EmailTask", msg="Hello success", email_to="email@gmail.com" ) with Flow("Email Task example") as flow: send_email() flow.register(project_name="test") (prefect-env) root@ubuntu:/venv/prefect-env/flows#
Please help me on this
I was tried two environment everywhere facing same issue
Thanks in advance