Error when invoking wp_mail() from within a plugin

Dear Folks,

I am writing my first WordPress plugin and I am having a problem with the


function. My plugin is intended to be used by a visitor to the site to send an invitation to a friend with a link to the website.

Here is the code:


if (!empty($_POST)) {
    error_log("process form", 0);
    if (isset($_POST['action']) &&  $_POST['action'] === 'send_email') {
        return "Your email has been sent successfully";
    else {
        error_log("Email could not be sent", 0);

function send_email() {
    $subject = 'test';
    $message = 'this is a test from send invitation';
    $to = ;
    wp_mail($to, $subject, $message);

The code runs successfully until it meets


and prints in the error log that it is undefined. I know that pluggables are loaded after all plugins are loaded and one must use add_action to have it defined but I have seen many plugins where the


function is used without using any


declaration. If I were to

add_action('plugins_loaded', send_email)

the function is defined but it fires of an email on every page load which is not what I want.

There is a gap in my understanding of how things are working here and I hope someone could shed some light help me out with my code.

Thanks in advance.