Xserverが今なら最大50%OFF!

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

Spam Mail Vectors by Vecteezy

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

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

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

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

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

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

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

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

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

この記事の内容

Flamingoのスパムメールは60日で完全に自動削除される

Flamingo 2.1 で導入された自動ゴミ箱送り機能で、初期状態でも、Flamingoのスパムメールは60日で完全に自動削除されます。

スパムの自動ゴミ箱送り

毎日たくさんのスパムメッセージを受け取っているなら、いちいち手作業でゴミ箱に移動させる作業を面倒に感じているかもしれません。Flamingo 2.1 で導入された自動ゴミ箱送り機能がその負担を軽くします。

特に設定は必要ありません。30日間放置してみてください。30日後、スパムメッセージがゴミ箱フォルダに勝手に移動します。ゴミ箱のメッセージはさらに30日が経過すると完全に消去されます。

https://contactform7.com/ja/2019/09/15/flamingo-21/

Flamingo がスパムフォルダにメッセージを保持する日数(デフォルト値は30)を増減できます。以下のように FLAMINGO_MOVE_TRASH_DAYS 定数を wp-config.php ファイルの中で定義してください:

define( 'FLAMINGO_MOVE_TRASH_DAYS', 10 ); // 10 days to move to trash

今後もゴミ箱への移動を手動で行いたい場合は、FLAMINGO_MOVE_TRASH_DAYS を false または 0 に設定することで自動ゴミ箱送りを無効にできます

1日でspamメールを削除する設定

FLAMINGO_MOVE_TRASH_DAYS を 1  に設定することで1日でspamメールが自動ゴミ箱送りになります。

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をコピーしました!
コメントを閉じる

コメント

コメントする

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

CAPTCHA

この記事の内容
  • URLをコピーしました!