如何在按钮点击时发送wp_mail?

I'm building an options page in my WordPress plugin, I've got a form with to, from, subject & message with a save and send button.

The idea is you fill in the to, from, subject and message click save then click send to send the message. I'm having trouble trying to run the send function on button click.

I've checked out: Wordpress Plugin: Call function on button click in admin panel

Also checked out Is this the right way to execute some PHP in my plugin after a button click on an options page?

My code is as follows:

add_action('admin_menu', 'custom_mail_menu');
function custom_mail_menu() {

//create new top-level menu
add_options_page('Custom Mail Settings', 'Custom Mail Settings', 'administrator', __FILE__, 'custom_mail_settings_page');

//call register settings function
add_action( 'admin_init', 'custom_mail_settings' );
}

function custom_mail_settings() {
//register our settings
register_setting( 'custom-mail-settings-group-15167', 'custom_mail_to' );
register_setting( 'custom-mail-settings-group-15167', 'custom_mail_from' );
register_setting( 'custom-mail-settings-group-15167', 'custom_mail_sub' );
register_setting( 'custom-mail-settings-group-15167', 'custom_mail_message' );
}

function sendMail() {
$sendto = esc_attr( get_option('custom_mail_to') );
$sendfrom =  esc_attr( get_option('custom_mail_from') );
$sendsub = esc_attr( get_option('custom_mail_sub') );
$sendmess = esc_attr( get_option('custom_mail_message') );
$headers = "From: Wordpress <" . $sendfrom . ">";
wp_mail($sendto, $sendsub, $sendmess, $headers);

}

function custom_mail_settings_page() {

if (!current_user_can('manage_options'))  {
    wp_die( __('You do not have sufficient pilchards to access this page.')    );
}


?>
<div class="wrap">
<h2>Custom Mail Settings</h2>

<form method="post" action="options.php">
    <?php settings_fields( 'custom-mail-settings-group-15167' ); ?>
    <?php do_settings_sections( 'custom-mail-settings-group-15167' ); ?>
    <table class="form-table" style="width: 50%">
        <tr valign="top">
            <th scope="row">To</th>
            <td>
                <input style="width: 100%" type="text" name="custom_mail_to" value="<?php echo esc_attr( get_option('custom_mail_to') ); ?>" />
            </td>
        </tr>

        <tr valign="top">
            <th scope="row">From</th>
            <td>
                <input style="width: 100%" type="text" name="custom_mail_from" value="<?php echo esc_attr( get_option('custom_mail_from') ); ?>" />
            </td>
        </tr>

        <tr valign="top">
            <th scope="row">Subject</th>
            <td>
                <input style="width: 100%" type="text" name="custom_mail_sub" value="<?php echo esc_attr( get_option('custom_mail_sub') ); ?>" />
            </td>
        </tr>
        <tr valign="top">
        <th scope="row">Message</th>
            <!-- <td><input type="text" name="custom_mail_message" value="?php echo esc_attr( get_option('custom_mail_message') ); ?>" /></td> /-->
        <td>
            <textarea style="text-align: left;" name="custom_mail_message" rows="10" cols="62"><?php echo esc_attr( get_option('custom_mail_message') ); ?></textarea>
        </td>
        </tr>
        <tr>
            <td></td>
            <td><?php submit_button('Save'); ?><td><?php submit_button('send'); ?></td></td>

        </tr>
    </table>
  </form>
</div>

So my question is: How would I run the sendMail() function when the send button is clicked in my form with the supplied values from the form ?

You can check for post submission within your function:

<?php
function sendMail() {
    if($_POST['send']) {
        $sendto = esc_attr( get_option('custom_mail_to') );
        $sendfrom =  esc_attr( get_option('custom_mail_from') );
        $sendsub = esc_attr( get_option('custom_mail_sub') );
        $sendmess = esc_attr( get_option('custom_mail_message') );
        $headers = "From: Wordpress <" . $sendfrom . ">";
        wp_mail($sendto, $sendsub, $sendmess, $headers);
    }
}

And on your form, remove the action value - keep it blank:

<form method="post" action="">

Change you submit_button too so that it can post send value as a key as we are looking for $_POST['send'] to send the mail:

<?php submit_button('Send', 'primary', 'send'); ?>