Ich habe eine CSV-Datei mit meinen Discourse-Benutzer-E-Mails. Ich muss ein Skript erstellen, das täglich ausgeführt wird und eine bestimmte E-Mail-Vorlage an eine bestimmte Gruppe von Benutzern sendet. Dann muss ich dieses Skript jeden Tag mit der nächsten Gruppe von Benutzern ausführen. Wie kann ich das tun?
Laut https://ask.discourse.com/ muss ich meinen Code zur Automatisierung erstellen und den Code und die Daten im Ordner plugins ablegen. Der Code-Vorschlag ist hier:
# frozen_string_literal: true
# name: auto-email
# about: Ein benutzerdefiniertes Plugin zum Senden von Massen-E-Mails mithilfe von Automatisierung und CSV-Dateien
# version: 0.3
require 'csv'
after_initialize do
if defined?(DiscourseAutomation)
# Definieren Sie ein eindeutiges Skript für die Automatisierung
DiscourseAutomation::Scriptable::AUTO_EMAIL_SCRIPT = "auto_email_script"
add_automation_scriptable(DiscourseAutomation::Scriptable::AUTO_EMAIL_SCRIPT) do
# Definieren Sie Felder für die Automatisierungs-UI:
field :email_template, component: :message # E-Mail-Text, der gesendet werden soll
field :csv_file_name, component: :text # Name der CSV-Datei im Ordner "data"
script do |context, fields, automation|
# Definieren Sie den Pfad zum Datenordner
data_folder_path = Rails.root.join("plugins", "auto-email", "data")
# Holen Sie sich den Namen der CSV-Datei aus dem Admin-Automatisierungsfeld
csv_file_name = fields["csv_file_name"]["value"]
csv_file_path = File.join(data_folder_path, csv_file_name)
# Stellen Sie sicher, dass die Datei existiert
unless File.exist?(csv_file_path)
Rails.logger.warn("CSV-Datei #{csv_file_path} nicht gefunden!")
next
end
# Parsen Sie die CSV-Datei
begin
users = CSV.read(csv_file_path, headers: true).map(&:to_hash)
rescue StandardError => e
Rails.logger.error("Fehler beim Lesen der CSV-Datei (#{csv_file_name}): #{e.message}")
next
end
# Holen Sie sich den Inhalt der E-Mail-Nachricht aus dem Automatisierungsfeld
email_body = fields["email_template"]["value"]
# Iterieren Sie durch die Benutzer aus der CSV und senden Sie E-Mails
users.each do |user_data|
email = user_data["email"] || user_data["normalized_email"]
user = User.find_by_email(email)
if user
begin
# Senden Sie eine automatisierte E-Mail mit SystemMessage
SystemMessage.new(user).send_email(
"custom_email_template", # Stellen Sie sicher, dass diese E-Mail-Vorlage existiert
message_body: email_body
)
Rails.logger.info("E-Mail gesendet an: #{email}")
rescue StandardError => e
Rails.logger.error("Fehler beim Senden der E-Mail an #{email}: #{e.message}")
end
else
Rails.logger.warn("Kein Benutzer mit der E-Mail gefunden: #{email}")
end
end
end
end
end
end
Und meine Plugin-Struktur sieht so aus:
/var/discourse/plugins/auto-email/
├── README.rb
├── data/
├── mamapedia_users_data_01.csv
├── lib/
├── plugin.rb
Wenn ich jedoch die App neu starte oder neu erstelle, sehe ich das neue Plugin nicht im Admin-Panel. Ich sehe keine Fehler in den Protokollen.
Was mache ich falsch? Muss ich noch etwas tun?