2011-01-25 44 views
37

Cách tốt nhất để thực hiện ActionMailer là gửi thư qua Amazon SES trong Rails 3 là gì?Sử dụng Amazon SES với Rails ActionMailer

Edit:

này bây giờ là một viên ngọc:

gem install amazon-ses-mailer 

https://rubygems.org/gems/amazon-ses-mailer

https://github.com/abronte/Amazon-SES-Mailer

+0

Trong trường hợp bất kỳ ai vẫn đang truy cập câu trả lời này, đá quý ở trên có các vấn đề xác minh chứng chỉ với SSL trong JRuby (có thể bên ngoài JRuby), có thể được khắc phục bằng cách sửa đổi đá quý như vậy: http://martinottenwaelter.fr/2010/12/ ruby19-and-the-ssl-error/ – laker

+2

tại sao "chính thức"? – lulalala

Trả lời

31

Tôi cũng có một viên ngọc ra rằng hỗ trợ gửi email thông qua SES từ Rails 3:

https://github.com/drewblas/aws-ses

Nó cũng có tất cả API để xác minh/quản lý địa chỉ e-mail

+0

Nó hiện không hoạt động. Tôi có ngoại lệ: SignatureDoesNotMatch – ka8725

+0

Tôi tạo ra một viên ngọc mới sử dụng Chữ ký V4. Đó là email giao dịch SES API cơ bản được tích hợp với đường ray. https://github.com/cickes/ses_api-rails – csi

-2

SES chỉ được phát hành vào beta ngày hôm nay, vì vậy tôi nghi ngờ rằng có một ready- đá quý to-go (ít nhất, không phải là tôi đã nhìn thấy). Bạn có thể viết mô-đun tùy chỉnh dựa trên tài liệu nhà phát triển của họ:

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/ 
+0

Tôi biết vẫn còn rất sớm để hỏi câu hỏi này. Điều chính là tôi muốn sử dụng các đường dẫn thư mã hóa MIME được tạo thông qua thư của nó. – AdamB

-3

Bạn có thể cung cấp phương thức gửi thư cho hành động trong môi trường của mình.

config.action_mailer.delivery_method = AmazonSES.deliver 

Hiện tại, bạn có thể tự viết mã phân phối.

9

Sau khi poking xung quanh một chút, tôi đã kết thúc chỉ cần làm một lớp đơn giản để làm điều này.

https://github.com/abronte/Amazon-SES-Mailer

Trong đường ray, bạn có thể nhận được thông báo email được mã hóa:

m = UserMailer.welcome.encoded 
AmazonSES.new.deliver(m) 
+0

Bắt đầu tốt, cảm ơn bạn đã nhảy vào cuộc xung đột! – jwarchol

+0

Rất tốt, cảm ơn! – jschorr

+0

Cảm ơn vì điều này. Đó là lạ gây ra trong vài lần đầu tiên tôi đã cố gắng này nó đã không mã hóa cơ thể đúng vì vậy nó đã gửi một email mà không có bất kỳ nội dung. Đối với một lý do không rõ khi tôi đã thử nó sau này nó đã làm việc. Bất kể, giải pháp này làm việc cho tôi, tốt để biết! Amazon SES là một lựa chọn mới rất hay để gửi email và nó cực kỳ rẻ. Tôi tin rằng nó có ít tính năng hơn ví dụ SendGrid, nhưng nếu bạn không đặc biệt cần chúng, điều này có vẻ giống như con đường để đi nếu bạn muốn một cái gì đó rất phải chăng. Và nó chỉ phát hành và chỉ có bản beta ngay bây giờ. :) –

77

Thiết lập Rails 3.2 để gửi email bằng dịch vụ Email đơn giản của Amazon (SES) thật dễ dàng. Bạn không cần bất kỳ đá quý bổ sung hoặc khỉ vá để làm cho nó hoạt động.

SES hỗ trợ cả STARTTLS qua SMTP cũng như TLS/SSL. Phần sau đây trình bày cách thiết lập Rails cho STARTTLS với SES.

Điều kiện tiên quyết

  1. Nếu bạn đang chạy đường ray Mac OS X, bạn có thể cần phải cấu hình OpenSSL cho Ruby một cách chính xác trước khi bạn có thể sử dụng STARTTLS. Nếu bạn đang sử dụng của Ruby 1.9.3 và RVM, đây là một cách để làm điều này:

    rvm pkg install openssl 
    rvm reinstall 1.9.3 --with-openssl-dir=$rvm_path/usr 
    

Nếu bạn không làm điều này, có một khả năng rằng Ruby sẽ segfault khi bạn cố gắng gửi e-mail.

  1. Đảm bảo bạn đã xác minh địa chỉ email người gửi của mình với AWS. Bạn chỉ có thể gửi email có địa chỉ email đã được xác minh là người gửi. Đi tới tùy chọn "Người gửi được xác minh" trên menu bên trái trong bảng điều khiển AWS cho SES.

  2. Đảm bảo bạn có tên người dùng và mật khẩu SMTP AWS để xác thực. Đi tới tùy chọn "Cài đặt SMTP" trên menu bên trái trong bảng điều khiển AWS cho SES để thiết lập điều này. Trước tiên, bạn sẽ được nhắc tạo một người dùng IAM (mặc định: người dùng smtp-ses) và sau đó bạn sẽ được hiển thị người dùng SMTP và mật khẩu, trông giống như khóa AWS thông thường và bí mật. Lưu ý rằng người dùng IAM, tức là người dùng có tài khoản smtp là không phải là người dùng SMTP mà bạn sẽ sử dụng để xác thực.

