2010-12-03 56 views
2

所以我遵循指南 - 步骤1 - 2.1.3。行动梅勒+设计好玩一起

我无法让系统发送电子邮件。这一切都在我的开发环境中。

在我的用户控制,我编辑的创建行动看起来像这样:

def create 
    @user = User.new(params[:user]) 

    respond_to do |format| 
     if @user.save 
     UserMailer.welcome_email(@user).deliver 

     format.html { redirect_to(@user, :notice => 'User was successfully created.') } 
     format.xml { render :xml => @user, :status => :created, :location => @user } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @user.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

的user_mailer.rb文件看起来是这样的:

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

    def welcome_email(user) 
    @user = user 
    @url = "http://localhost.com:3000/users/login" 
    mail(:to => user.email, :subject => "Welcome to MySite") 
    end 

end 

我的/配置/初始化/色器件。 RB文件看起来像这样:

Devise.setup do |config| 
    config.mailer_sender = "[email protected]" 

    # Configure the class responsible to send e-mails. 
    # config.mailer = "Devise::Mailer" 

    # ==> ORM configuration 
    # Load and configure the ORM. Supports :active_record (default) and 
    # :mongoid (bson_ext recommended) by default. Other ORMs may be 
    # available as additional gems. 
    require 'devise/orm/active_record' 

    # ==> Configuration for any authentication mechanism 
    # Configure which keys are used when authenticating an user. By default is 
    # just :email. You can configure it to use [:username, :subdomain], so for 
    # authenticating an user, both parameters are required. Remember that those 
    # parameters are used only when authenticating and not when retrieving from 
    # session. If you need permissions, you should implement that in a before filter. 
    config.authentication_keys = [ :username ] 

    # Tell if authentication through request.params is enabled. True by default. 
    # config.params_authenticatable = true 

    # Tell if authentication through HTTP Basic Auth is enabled. True by default. 
    # config.http_authenticatable = true 

    # Set this to true to use Basic Auth for AJAX requests. True by default. 
    # config.http_authenticatable_on_xhr = true 

    # The realm used in Http Basic Authentication 
    # config.http_authentication_realm = "Application" 

    # ==> Configuration for :database_authenticatable 
    # For bcrypt, this is the cost for hashing the password and defaults to 10. If 
    # using other encryptors, it sets how many times you want the password re-encrypted. 
    config.stretches = 10 

    # Define which will be the encryption algorithm. Devise also supports encryptors 
    # from others authentication tools as :clearance_sha1, :authlogic_sha512 (then 
    # you should set stretches above to 20 for default behavior) and :restful_authentication_sha1 
    # (then you should set stretches to 10, and copy REST_AUTH_SITE_KEY to pepper) 
    config.encryptor = :bcrypt 

    # Setup a pepper to generate the encrypted password. 
    config.pepper = "o27yo2oeb$2h2oiuhoiuKJH#KJ#[email protected]@JHLKJLSKHGKJAgdskajgdkuyagdau" 

    # ==> Configuration for :confirmable 
    # The time you want to give your user to confirm his account. During this time 
    # he will be able to access your application without confirming. Default is nil. 
    # When confirm_within is zero, the user won't be able to sign in without confirming. 
    # You can use this to let your user access some features of your application 
    # without confirming the account, but blocking it after a certain period 
    # (ie 2 days). 
    # config.confirm_within = 2.days 

    # ==> Configuration for :rememberable 
    # The time the user will be remembered without asking for credentials again. 
    # config.remember_for = 2.weeks 

    # If true, a valid remember token can be re-used between multiple browsers. 
    # config.remember_across_browsers = true 

    # If true, extends the user's remember period when remembered via cookie. 
    # config.extend_remember_period = false 

    # ==> Configuration for :validatable 
    # Range for password length 
    # config.password_length = 6..20 

    # Regex to use to validate the email address 
    # config.email_regexp = /^([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})$/i 

    # ==> Configuration for :timeoutable 
    # The time you want to timeout the user session without activity. After this 
    # time the user will be asked for credentials again. 
    # config.timeout_in = 10.minutes 

    # ==> Configuration for :lockable 
    # Defines which strategy will be used to lock an account. 
    # :failed_attempts = Locks an account after a number of failed attempts to sign in. 
    # :none   = No lock strategy. You should handle locking by yourself. 
    # config.lock_strategy = :failed_attempts 

    # Defines which strategy will be used to unlock an account. 
    # :email = Sends an unlock link to the user email 
    # :time = Re-enables login after a certain amount of time (see :unlock_in below) 
    # :both = Enables both strategies 
    # :none = No unlock strategy. You should handle unlocking by yourself. 
    # config.unlock_strategy = :both 

    # Number of authentication tries before locking an account if lock_strategy 
    # is failed attempts. 
    # config.maximum_attempts = 20 

    # Time interval to unlock the account if :time is enabled as unlock_strategy. 
    # config.unlock_in = 1.hour 

    # ==> Configuration for :token_authenticatable 
    # Defines name of the authentication token params key 
    # config.token_authentication_key = :auth_token 

    # ==> Scopes configuration 
    # Turn scoped views on. Before rendering "sessions/new", it will first check for 
    # "users/sessions/new". It's turned off by default because it's slower if you 
    # are using only default views. 
    # config.scoped_views = true 

    # Configure the default scope given to Warden. By default it's the first 
    # devise role declared in your routes. 
    # config.default_scope = :user 

    # Configure sign_out behavior. 
    # By default sign_out is scoped (i.e. /users/sign_out affects only :user scope). 
    # In case of sign_out_all_scopes set to true any logout action will sign out all active scopes. 
    # config.sign_out_all_scopes = false 

    # ==> Navigation configuration 
    # Lists the formats that should be treated as navigational. Formats like 
    # :html, should redirect to the sign in page when the user does not have 
    # access, but formats like :xml or :json, should return 401. 
    # If you have any extra navigational formats, like :iphone or :mobile, you 
    # should add them to the navigational formats lists. Default is [:html] 
    # config.navigational_formats = [:html, :iphone] 

    # ==> Warden configuration 
    # If you want to use other strategies, that are not (yet) supported by Devise, 
    # you can configure them inside the config.warden block. The example below 
    # allows you to setup OAuth, using http://github.com/roman/warden_oauth 
    # 
    # config.warden do |manager| 
    # manager.oauth(:twitter) do |twitter| 
    #  twitter.consumer_secret = <YOUR CONSUMER SECRET> 
    #  twitter.consumer_key = <YOUR CONSUMER KEY> 
    #  twitter.options :site => 'http://twitter.com' 
    # end 
    # manager.default_strategies(:scope => :user).unshift :twitter_oauth 
    # end 
