web-dev-qa-db-ja.com

特定のユーザーがメッセージを送信する場合を除いて、プライベートメッセージの受信時にユーザーに電子メールで通知することはできますか?

私も スレッドを開いた についてDrupal.orgでこれについて説明しましたが、久しぶりにここで質問してみようと思いました。

使用例:一般に、ユーザーに新しいプライベートメッセージの通知を受信して​​もらいます。これは、プライベートメッセージを電子メールで送信するための付属のサブモジュールを使用して行うことができます。

ユーザーが初めてログインしたときにプライベートメッセージの受信トレイにメッセージが表示されるように、私はルールモジュールを使用して、管理者アカウントに代わって登録時に「ようこそ」プライベートメッセージを自動的に送信しました。ただし、これにより「プライベートメッセージで電子メールを送信する」動作がトリガーされます。ユーザーは既に「電子メールアドレスを確認してください」という電子メールを受信して​​いるので、「ようこそ」のプライベートメッセージを受信したことを通知する2番目の電子メールを受信したくありません。

特定のユーザーからのメッセージ(または、特定のメッセージ)が電子メール通知をトリガーしないようにする方法はありますか?

付属のサブモジュールの代わりにルールを使用してこれを実装することも検討しましたが、これは通知の数を減らすための機能を使用できなかったことを意味します(現在、ユーザーがまだ送信していない場合、追加の電子メールを送信しないように設定しています)ログインして、特定のユーザーからのスレッド内の最初の電子メールを読みます。

4
Patrick Kenny

注:これはDrupal 7。に対する回答です。

Letharionが言ったように、hook_mail_alter()を使用できますが、何らかの理由でこれが管理者からのウェルカムメッセージかどうかを検出する必要があります。
このタスクには Context モジュールをお勧めしますが、実際にはこのフックでメッセージの件名を比較することができます。

更新

最初にContextモジュールの使用を提案しましたが、ルールでコンテキストを設定するのはそれほど簡単ではありません。その方法に興味があれば、回答の履歴を見ることができます。
現在のコードは作成者IDとメッセージの件名に関する情報を使用しています:

/**
 * Implements hook_mail_alter().
 */
function YOURMODULE_mail_alter(&$message) {
  $WELCOME_USER_ID = 1; // PM author from your rule
  $WELCOME_SUBJECT = 'Welcome to the site'; // PM subject from your rule
  // 'pm_email_notify_notice' is an ID for message notifications
  // from Privatemsg Email Notification module
  if($message['id'] == 'pm_email_notify_notice') {
    $privatemsg = $message['params']['message'];
    if ($privatemsg->author->uid == $WELCOME_USER_ID && $privatemsg->subject == $WELCOME_SUBJECT) {
    // If special context is set it means that we don't want to send an email
    //if(context_isset('context', 'my_privatemsg_stop_email')) {
      // Stop email
      $message['send'] = FALSE;
    }
  }
}
4
kalabro

hook_mail_alter を使用すると、$message['send'] = FALSEでの送信を停止できます。

残念ながら、これはメールが「最初のメール」または「uid 1から」であることを直接知る方法を提供しません。本文と直接一致する必要があると思います。ただし、$moduleを呼び出すことはできるので、そのように操作を制限できます。

3
Letharion

多少のリエンジニアリングが必要になる場合がありますが、PMテーブル(および他のリンクテーブル、PM私の目の前にあるデータベーススキーマ)。

ルールを使用して、「アカウントが作成されました」イベントの後にモジュールをトリガーできます。

それはあなたが望んでいるよりももっと手作業のコーディングかもしれません。

0
Aaron Ortega