在新工作提交时向成千上万的候选人发送电子邮件 - Wp工作经理

时间:2018-06-06 15:39:39

标签: php wordpress mailgun

我正在使用MailGun API发送批量电子邮件。我正在使用WP_Query来构建查询,这实际上是必须在新工作发布上通知的电子邮件列表。

这些电子邮件是根据匹配类别提取的。如果Job已发布在A类,B类和Z类中,则应通知具有A,B和Z类(至少任何这些匹配类别)的简历/候选人。

问题出在MailGun批量电子邮件中,其限制为1000。

我尝试使用下面的代码,看起来它工作但不完全。它应该显示更多数据。如果能以更好的方式完成,我需要建议。

我正在使用MailGun API,因为它能够发送1000封电子邮件/会话,因此如果我们使用wp-mail,那么页面将会死亡或数据库的处理效率不高。

我可以自信地说我的代码写得不好 :-D

请参阅下面的代码并提出改进建议。此代码我直接添加了插件的模板文件job-submitted.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 :(得分:0)

Mailgun根本不适合这项工作 - 无论您的代码效率如何。

Mailgun专为交易电子邮件而设计 - 您要做的就是更接近广播邮件。查看Mailchimp API,您可以在其中以编程方式创建动态的收件人组 - 然后将电子邮件发送到列表,而不是尝试重复访问Mailgun API。

答案 1 :(得分:0)

我添加答案的时间有点晚,以防万一有人需要它。这是我所做的:

我只是在数据库表中添加了用于发送邮件的错误标志,然后使用CRON通过检查每个作业ID的邮件发送标志FALSE来每天发送一次电子邮件。

成功发送邮件后,我再次将表列标志更新为TRUE(已发送邮件)。

在&args中,我也进行了更新

'posts_per_page'         => '10',

收件人

'posts_per_page'         => $Total_Job_Count,

其中$ Total_Job_Count计算自定义帖子类型的帖子总数。

执行此操作将获取所有结果。