end 

我的应用程序控制器:

class ApplicationController < ActionController::Base 
    helper :all 
    protect_from_forgery 
    before_filter :set_current_user 

    protected 

    def set_current_user 
    Authorization.current_user = current_user 
    end 

end 

当我注册一个新用户(btw,我已经注释掉config_action.mailer_raise.delivery行)时输出日志。

Started GET "https://stackoverflow.com/users/register" for 127.0.0.1 at 2010-12-03 11:53:12 -0500 
    Processing by Devise::RegistrationsController#new as HTML 
Rendered devise/shared/_links.erb (1.5ms) 
Rendered devise/registrations/new.html.erb within layouts/application (18.4ms) 
Completed 200 OK in 55ms (Views: 26.5ms | ActiveRecord: 0.0ms) 


Started POST "/users" for 127.0.0.1 at 2010-12-03 11:53:58 -0500 
    Processing by Devise::RegistrationsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"VPBCmkVSBXzyIXZf4Y3XUo1lHagxWXrBAfbtuO2Hi0M=", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"} 
    User Load (0.2ms) SELECT "users"."id" FROM "users" WHERE (LOWER("users"."email") = LOWER('[email protected]')) LIMIT 1 
    SQL (0.4ms) INSERT INTO "users" ("created_at", "current_sign_in_at", "current_sign_in_ip", "email", "encrypted_password", "last_sign_in_at", "last_sign_in_ip", "password_salt", "remember_created_at", "remember_token", "reset_password_token", "sign_in_count", "updated_at", "username") VALUES ('2010-12-03 16:53:58.280017', NULL, NULL, '[email protected]', '$2a$10$nBvgG4dRFX2tRBtHrU9P7OTPAUjT4Zb0JhpEP4v5lzPIjOp40Lcoy', NULL, NULL, '$2a$10$nBvgG4dRFX2tRBtHrU9P7O', NULL, NULL, NULL, NULL, '2010-12-03 16:53:58.280017', NULL) 
    SQL (0.4ms) UPDATE "users" SET "current_sign_in_at" = '2010-12-03 16:53:58.297987', "current_sign_in_ip" = '127.0.0.1', "last_sign_in_at" = '2010-12-03 16:53:58.297987', "last_sign_in_ip" = '127.0.0.1', "sign_in_count" = 1, "updated_at" = '2010-12-03 16:53:58.298381' WHERE ("users"."id" = 4) 
Redirected to http://localhost:3000/ 
Completed 302 Found in 224ms 


Started GET "/" for 127.0.0.1 at 2010-12-03 11:53:58 -0500 
    Processing by HomeController#index as HTML 
    User Load (0.9ms) SELECT "users".* FROM "users" WHERE ("users"."id" = 4) LIMIT 1 
    Role Load (0.2ms) SELECT "roles".* FROM "roles" INNER JOIN "assignments" ON "roles".id = "assignments".role_id WHERE (("assignments".user_id = 4)) 
    Project Load (0.2ms) SELECT * FROM "projects" INNER JOIN "projects_users" ON "projects".id = "projects_users".project_id WHERE ("projects_users".user_id = 4) 
Rendered home/index.html.erb within layouts/application (74.0ms) 
Completed 200 OK in 226ms (Views: 81.4ms | ActiveRecord: 1.4ms) 

当我注册一个新用户时,它创建用户并允许我登录 - 但我从来没有在我的收件箱中收到电子邮件。

帮助!

回答

6

尝试在配置/环境/ development.rb加上几行:

config.action_mailer.perform_deliveries = true 
    config.action_mailer.delivery_method = :sendmail #:smtp 
+0

感谢,它的工作! – oyatek 2013-05-04 04:47:22