web-dev-qa-db-ja.com

複数の管理者にサイトのメールを送信する

簡単な質問ですが、答えはどこにも見つかりません-

Drupal 7?)でプライマリ管理者アカウントに複数のアドレスを指定するにはどうすればよいですか?

別の言い方をすると、メールサーバーに多数の転送フィルターを設定せずに、どのようにしてDrupal管理者のメールを複数の人に送信するのですか?

ありがとう!

4
aendrew

これはmuchとPontusの答えに似ていますが、アプローチは異なります。私はこれをテストしましたが、Ubuntuサーバーの電子メールプログラムで動作しました(外部のSMTPサーバー経由ではありませんが、適切なプログラムで動作するはずです)。 Pontusのソリューションは、見かけどおりに機能します。ただし、受信者には両方のメールアドレスが表示されます。新しいCCではなく、BCCアドレス(ブラインドカーボンコピー)を設定することをお勧めします。

モジュールを作成したくない場合は、 http://drupal.org/project/maillog をお勧めします。

function MYMODULE_mail_alter(&$message) {
 if (-- enter your condition here -- ) {
   $message['headers']['BCC'] = $message['headers']['Bcc'] = '[email protected]';
 }
 }

重大なセキュリティリスクを開いたことに注意してください。hidden@ example.comは、スーパーユーザーのパスワードリセットメールアドレスを含むすべてのメールを見ることができます。したがって、メッセージのIDを含む$ message ['id]を使用して条件を追加することを忘れないでください。

なんらかのsystem_settings_form()で作成されたフォームといくつかのvariable_get()を追加することで、モジュールを豪華で実用的なものにすることができます。

また、この目的がモジュールの新しいセキュリティリリースで複数のメールを送信することである場合は、すぐに使える設定で複数のメールアドレスを追加できることを忘れないでください。

3
AyeshK

これまでにこの問題に遭遇したことはありませんが、考えられる唯一の方法は hook_mail_alter() を実装することです。

テストされていないコードですが、次のようになると思います。

    function MYMODULE_mail_alter(&$message) {
      $additional_emails = ',[email protected]';
      $site_mail = variable_get('site_mail', '');
      if ($message['to'] == $site_mail) {
          $message['to'] = $site_mail . $additional_admins;
        }
      }
    }
1
Pontus Nilsson

d6のmultiple_emailを使用

function MYMODULE_mail_alter(&$message) {
  if ($message['id'] != 'multiple_email_confirmation') {
    $user_info = array('mail' => $message['to']);
    $loaded = user_load($user_info);
    if (isset($loaded->uid) && $loaded->uid) {
      $to = multiple_email_load_addresses(1);
      foreach($to as $mail_add) {
        if (isset($mail_add->confirmed) && $mail_add->confirmed && ($mail->primary_address == 0)){
          $message['to'] .= ", " . $mail_add->email;
        }
      }       
    }       
  }
}
0
marcus7777

「複数の電子メール」モジュールは、ユーザープロファイル内の複数の電子メールアドレスに送信するようには見えません。以下のコードは、(a)ユーザーの役割が「管理者」でないかどうかを確認し、「home_email」フィールドと「email_for_text_messages」フィールドにメールの値があるかどうかを確認し、プロファイルのデフォルトのメールフィールドに加えてこれらのアドレスにメールを送信します。

function MYMODULE_mail_alter(&$message) {
 $user = user_load_by_mail($message['to']);
 $roles = array('administrator');
 $check = array_intersect($roles, array_values($user->roles));
 if (empty($check)) {
    if (isset($user->field_home_email['und']['0']['value'])) {
      $additional_emails = ','.$user->field_home_email['und']['0']['value'];
    }
  if (isset($user->field_email_for_text_messages['und']['0']['value'])) {
    $additional_emails .= ','.$user->field_email_for_text_messages['und']['0']['value'];
    }
   $message['to'] = $message['to'].$additional_emails;
 }
}
0
markfullmer