2013-12-18 3 views
0

У меня есть 100 разработчиков пользователей в моем приложении rails, и я хочу отправить им электронные письма. У меня есть данные SMTP, и я стараюсь следовать этому примеру. http://railscasts.com/episodes/61-sending-email-revisedКак отправить письмо всем разработчикам?

Моя проблема: я не могу понять, как заставить ее работать?

Я создал

rails g mailer newsletter single_email 

, но я немного не знаете, как взять его оттуда, любая помощь будет высоко оценен

EDIT - это то, что я до сих пор, это правильно?

# app/mailers/user_mailer.rb 

class UserMailer < ActionMailer::Base 
    def newsletter(user) 
    mail(to: user.email, subject: "Your subject") 
    end 
end 

# /lib/tasks/newsletter.rake 

task :send_newsletter => :environment do 
    User.all.each do |user| 
    UserMailer.newsletter(user).deliver 
    end 
end 

ответ

2

Вы можете создать грабли задачу, что:

# /lib/tasks/newsletter.rake 

task :send_newsletter => :environment do 
    User.find_each do |user| 
    UserMailer.newsletter(user).deliver 
    end 
end 

Это итерацию бы по всем Users и вызвать single_email от NewsletterMailer вы создали с генератором, когда вам запустите rake send_newsletter из командной строки.

Основная почтовая программа будет выглядеть примерно так:

# /app/mailers/user_mailer.rb 

class UserMailer < ActionMailer::Base 
    default from: '[email protected]' 

    def newsletter(user) 
    @user = user 
    mail(to: @user.email, subject: 'My newsletter') 
    end 
end 

Вид на адрес электронной почты, который будет вынесенным mail(to: @user.email, subject: 'My newsletter') выглядит следующим образом:

# app/views/user_mailer/newsletter.html.erb 

<!DOCTYPE html> 
<html> 
    <head> 
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' /> 
    </head> 
    <body> 
    <h1>Hello <%= @user.name %></h1> 
    <p>more text...</p> 
    </body> 
</html> 

Этот пример предполагает, что ваша User модель имеет name - это только для того, чтобы показать вам, что у вас есть доступ к @user в вашем почтовом представлении, потому что вы установили @user в def newsletter(user) раньше.

+0

btw У меня уже есть файл user_mailer.rb, так что я могу просто добавить к нему функцию single_email?также какой параметр следует передать функции single_email? – iCyborg

+0

@iCyborg да, у каждой почтовой программы может быть столько почтовых функций, сколько вам угодно - вам не нужно создавать отдельный для каждого. Вам необходимо передать все объекты, необходимые для выполнения своей работы: как минимум, это будет адрес электронной почты получателя. Все остальное зависит от того, что вы используете для создания этого письма - имя получателя, другие объекты и т. Д. – janfoeh

+0

Спасибо, я поставил текущий код, который у меня есть, это правильно? – iCyborg

1

это зависит от того, где и когда вы хотите отправить электронную почту

def single_email(users_email) 
mail(to: users_email, subject: "Your subject") 
end 

Теперь от контроллера или модели вы можете вызвать его. также создать HTML для электронной почты

NewsletterMailer.single_email(User.all.map(&:email).join(';')).deliver 
+0

Я хочу отправить письмо сразу, поэтому планирование не требуется, но я не уверен, как вызвать это действие single_email? можете ли вы уточнить это более подробно? спасибо – iCyborg

+0

Вы можете поместить эту строку в NewsletterMailer.single_email (User.all.map (&: email) .join (';')). Доставить в любое действие вашего контроллера. положите это на контроллер корня. вы также можете поместить это в инициализатор, поэтому, когда вы перезапустите сервер, он вызовет это действие. –

+0

Спасибо, я поставил текущий код, который у меня есть, правильно ли? – iCyborg

Смежные вопросы