Cấu hình Rails

Trong config/môi trường/development.rb và config/môi trường/production.rb, thêm dòng sau:

config.action_mailer.delivery_method = :smtp 
    config.action_mailer.smtp_settings = { 
     :address => "email-smtp.us-east-1.amazonaws.com", 
     :port => 587, # Port 25 is throttled on AWS 
     :user_name => "...", # Your SMTP user here. 
     :password => "...", # Your SMTP password here. 
     :authentication => :login, 
     :enable_starttls_auto => true 
    } 

Gửi email

Đây là nó. Bây giờ bạn có thể tiếp tục và tạo một bưu phẩm và bắt đầu gửi email cho vui và lợi nhuận!

Tạo một mẫu bưu phẩm

rails g mailer user_mailer 

Trong ứng dụng/bưu phẩm/user_mailer.rb:

class UserMailer < ActionMailer::Base 
     # Make sure to set this to your verified sender! 
     default from: "[email protected]" 

     def test(email) 
     mail(:to => email, :subject => "Hello World!") 
     end 
    end 

Trong views/user_mailer/test.erb:

A quick brown fox jumped over the lazy dog. 

Bây giờ , khởi chạy bảng điều khiển và tắt email kiểm tra:

rails c 

    Loading development environment (Rails 3.2.1) 
    1.9.3p125 :001 > UserMailer.test("[email protected]").deliver 
+0

Điều này không hoạt động. –

+0

@AndrewHubbs, phần nào không hoạt động? –

+5

Cảm ơn rất nhiều! Nó hoạt động mà không có đá quý bổ sung! –

-1

sử dụng :sendmail, tôi quản lý để nhận tất cả email để gửi chạy apt-get install postfix làm gốc trên máy AWS của tôi và sử dụng tất cả các câu trả lời mặc định.

6

Đối với TLS thiết lập SSL [Được giới thiệu bởi Amazon SES]

Bạn không cần phải đá quý cho điều này.

smtp là cách defualt gửi email trong đường ray nhưng bạn có thể thêm dòng này để xác định một cách rõ ràng trong config/application.rb tập tin

config.action_mailer.delivery_method = :smtp 

Trong config/application.rb hoặc bạn có thể chỉ định trong môi trường nhất định nộp

config.action_mailer.smtp_settings = { 
    address: 'Amazon SES SMTP HOSTNAME', 
    port: 465, #TLS port 
    domain: 'example.com', 
    user_name: 'SMTP_USERNAME', 
    password: 'SMTP_PASSWORD', 
    authentication: 'plain', #you can also use login 
    ssl: true, #For TLS SSL connection 
} 

Các Amazon SES SMTP HOSTNAME là cụ thể cho mỗi khu vực, vì vậy bạn tên mà bạn đang ở, sau đây là tên miền máy chủ wrt.

  1. email-smtp.us-east-1.amazonaws.com (đối với khu vực chúng tôi đông-1)
  2. email smtp.us tây-2.amazonaws.com (đối với khu vực chúng tôi-tây-2)
  3. email-smtp.eu-west-1.amazonaws.com (đối với khu vực eu-tây-1)

StackOverFlow | Amazon-getting-started-send-using-smtp

0

Tôi đã tạo một gem Rails/SES API đơn giản sử dụng Chữ ký v4 để ký yêu cầu. Này được sử dụng tốt nhất cho email giao dịch như liên hệ với chúng tôi, đăng ký sử dụng vv

Rails SES API integration gem

Xin vui lòng để cải thiện nó & đóng góp.

1

tôi sử dụng viên ngọc sau:

https://github.com/aws/aws-sdk-rails

Nó kéo trong tiêu chuẩn aws-sdk, cộng với phép thiết ActionMailer sử dụng AWS SES. Ví dụ:

# config/production.rb 
# ... 
config.action_mailer.delivery_method  = :aws_sdk 
1

Cấu hình ứng dụng Rails của bạn với Amazon SES

bộ action_mailer.perform_deliveries true vì nó được thiết lập để sai theo mặc định trong môi trường phát triển/sản xuất

config.action_mailer.perform_deliveries = true 

sau đó dán này mã trong môi trường phát triển/sản xuất của bạn

config.action_mailer.smtp_settings = { 
    :address => ENV["SES_SMTP_ADDRESS"], 
    :port => 587, 
    :user_name => ENV["SES_SMTP_USERNAME"], 
    :password => ENV["SES_SMTP_PASSWORD"], 
    :authentication => :login, 
    :enable_starttls_auto => true 
} 
Các vấn đề liên quan