Tengo un archivo CSV con los correos electrónicos de mis usuarios de Discourse. Necesito crear un script que se ejecute diariamente y envíe una plantilla de correo electrónico específica a un conjunto específico de usuarios. Luego, cada día necesito ejecutar este script con el siguiente conjunto de usuarios. ¿Cómo puedo hacerlo?
Según https://ask.discourse.com/, necesito crear mi código para automatizar esto y colocar el código y los datos en la carpeta plugins. La sugerencia de código está aquí:
# frozen_string_literal: true
# name: auto-email
# about: Un plugin personalizado para enviar correos electrónicos masivos utilizando automatización y archivos CSV
# version: 0.3
require 'csv'
after_initialize do
if defined?(DiscourseAutomation)
# Define un scriptable único para la automatización
DiscourseAutomation::Scriptable::AUTO_EMAIL_SCRIPT = "auto_email_script"
add_automation_scriptable(DiscourseAutomation::Scriptable::AUTO_EMAIL_SCRIPT) do
# Define campos para la interfaz de usuario de automatización:
field :email_template, component: :message # Cuerpo del correo electrónico a enviar
field :csv_file_name, component: :text # Nombre del archivo CSV en la carpeta "data"
script do |context, fields, automation|
# Define la ruta a la carpeta de datos
data_folder_path = Rails.root.join("plugins", "auto-email", "data")
# Obtiene el nombre del archivo CSV del campo de automatización del administrador
csv_file_name = fields["csv_file_name"]["value"]
csv_file_path = File.join(data_folder_path, csv_file_name)
# Asegúrate de que el archivo exista
unless File.exist?(csv_file_path)
Rails.logger.warn("¡Archivo CSV #{csv_file_path} no encontrado!")
next
end
# Analiza el archivo CSV
begin
users = CSV.read(csv_file_path, headers: true).map(&:to_hash)
rescue StandardError => e
Rails.logger.error("Error al leer el archivo CSV (#{csv_file_name}): #{e.message}")
next
end
# Obtiene el contenido del mensaje de correo electrónico del campo de automatización
email_body = fields["email_template"]["value"]
# Itera a través de los usuarios del CSV y envía correos electrónicos
users.each do |user_data|
email = user_data["email"] || user_data["normalized_email"]
user = User.find_by_email(email)
if user
begin
# Envía un correo electrónico automatizado usando SystemMessage
SystemMessage.new(user).send_email(
"custom_email_template", # Asegúrate de que esta plantilla de correo electrónico exista
message_body: email_body
)
Rails.logger.info("Correo electrónico enviado a: #{email}")
rescue StandardError => e
Rails.logger.error("Error al enviar correo electrónico a #{email}: #{e.message}")
end
else
Rails.logger.warn("No se encontró ningún usuario con el correo electrónico: #{email}")
end
end
end
end
end
end
Y mi estructura de plugin es así:
/var/discourse/plugins/auto-email/
├── README.rb
├── data/
├── mamapedia_users_data_01.csv
├── lib/
├── plugin.rb
Sin embargo, cuando reinicio o reconstruyo la aplicación, no veo el nuevo plugin en el panel de administración. No veo ningún error en los registros.
¿Qué estoy haciendo mal? ¿Necesito hacer algo más?