web-dev-qa-db-ja.com

メールを一括送信する方法

特定のイベントに対応して何千もの電子メールを送信する必要があるので、電子メールの送信は手動ではなく自動です。

私のWebサイトがホストされているサーバーでは、電子メールの送信が1時間に制限されています(1時間に約500)ので、分割する必要があります。

その機能を持っているいくつかのプラグインはありますか?それとも私がそれをするのを助けるPHPライブラリ?

ありがとう

2
pAkY88

sleep()を使うのは良い考えだとは思いません。スリープしている間にリソースを消費し、スクリプトのタイムアウトの問題に遭遇する可能性があるからです。

また、重要な電子メールや大量の電子メールをWebサーバーから送信することはお勧めできません。これは、意図したとおりの動作ではないためです。標準のmail() / wp_mail()関数から送信されたメッセージは、実際のMTAから送信されたメッセージよりもスパムとしてフラグが立てられる可能性が高くなります。メッセージが返ってきても通知はありません。恣意的な制限を超えたため、またはスパムを起こしていると思われるために、ホストがメッセージをドロップする可能性があります。等...

これを行う最善の方法は、MailChimpのように大量の電子メールを送信するように設計されたサービスを使用することです。それははるかに信頼性が高く効率的になります。あなたのWPユーザーアカウントをキャンペーンメンバーと同期させるには、 MailChimpへのユーザーのインポート のようなプラグインを使用できます。 MailChimpを介してWPで生成されたメッセージを中継する MailChimp STS のようなプラグインもあります。あなたが正確に必要なものを見つけるためにプラグインリポジトリを検索する必要があるかもしれませんが、利用可能なMailChimp関連のプラグインがたくさんあります。

Webサーバーからメッセージを送信することを主張する場合は、少なくともwp_mail()の代わりに SwiftMailer のようなライブラリを使用する必要があります。メッセージが誤ってスパムとしてフラグを立てられる可能性を減らすために多くの努力を払い、高度な一括送信システムを備えています。

2
Ian Dunn

get_users(); を使用して、次のようなコード(おそらく実用的なコード例)が必要になります。

$users = get_users( /* Add your args here */ );
foreach ( $users as $user )
{
    $user_email_addresses[] = $user->email; // receive array of user mail addresses here
}

function wpse28212_send_delayed_bulkmail( $email_addresses )
{
    $i = 0;
    foreach ( $user_email_addresses as $email_addy )
    {
        ++$i; // count users up

        $delay = 0; // in miliseconds (ms)

        if ( $i >= 500 )
        {
            $delay = 3600000; // 1 hour
        }
        sleep( $delay );

        wp_mail( $email_addy, 'subject', 'message' );
    }
}

リンク集

1
kaiser