wp_mail () не работает для плагина WordPress - PullRequest
1 голос
/ 29 марта 2019

У меня есть плагин, который отправляет электронное письмо при нажатии кнопки. Известно, что с формой нет проблем (поскольку данные отлично сохраняются в БД), что может быть неправильным в этом фрагменте кода, что он не может отправить электронное письмо ни клиенту, ни администратору. Если нет проблем с формой, может быть проблема с SMTP, что маловероятно, потому что контактная форма 7 отлично отправляет почту как клиенту, так и администратору.

Функция wte_enquiry_send_mail() - это отправка электронной почты с использованием функции wp_mail().

function wte_enquiry_send_mail()
{
    $email = sanitize_email( $_POST['enquiry_email'] );
    $wp_travel_engine_settings = get_option( 'wp_travel_engine_settings',true );
    $name = esc_attr( $_POST['enquiry_name'] );
    $country = isset( $_POST['enquiry_country'] ) ? esc_attr( $_POST['enquiry_country'] ):'N/A';
    $contact = esc_attr( $_POST['enquiry_contact'] );
    $adult = isset( $_POST['enquiry_adult'] ) ? esc_attr( $_POST['enquiry_adult'] ):'N/A';
    $children = isset( $_POST['enquiry_children'] ) ? esc_attr( $_POST['enquiry_children'] ):'N/A';
    $message1 = esc_attr( $_POST['enquiry_message'] );
    $postid = get_post( $_POST['enquiry_pid'] );
    $slug = $postid->post_name;
    $url = '<a href='.esc_url( get_permalink( $postid ) ).'>'.esc_attr( $slug ).'</a>';
    $subject = isset( $wp_travel_engine_settings['query_subject'] ) ? esc_attr( $wp_travel_engine_settings['query_subject'] ):'Enquiry received';
    $admin_email = get_option ('admin_email');
    $to = sanitize_email($admin_email);
    $email_from = $name.'<'.$email.'>';
    $headers[] = 'From: '.$name.' <'.$admin_email .'>';
    $headers[] = 'Reply-To: '.$name.' <'.$email .'>';
    $message = __("Name: ","wp-travel-engine"). $name.'<br/>';
    $message.= __("Country: ","wp-travel-engine"). $country.'<br/>';
    $message.= __("Trip: ",'wp-travel-engine'). $url.'<br/>';
    $message.= __("Email: ","wp-travel-engine"). $email.'<br/>';
    $message.= __("Contact: ",'wp-travel-engine'). $contact.'<br/>';
    $message.= __("Adult: ","wp-travel-engine"). $adult.'<br/>';
    $message.= __("Children: ",'wp-travel-engine'). $children.'<br/>';
    $message.= __("Message: ",'wp-travel-engine'). $message1.'<br/>';

    add_filter('wp_mail_content_type', create_function('', 'return "text/html"; '));

    if ( strpos( $wp_travel_engine_settings['email']['emails'], ',') !== false ) {
            $wp_travel_engine_settings['email']['emails'] = str_replace(' ', '', $wp_travel_engine_settings['email']['emails']);
        $admin_emails = explode( ',', $wp_travel_engine_settings['email']['emails'] );

        foreach ( $admin_emails as $key => $value ) {
                $admin_sent = wp_mail( $value, $subject, $message, $headers );
            }
    }
    else{
        $wp_travel_engine_settings['email']['emails'] = str_replace(' ', '', $wp_travel_engine_settings['email']['emails']);
        $admin_sent = wp_mail( $to, $subject, $message, $headers );
    }

Я ожидаю, что автоматическое письмо будет отправлено как клиенту, так и администратору после заполнения формы.

1 Ответ

0 голосов
/ 30 марта 2019

@ Xhynk справедливо указал мне на проверку логов сервера. Я сделал и понял, что есть ошибка SMTP из-за Политики домена отправителя моего хоста.

Если ваш сайт - example.com, и у вас есть почтовая форма PHP, отправляющая электронную почту, адрес FROM в этом письме должен быть примерно таким: contact@example.com. Электронные письма, отправленные с веб-сервера с использованием адреса FROM из другого места (например, Yahoo или Google), будут заблокированы и никогда не будут отправлены.

Я использовал G-mail, как только я его изменил, все заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...