2009-12-21 8 views
8

Tôi đã học cách sử dụng Rails trong vài ngày qua và tôi đã gặp phải điều gì đó mà tôi chưa thể giải quyết được với Google.Rails ActionMailer vấn đề trên máy Mac

Vì vậy, tôi chỉ đang tạo biểu mẫu liên hệ cơ bản gửi email. Mọi thứ dường như hoạt động tốt trong thử nghiệm, cho tôi biết rằng biểu mẫu đang hoạt động và ActionMailer đã được triển khai chính xác, tuy nhiên, tôi đang gặp sự cố khi định cấu hình ActionMailer. Tôi đang chạy OSX 10.6.2. Tôi đã chạy postfix và đã xác minh rằng nó đang chạy bằng cách sử dụng telnet localhost 25. Khi tôi cố gắng sử dụng biểu mẫu, tôi nhận được lỗi "Kết nối bị từ chối".

Đây là cấu hình hiện tại của tôi:

config.action_mailer.smtp_settings = { 
    :address => 'localhost', 
    :port  => 25 
} 

tôi nghĩ rằng tôi có thể cần phải thiết lập :domain nhưng tôi loại bối rối về những gì cần được thiết lập để trong tình huống này.

Trả lời

6

Cuộc sống của tôi đã chạy gần 100 lần dễ dàng hơn: sendmail trên mac của tôi như một phương thức phân phối trên mac của tôi thay vì: smtp, bạn có thể muốn thử chụp ảnh đó. Trong câu trả lời này, tôi giả định rằng bạn chỉ muốn gửi thư trên máy Mac của bạn và không thực sự quan tâm nó hoạt động như thế nào.

Điều khác tôi làm, nếu tôi sẽ được kết nối với mạng mọi lúc trên một dự án, là định cấu hình thư có nguồn gốc ActionMailer gửi đi của tôi để đi qua gmail thay vì mac cục bộ của tôi.

 
ActionMailer::Base.delivery_method = :smtp 

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

Đây là tên miền tùy chỉnh được gọi là example.com được thiết lập trên ứng dụng google cho tên miền. Bạn cũng có thể tạo tài khoản gmail và gửi mọi thứ qua đó. (Bằng cách thay đổi tất cả các trường hợp example.com thành gmail.com)

0

Tính năng này có hoạt động nếu bạn thay thế '127.0.0.1' cho 'localhost' để xem đây có phải là sự cố IPv4 so với IPv6 hay sự cố với trình giải quyết của bạn không?

+0

Hm, không điều đó không hoạt động. – seth

+0

Nếu đầu ra của "netstat -na | grep LISTEN" hiển thị "tcp4 0 0 * .25 *. * LISTEN" thì bạn sẽ nhận được kết nối. Nếu nó hiển thị ":: 1.25", bạn có thể đang ở chế độ IPv6. Nếu bạn có bất kỳ loại tường lửa cục bộ nào, kể cả Little Snitch, điều này cũng có thể chặn cuộc gọi của bạn. Cách duy nhất để biết chắc chắn là cố gắng kết nối trực tiếp từ Ruby, chẳng hạn như thông qua thử nghiệm đơn vị. – tadman

6

Bạn cần khởi động trình tiện ích postfix. bạn có thể biết cổng của mình có đang mở hay không bằng cách nhập vào thiết bị đầu cuối

telnet localhost 25 

sẽ cố gắng kết nối với cổng 25. Nó sẽ không kết nối nếu postfix isnt chạy, nếu có, nhấn ctl-] để ngừng kết nối và 'quit' để thoát khỏi telnet.

Nếu nó không kết nối, bạn cần phải khởi chạy trình nền postfix:

sudo launchctl start org.postfix.master 

và sau đó cố gắng kết nối với telnet. nó sẽ kết nối. Bây giờ bạn đã sẵn sàng gửi email từ lớp ActionMailer của bạn.

sudo launchctl stop org.postfix.master 

dừng daemon postfix

1

Tôi đi theo this guide và mọi thứ hoạt động một cách chính xác. Chủ yếu:

sudo postfix start 

sau đó

config.action_mailer.delivery_method = :smtp 
config.action_mailer.smtp_settings = { 
    :address => "localhost", 
    :port => 25 
} 
0

Một cách tuyệt vời của việc gửi và kiểm tra mail khi phát triển đang sử dụng enter link description here.

Trích từ trang web của họ:

MailCatcher chạy một máy chủ SMTP siêu đơn giản mà bắt bất kỳ tin nhắn gửi đến nó để hiển thị trong một giao diện web. Chạy trình quản lý thư, đặt ứng dụng yêu thích của bạn để phân phối tới smtp://localhost:1025 thay vì máy chủ SMTP mặc định của bạn, sau đó kiểm tra http://localhost:1080 để xem thư được gửi đến thời điểm này.

Nó chặn thư cho tất cả người nhận và do đó giúp bạn dễ dàng kiểm tra tất cả thư ở một nơi.