我正在使用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();
答案 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计算自定义帖子类型的帖子总数。
执行此操作将获取所有结果。