Xserverが今なら最大50%OFF! 2022年11月25日(金)12:00まで

Flamingoの大量のスパムを一括で削除する方法

Spam Mail Vectors by Vecteezy

この記事は約5分で読めます。
本文は約3202文字です

Contact Form 7とFlamingoを組み合わせていたら、Flamingoに大量にスパムメールが溜まってしまいました。

WordPressサイトでは、フォームのスパムを防ぐためにContact form 7とGoogle reCaptchaの組み合わせがよく利用されます。

その際、合わせてインストールされるのがFlamingoだと思います。

FlamingoはContact form 7がスパム判定したメールの履歴が残せるプラグインです。

しかし、大量にスパムがある場合、ダッシュボードの一覧から削除するしかなく、さらに一括で削除することができません。

Gmailのように一定期間経ったら自動的に削除してくれればいいのですが、その機能はありません。

数千通もスパムメールがあると削除するのも大変です。

そこで、この記事ではFlamingoに登録されたスパムメールを一括で削除する方法をお伝えします。

FlamingoのスパムメールはDBに登録されている

Flamingoの受信メッセージは3つのカスタム投稿タイプで構成されています。

  • flamingo_inbound
  • flamingo_contact
  • flamingo_outbound

Flamingoの受信メッセージのスパムは、カスタム投稿タイプのpost_statusがflamingo_spamとなって登録されています。

Flamingoの受信メッセージにはその投稿タイプの一覧が表示されているわけです。

Flamingoのスパムメールを削除するには?

もし、スパムの一覧を削除したいのであれば、カスタム投稿タイプのpost_statusがflamingo_spamのポストをすべて削除すればいいということになります。

①DBを直接叩く方法

DBを直接叩く方法があります。

DELETE FROM wp_posts WHERE post_status LIKE 'flamingo_spam'

wp cliを使うと簡単に実行できます。

wp db query "DELETE FROM wp_posts WHERE post_status LIKE 'flamingo_spam'"

しかし、この方法だとDBを直接操作しているため、カスタム投稿タイプに関連付けられた8個のpost_metaテーブルが削除されません。

②Wordpress関数からスパムメールを削除する

使い方

このスクリプトをサーバーに保存して、外部から読み込めばスパムメールが2000件づつ削除されます。

2000件以上ある場合は、複数回読み込んでください。

cronで実行すれば、いつもスパムメールがきれいに無くなっているはずです。

スクリプト

<?php
define('WP_USE_THEMES', false);
require( dirname( __FILE__ ) . '/wp-blog-header.php' );


$args = array('flamingo_inbound', 'flamingo_contact', 'flamingo_outbound'),
    'fields' => 'ids',
    //'post_status' => array('publish', 'trash', 'flamingo-spam'),
    'post_status' => array('flamingo-spam'),
    'posts_per_page' => 2000,
    'no_found_rows' => true,
    'update_post_term_cache' => false,
    'update_post_meta_cache' => false,
    'orderby' => 'ID',
    'order' => 'ASC'
);


$flamingo_msgs = new WP_Query($args);
$total_deleted = 0;


while ($flamingo_msgs->have_posts()) {
    $msgs_ids = $flamingo_msgs->posts;
    foreach ($msgs_ids as $msg_id) {
        if (null == wp_delete_post($msg_id, true)) {
            echo "Error deleting item ID: $msg_id";
        } else {
            $total_deleted++;
        }
    }
    // Check if there are more pages to process
    if ($flamingo_msgs->max_num_pages > $flamingo_msgs->query['paged']) {
        $flamingo_msgs->query['paged']++;
        $flamingo_msgs->query_vars['paged']++;
        $flamingo_msgs->get_posts();
    } else {
        break;
    }
}


echo "Deleted $total_deleted messages.";
wp_reset_postdata();


// Display some stats - for fun.   
echo 'Memory usage: ', intval(memory_get_usage() / (1024 * 1024)), "MB\n";
echo 'Peak memory usage: ', intval(memory_get_peak_usage() / (1024 * 1024)), "MB\n";


$time_end = microtime(true);
$time = $time_end - $time_start;
echo "Process Time: {$time} seconds.";

まとめ

Flamingoの受信メッセージのスパムに分類されたメッセージは、一度ゴミ箱に移動しないと削除できません。

しかし、すべてのスパムメールを一括でゴミ箱に移動するボタンは用意されていません。

この記事では、Flamingoの受信メッセージのスパムメールを一括で削除するDBクエリやスクリプトをご紹介しました。

参考なったらシェアお願いします!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

サーバーソムリエのアバター サーバーソムリエ レンタルサーバー鑑定士

国内のあらゆるレンタルサーバーを使用、管理した経験があります。サーバー選びからWordpressを使ったサイト運営まで丸っとお任せください。あなた様のご希望にそった本当に使える最適なサーバーをご紹介します。

コメントを閉じる

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

この記事の内容