web-dev-qa-db-ja.com

ノードで指定された日付フィールドを使用して、特定の日付で作成者にメールを送信するにはどうすればよいですか?

enter image description here

私のコンテンツには、著者が入力した1つの日付フィールドがあり、明日または1か月後などの将来の見積もり日として入力されます。その推定日に応じて、その日にメールがトリガーされます。

例:私の日付フィールドは「離乳日」であり、著者はその日の1か月後にメールをトリガーするように入力します。

1
DINE

これには、Rules Schedulerモジュール( Rules に含まれる)を使用できます。次のチュートリアルでは、あなたのケースと同様のケースについて説明します。 http://www.webwash.net/tutorials/how-send-follow-emails-using-rules-scheduler-drupal-7

つまり、次のことを行う必要があります。

  • パラメータとしてユーザーを含むメールを送信する「メール送信」コンポーネントを作成する
  • コンテンツタイプのノードが変更されたときにトリガーされるルールを作成する
  • そのルールのアクションを、作成した「電子メールの送信」コンポーネントを使用する「スケジュールされたコンポーネントの評価」に設定します。
  • アクションの「スケジュールされた評価日」で、「データ選択に切り替える」ボタンを押して、ドロップダウンメニューからノードの日付フィールドを選択する必要があります。

スケジュールされたコンポーネントの評価はcronによってトリガーされることに注意してください。サイトでcronが正しく構成されていることを確認する必要があります。

それが役に立てば幸い

1
dinopmi

以下の手順で説明するように、このような電子メールを送信するには、_ Rules モジュールをRules Scheduler(そのサブモジュール)とともに使用します。

ステップ1:「離乳」日を保存するフィールドを作成する

離乳日フィールドにマシン名(たとえば)field_weaning_dateがあり、1つの日付のみが許可されているとします。

ステップ2:ルール「コンポーネント」を作成する

作成されるルールComponentは次のとおりです Rules エクスポート形式(コピーと貼り付けを介して独自の環境にインポートするだけ):

{ "rules_send_email_notification" : {
    "LABEL" : "Send eMail notification",
    "PLUGIN" : "action set",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "USES VARIABLES" : { "user_to_notify" : { "label" : "User to be notified", "type" : "user" } },
    "ACTION SET" : [
      { "mail" : {
          "to" : [ "user-to-notify:mail" ],
          "subject" : "Reminder you requested",
          "message" : "This is a reminder that you asked for ...",
          "from" : "[site:mail]",
          "language" : [ "" ]
        }
      }
    ]
  }
}

明らかに、メールのSubjectおよびContentのレビューが必要な場合があります/チューニング。ただし、他のFrom電子メールIDを使用することもできます。

ステップ3:ルールコンポーネントを使用して「ルール」を作成する

Ruleが作成される Rules エクスポート形式です(コピーアンドペーストで独自の環境にインポートするだけです):

{ "rules_send_email_on_a_scheduled_date" : {
    "LABEL" : "Send eMail on a scheduled date",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "rules_scheduler" ],
    "ON" : { "node_presave" : [] },
    "IF" : [
      { "entity_has_field" : { "entity" : [ "node" ], "field" : "field_weaning_date" } }
    ],
    "DO" : [
      { "schedule_delete" : { "component" : "rules_send_email_notification", "task" : "[node:nid]" } },
      { "schedule" : {
          "component" : "rules_send_email_notification",
          "date" : [ "node:field-weaning-date" ],
          "identifier" : "[node:nid]",
          "param_user_to_notify" : [ "node:author" ]
        }
      }
    ]
  }
}

上記のルールは、前のステップのRules Componentを参照しています。

このルールの一部であるschedule_deleteは、データフィールドを更新するときに、以前に「スケジュールされた」リマインダーが確実に削除されるようにするためです(そのため、リマインダーが1つだけトリガーされ、最後に入力された日付が使用されます)。

注意:質問の仕様に従って、「作者」とは別の誰かが離乳日を更新した場合、その結果、次のようになります。

  1. 以前に要求された「離乳日」に電子メールは送信されません(希望しない場合は、ステップ3のルールアクションのschedule_deleteの部分を削除してください)。
  2. 「作者」は、更新された離乳日に別の電子メールを受信します(希望しない場合は、ステップ3でルール条件を追加して、編集者のユーザーIDが作者のユーザーIDと一致することを確認します)。
0
Pierre.Vriens