Отправка электронной почты тысячам кандидатов на подачу новой работы - Wp Job manager - PullRequest
0 голосов
/ 06 июня 2018

Я использую MailGun API для отправки Пакетной электронной почты.Я использую WP_Query для создания запроса, который на самом деле представляет собой список электронных писем, которые должны быть уведомлены о новых публикациях вакансий.

Эти электронные письма извлекаются на основе соответствующей категории.Например, если задание опубликовано в категориях A, B и Z, то должны быть уведомлены о резюме / кандидатах с категориями A, B и Z (по крайней мере, любой из этих соответствующих категорий).

Проблема заключается в отправке электронной почты MailGunкоторый имеет предел 1000.

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

Я использую MailGun API только потому, что он имеет возможность отправлять 1000 электронных писем / сессий, поэтому, если мы используем wp-mail, то страница умрет илибаза данных не так эффективна в обработке.

Я могу с уверенностью сказать, что мой код плохо написан : -D

Пожалуйста, смотрите ниже мой код и предлагайте улучшения.Также этот код я добавил непосредственно в файл шаблона плагина job-submit.php

Вот код:

      $job_term_list = wp_get_post_terms($job->ID, 'job_listing_category', array("fields" => "names"));

        $job_skills = implode(',',$job_term_list);

        $tax_terms = get_terms('resume_function', array('hide_empty' => true));

        foreach($tax_terms as $term_single) $resume_cat_name[] = $term_single->name; 

        $result=array_intersect($resume_cat_name,$job_term_list);

        $fin_result=implode(',',$result);  //Matched posted skills

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

    $args = array(
        'post_type'              => array( 'resume' ),
        'post_status'            => array( 'publish' ),
        'has_password'           => false,
        'nopaging'               => false,
        'paged'                  => $paged,
        'posts_per_page'         => '10',
        'ignore_sticky_posts'    => false,
        'order'                  => 'DESC',
        'orderby'                => 'title',
        'resume_function' => $fin_result,

    );

$query = new WP_Query( $args );
$total = $query->found_posts;

if ($total < 1000){
 $paged = 1;
 $post_per_page = '1000';
}
 else{
 $paged = ceil($total / 1000) ;
 $post_per_page = $paged.'000';
 }
$args_two = array(
    'post_type'              => array( 'resume' ),
    'post_status'            => array( 'publish' ),
    'has_password'           => false,
    'nopaging'               => false,
    'paged'                  => $paged,
    'posts_per_page'         => $post_per_page,
    'ignore_sticky_posts'    => false,
    'order'                  => 'DESC',
    'orderby'                => 'title',
    'resume_function' => $fin_result,

);

$query_two = new WP_Query( $args );

if ( $query->have_posts() OR $query_two->have_posts() ) {


    while ( $query->have_posts() ) {
        $query->the_post();

        $post_id = get_the_ID();

        $candidate_name = get_post_meta( $post_id, '_candidate_name', true );
        $candidate_email = get_post_meta($post_id, '_candidate_email', true);



        if($candidate_email){

*** HERE I WILL ADD MAILGUN CURL FUNCTIONALITY FOR BATCH EMAIL ****



        }

    }

    while ( $query_two->have_posts() ) {
        $query_two->the_post();

        $post_id = get_the_ID();

        $candidate_name = get_post_meta( $post_id, '_candidate_name', true );

        if($candidate_email){
       *** HERE ALSO I WILL ADD MAILGUN CURL FUNCTIONALITY FOR BATCH EMAIL ****
        }

    }

}
wp_reset_postdata();

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Я добавляю ответ немного поздно, но на тот случай, если он кому-нибудь понадобится.Вот что я сделал:

Я просто добавил флаг false в таблицу базы данных для отправки почты, а затем, используя CRON, я отправляю электронную почту один раз в день, проверяя флаг FALSE отправки почты для каждого идентификатора задания.

После успешной отправки почты я снова обновил флаг столбца таблицы на TRUE (Отправлено почты).

В & args я также обновил

'posts_per_page'         => '10',

К

'posts_per_page'         => $Total_Job_Count,

Где $ Total_Job_Count вычисляет общее количество сообщений для пользовательского типа сообщений.

При этом выбираются все результаты.

0 голосов
/ 06 июня 2018

Mailgun просто не является подходящим инструментом для работы - независимо от того, насколько эффективен ваш код.

Mailgun предназначен для транзакционной электронной почты - и то, что вы хотите сделать, ближе к широковещательной почте.Взгляните на API-интерфейсы Mailchimp, в которых вы можете программно создавать динамические группы получателей, а затем отправлять электронную почту в список, а не пытаться повторно обращаться к API-интерфейсу Mailgun.

...