2010-08-02 50 views
15

Tôi đang cố gắng tạo một ứng dụng, sẽ gửi email khi người dùng đăng ký.Người gửi thư không gửi thư, có đường ray 3

tôi đặt trong các thiết lập smtp cho gmail trong config/tập tin application.rb và các chức năng thư trông giống như

mail(:to => "[email protected]", :subject => "Mail!", :from => "[email protected]", :content_type => "text/html") 

bây giờ khi tôi thấy các bản ghi, tôi thấy rằng nó nói email đã được gửi đi, nhưng tôi không bao giờ nhận được bất kỳ thư nào ...

Ngoài ra, khi tôi gọi chức năng gửi thư, Emails.signed(@user).deliver, trang biểu mẫu không chuyển hướng, nhưng nó hoạt động nếu tôi nhận xét mã gửi email là

Emails.signed(@user).deliver 

hoặc

mail(:to => "[email protected]", :subject => "Mail!", :from => "[email protected]", :content_type => "text/html") 

Cảm ơn :)

Edit: development.rb

App::Application.configure do 
    # Settings specified here will take precedence over those in config/environment.rb 

    # In the development environment your application's code is reloaded on 
    # every request. This slows down response time but is perfect for development 
    # since you don't have to restart the webserver when you make code changes. 
    config.cache_classes = false 

    # Log error messages when you accidentally call methods on nil. 
    config.whiny_nils = true 

    # Show full error reports and disable caching 
    config.consider_all_requests_local  = true 
    config.action_view.debug_rjs    = true 
    config.action_controller.perform_caching = false 

    # Don't care if the mailer can't send 
    config.action_mailer.raise_delivery_errors = true 
    config.action_mailer.perform_deliveries = true 

    # Print deprecation notices to the Rails logger 
    config.active_support.deprecation = :log 

end 
+0

Bạn đang cố gắng gửi nó vào quá trình phát triển? hãy dán tệp 'development.rb' hoặc' production.rb'. – jpemberthy

+0

Tôi đang ở chế độ phát triển ... tôi đã thêm development.rb – Amit

+0

Vui lòng kiểm tra bài đăng sau và cho chúng tôi biết nếu bạn tiếp tục gặp sự cố. http://asciicasts.com/episodes/206-action-mailer-in-rails-3 Nó sẽ hoạt động nếu bạn đã thiết lập đúng cài đặt gmail smtp của mình. – jpemberthy

Trả lời

35

Hơi muộn, tuy nhiên có lẽ điều này sẽ tiết kiệm cho ai đó một vài giờ đầu đập. Điều này có thể chỉ liên quan đến việc gửi email từ gmail. Thứ nhất, nhằm giúp gỡ rối tình hình, thiết lập các dòng sau trong development.rb true (giả sử bạn đang ở chế độ phát triển):

config.action_mailer.raise_delivery_errors = true 

Điều này sẽ làm ActionMailer không để âm thầm bỏ qua lỗi. Khi tôi làm điều đó, tôi nhận ra rằng gmail đang từ chối tên người dùng và mật khẩu của tôi. Tôi sau đó đã đi đến tập tin cấu hình của tôi, nơi tôi đặt tất cả các chỉ thị cấu hình Action Mailer (đối với tôi nó đã được development.rb, có lẽ là một nơi tốt hơn để đặt nó), và nhận thấy rằng: user_name được thiết lập để "admin" chứ không phải hơn "[email protected]". Thay đổi nó đã giải quyết được vấn đề. Đây là một phần của tôi điều chỉnh của development.rb:

config.action_mailer.delivery_method = :smtp 
    config.action_mailer.smtp_settings = { 
    :address    => "smtp.gmail.com", 
    :port     => 587, 
    :domain    => 'thedomain.com', 
    :user_name   => '[email protected]', 
    :password    => '<password>', 
    :authentication  => 'plain', 
    :enable_starttls_auto => true } 

Tài liệu tham khảo:

http://forums.pragprog.com/forums/43/topics/541 http://edgeguides.rubyonrails.org/action_mailer_basics.html

7

Một điều không quên: bạn phải khởi động lại ứng dụng sau khi thực hiện những thay đổi trong các tập tin cấu hình môi trường của bạn . khi sử dụng hành khách này có thể nhanh chóng thể bỏ qua :)

đó là những gì giải quyết của tôi "vấn đề" khi ActionMailer didnt muốn gửi email mà không hiển thị bất kỳ lỗi nào ..

+0

Tôi cảm thấy như một kẻ ngốc khi nhận ra rằng tôi đã không khởi động lại máy chủ của mình. Nó hoạt động hoàn hảo sau khi tôi khởi động lại máy chủ của mình. Tuy nhiên, tệp nhật ký của tôi đã tạo nhật ký có cùng thông tin chính xác trước và sau khi tôi chỉnh sửa mã khiến tôi cho rằng nó đã nhận ra các thay đổi của tôi. Tôi tin rằng điều này là do tôi cần phải khởi động lại máy chủ trước khi thực sự bắt đầu tăng lỗi gửi, đó là thay đổi của tôi đối với tệp cấu hình. Vì vậy, nếu bạn đã nói với nó để bắt đầu tăng lỗi giao hàng nhưng chưa khởi động lại vấn đề sẽ không được hiển thị cho đến khi bạn khởi động lại máy chủ. – Matt

6

Những điều viết ở đây không giúp tôi.

Tôi đang sử dụng Rails 3.2.8 và tôi đã dành vài giờ để tìm hiểu điều này và cuối cùng nó rất đơn giản. Tôi đã quên gọi .deliver() trên đối tượng Mail::Message được trả về bằng cách gọi số mail(:to => @user.email, :subject => 'Welcome to the Site').

Chỉ cần để mọi thứ như được chỉ định trong official RoR tutorial.

Đó là, trong sự phát triển/files môi trường sản xuất của bạn, làm cho một phần như:

# 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 
    } 

Và sau đó bạn phân lớp ActionMailer :: Base, ví dụ như thế này:

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 

Sau đó , bạn có thể chỉ cần sử dụng phương thức InfoMailer này từ mã của mình như một phương thức lớp học:

InfoMailer.welcome_user_and_send_password(user, password) 
0

Nếu bạn đang sử dụng môi trường thử nghiệm, hãy đảm bảo nhận xét dòng mã này trong môi trường/test.rb:

config.action_mailer.delivery_method = :test 
Các vấn đề liên quan