Вещи, написанные здесь, не помогли мне.
Я использую Rails 3.2.8, и я потратил несколько часов, пытаясь понять это, и в конце концов это было очень просто.Я забыл вызвать .deliver()
для объекта Mail::Message
, который возвращается при вызове метода mail(:to => @user.email, :subject => 'Welcome to the Site')
.
Просто оставьте все, как указано в официальном руководстве по RoR .
То есть в файлах среды разработки / производства создайте раздел, подобный следующему:
# mailer
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
user_name: '<username>@gmail.com',
password: '<password>',
authentication: 'plain',
enable_starttls_auto: true
}
И затем вы создадите подкласс ActionMailer :: Base, например, так:
class InfoMailer < ActionMailer::Base
default from: "<username>@gmail.com"
def welcome_user_and_send_password(user, password)
default_url_options = self.default_url_options()
@user = user
@password = password
@url = default_url_options[:host]
mail(:to => @user.email, :subject => 'Welcome to the Site').deliver()
end
end
После этого вы можете просто использовать этот InfoMailer
метод из вашего кода как метод класса:
InfoMailer.welcome_user_and_send_password(user, password)