この記事は約7分で読めます。
本文は約4000文字です
Flamingoの大量のスパムを一括で削除する方法


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クエリやスクリプトをご紹介しました。
コメント