لدي ملف CSV يحتوي على رسائل البريد الإلكتروني لمستخدمي Discourse. أحتاج إلى إنشاء برنامج نصي يتم تشغيله يوميًا ويرسل قالب بريد إلكتروني محدد إلى مجموعة محددة من المستخدمين. ثم، أحتاج إلى تشغيل هذا البرنامج النصي كل يوم مع المجموعة التالية من المستخدمين. كيف يمكنني فعل ذلك؟
وفقًا لـ https://ask.discourse.com/ ، أحتاج إلى إنشاء الكود الخاص بي لأتمتة ذلك ووضع الكود والبيانات في مجلد plugins. اقتراح الكود هنا:
# frozen_string_literal: true
# name: auto-email
# about: A custom plugin to send bulk emails using automation and CSV files
# version: 0.3
require 'csv'
after_initialize do
if defined?(DiscourseAutomation)
# Define a unique scriptable for the automation
DiscourseAutomation::Scriptable::AUTO_EMAIL_SCRIPT = "auto_email_script"
add_automation_scriptable(DiscourseAutomation::Scriptable::AUTO_EMAIL_SCRIPT) do
# Define fields for the automations UI:
field :email_template, component: :message # Email body to be sent
field :csv_file_name, component: :text # Name of CSV file in the "data" folder
script do |context, fields, automation|
# Define the path to the data folder
data_folder_path = Rails.root.join("plugins", "auto-email", "data")
# Get the CSV file name from the admin automation field
csv_file_name = fields["csv_file_name"]["value"]
csv_file_path = File.join(data_folder_path, csv_file_name)
# Ensure the file exists
unless File.exist?(csv_file_path)
Rails.logger.warn("CSV file #{csv_file_path} not found!")
next
end
# Parse the CSV file
begin
users = CSV.read(csv_file_path, headers: true).map(&:to_hash)
rescue StandardError => e
Rails.logger.error("Error reading CSV file (#{csv_file_name}): #{e.message}")
next
end
# Get the email message content from the automation field
email_body = fields["email_template"]["value"]
# Iterate through users from the CSV and send emails
users.each do |user_data|
email = user_data["email"] || user_data["normalized_email"]
user = User.find_by_email(email)
if user
begin
# Send an automated email using SystemMessage
SystemMessage.new(user).send_email(
"custom_email_template", # Ensure this email template exists
message_body: email_body
)
Rails.logger.info("Email sent to: #{email}")
rescue StandardError => e
Rails.logger.error("Failed to send email to #{email}: #{e.message}")
end
else
Rails.logger.warn("No user found with email: #{email}")
end
end
end
end
end
end
وهيكل المكون الإضافي الخاص بي يبدو كالتالي:
/var/discourse/plugins/auto-email/
├── README.rb
├── data/
├── mamapedia_users_data_01.csv
├── lib/
├── plugin.rb
ومع ذلك، عند إعادة تشغيل التطبيق أو إعادة بنائه، لا أرى المكون الإضافي الجديد في لوحة الإدارة. لا توجد أخطاء في السجلات.
ماذا أفعل بشكل خاطئ؟ هل أحتاج إلى فعل شيء آخر؟