2012-04-30 7 views
2

Я создаю приложение, которое будет использоваться для отправки электронной почты. Мне не нужно использовать обычные почтовые программы и просматривать шаблоны, потому что я просто получаю данные, которые будут использоваться для генерации электронной почты. Однако я предполагаю, что есть некоторые преимущества для использования ActionMailer, а не для непосредственного взаимодействия с SMTP. Я столкнулся с проблемами при попытке создать экземпляр нового экземпляра ActionMailer::Base. Как я могу использовать ActionMailer самостоятельно, без необходимости определять новый класс, который расширяет ActionMailer::Base?Rails: Как использовать ActionMailer самостоятельно?

+0

Вопрос немного запутанный. Вы говорите, что создаете RESTful API для отправки электронных писем. Приложение rails, которое обрабатывает API RESTful, также отвечает за отправку электронных писем? – patrickmcgraw

+0

Вы правы, извините. Я обновил вопрос и вынул часть о REST, потому что это не имело никакого отношения к моему реальному вопросу. – Andrew

+0

Почему вы не хотите расширять ActionMailer :: Base? Так оно и должно работать. – tybro0103

ответ

7

Основная функциональность для ActionMailer обеспечивается mail gem. Это позволяет отправлять почту очень просто, например:

Mail.deliver do 
    from  '[email protected]' 
    to  '[email protected]' 
    subject 'Here is the image you wanted' 
    body  File.read('body.txt') 
    add_file :filename => 'somefile.png', :content => File.read('/somefile.png') 
end 

Он поддерживает доставку всех те же методы, что ActionMailer делает.

+0

Можем ли мы использовать заполнители в почтовом теле, используя почтовый ящик. – mohit

+0

Так предположительно вы можете просто использовать это в скрипте Ruby без Rails? – Donato

2

Это самое основное решение. Вы должны изменить параметры smtp и жестко закодированные значения на переменные и т. Д. Таким образом, вам не нужно использовать представление. Если вы все еще хотите использовать ERB, я предлагаю вам проверить Railscast 206.

Просто измените этот код, поместите его в файл как «test_email.rb» и называем его ruby test_email.rb

require 'action_mailer' 

ActionMailer::Base.smtp_settings = { 
    :address    => "smtp.gmail.com", 
    :port     => 587, 
    :domain    => "gmail.com", 
    :user_name   => "testuser123", 
    :password    => "secret", 
    :authentication  => "plain", 
    :enable_starttls_auto => true 
} 

class TestMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    # def somemethod() 
    # mail(:to => "John Doe <[email protected]>", :subject => "TEST", :body => "HERE WE GO!!!") 
    # end 

    def mail(args) 
    super 
    end 
end 

# TestMailer.somemethod().deliver 
TestMailer.mail(:to => "John Doe <[email protected]>", :subject => "TEST", :body => "HERE WE GO!!!") 
+0

Это то, что я уже делаю. У меня есть общая почтовая программа с общим методом «подготовки». Я хотел бы сделать что-то вроде call 'mail()' непосредственно, так как это все, что я использую. – Andrew

+0

Хорошо, я изменил свой код на более общий. Это то, чего вы хотите, но не так, как вы это предлагали. Я знаю, что у него немного накладных расходов, но он соответствует вашим требованиям. Вы можете переопределить все, нет представлений и т. Д. Значение по умолчанию не имеет значения, поскольку вы можете добавить свой собственный в mail(). – ayckoster

2

Ах, я думаю, что лучше теперь понимаю. В основном вы ищете простой однострочный шрифт, похожий на почту php(), правильно?

Если это так, ActionMailer не имеет для вас смысла, потому что это действительно не правильный инструмент для этой работы.

Я думаю, что победитель для вас является рубин драгоценный камень под названием Pony: https://github.com/benprew/pony

пример:

Pony.mail(:to => '[email protected]', :from => '[email protected]', :subject => 'hi', :body => 'Hello there.') 
+0

Я обнаружил, что ActionMailer вне Rails является исчерпывающим и немного громоздким в использовании. Я также использую Pony вне в моих проектах Ruby (но не Rails). – dimitarvp

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