2009-03-09 40 views
6

Tôi đang sử dụng tài khoản Gmail Apps for Domain để gửi email trong ứng dụng đường ray cho email tự động chuẩn (đăng ký người dùng, quên mật khẩu, thông báo cho quản trị viên về nhận xét mới, v.v), nhưng tôi lo lắng về 500 email mỗi ngày giới hạn do Google đặt.Tôi làm cách nào để làm việc với/xung quanh các giới hạn gửi đi SMTP của Gmail?

Google đề xuất một cách để vượt qua giới hạn là sử dụng nhiều tài khoản người dùng.

Vì vậy, tôi đã thiết lập 10 tài khoản người dùng gmail bổ sung (noreply1, noreply2, noreply3, v.v.) - Tôi muốn theo dõi khi bất kỳ tài khoản nào trong số này gửi 500 email trong khoảng thời gian 24 giờ và sử dụng tài khoản không hoạt động cho phù hợp.

Làm cách nào để tự động đặt giá trị :user_name trong ActionMailer::Base.smtp_settings?

Đây là thiết lập hiện tại của tôi - Chú ý: đây gửi từ "noreply1" mọi thời gian, mặc dù tôi đang thiết lập một cách rõ ràng: user_name và: từ để "noreply2":

--- development.rb --- 
    ActionMailer::Base.delivery_method = :smtp 
    ActionMailer::Base.smtp_settings = { 
     :address => "smtp.gmail.com", 
     :port => "587", 
     :domain => "mydomain.com", 
     :authentication => :plain, 
      :user_name => "[email protected]", 
     :password => "password" 
    } 

--- account.rb --- (MODEL, called via a callback) 
after_create :send_welcome_email 
... 
def send_welcome_email 
    #ActionMailer::Base.smtp_settings[:user_name] = '[email protected]' 
    ActionMailer::Base.smtp_settings.merge!({:user_name => "[email protected]"}) 
    SubscriptionNotifier.deliver_welcome(self) 
end 

--- subscription_notifier.rb --- (MODEL) 
class SubscriptionNotifier < ActionMailer::Base 
    def welcome(account)  
    @sent_on = Time.now 
    @subject = "Welcome to the App" 
    @recipients = account.email 
    @from = "[email protected]" 
    @body = { :account => account } 
    end 
end 
+0

Tôi nghĩ ý tưởng của workmad3 về việc thay đổi ActionMailer :: Base.smtp_settings băm là đúng hướng, tôi không thể tìm ra cách để có được đường ray tải lại giá trị của hàm băm bằng khóa động: user_name. –

+0

Bạn đang sử dụng phiên bản Rails nào? Thay đổi ActionMailer :: Base.smtp_settings [: user_name] động trong một hành động điều khiển hoạt động cho tôi trong 2.3.2. (Ít nhất, băm thay đổi. Tôi không thử gửi thư.) –

+0

đó là điều kỳ lạ - giá trị khóa băm thay đổi, nhưng email được gửi bằng cách sử dụng bản gốc: user_name trong tệp development.rb của tôi –

Trả lời

9

Bạn cũng có thể thiết lập MTA trên máy chủ và sử dụng MTA để gửi thư.

Đó là những gì chúng tôi làm.

Bạn phải thêm IP máy chủ của mình làm địa chỉ IP hợp lệ để gửi email trong bản ghi SPF của tên miền để tránh bị đánh dấu là spam.

Một lợi ích khác của việc này là nếu bạn thực hiện việc này, bạn có thể đặt địa chỉ Từ: của email là một trong những người dùng của bạn mà bạn không thể thực hiện với Gmail.

+0

Khi ai đó trả lời email được bạn gửi đi có địa chỉ "từ" được đăng ký trong Gmail, bạn không gặp phải bất kỳ sự cố spam nào từ Google? – pbz

+0

Hmm ... Tôi chưa gặp bất kỳ vấn đề nào với nó. Chúng tôi đã đăng ký Google Apps for Your Domain làm máy chủ thư của chúng tôi trong SPF và sau đó cũng đã đăng ký địa chỉ IP khác (máy chủ của chúng tôi) với tư cách người gửi hợp lệ. –

+0

Có thể biết thêm chi tiết về cách thực hiện việc này. – Deekor

3

Store tên người dùng có sẵn trong một bảng trong cơ sở dữ liệu, cùng với 'sửa đổi lần cuối', 'đặt lại lần cuối' và số được gửi. Sau đó, bạn có thể truy vấn điều này khi gửi email để tìm địa chỉ email ít được sử dụng nhất hiện tại. Sau đó tăng số lượng đã gửi và tài khoản được sửa đổi lần cuối. Giá trị 'đặt lại lần cuối' có thể được sử dụng cho mã dọn dẹp của bạn để bạn đặt lại số lượng mỗi khoảng thời gian 24 giờ. Điều này cũng giúp bạn dễ dàng thêm tài khoản email mới, gỡ bỏ tài khoản bạn không sử dụng nữa, triển khai trong một ứng dụng khác, v.v. vì tất cả chỉ nằm trong bảng cơ sở dữ liệu mà bạn có thể thay đổi khi được yêu cầu.

+1

Âm thanh như một plugin đường ray tốt nếu bạn viết điều đó! –

+0

cảm ơn, kỹ thuật rất hữu ích để theo dõi các tài khoản email, nhưng tôi đã đặc biệt tìm kiếm mã để đặt phần tử user_name trong một băm cấu hình smtp ray thông thường. –

+0

Rất tiếc, đã không đọc câu hỏi đúng cách. Tôi sẽ thêm một phản ứng thứ hai với những gì tôi nghĩ rằng sẽ làm việc cho vấn đề thực tế :) @ kyle: Tôi có thể làm điều đó sau đó ... nó có vẻ khá trực quan với tôi rất ngạc nhiên không có sẵn một cái gì đó dọc theo những dòng – workmad3

2

Bạn sẽ có thể thiết lập: yếu tố user_name trong băm trong bưu phẩm trong thời trang tương tự như trong cấu hình, cụ thể là bằng cách làm:

ActionMailer::Base.smtp_settings[:user_name] = 'new_user_name' 

Mặc dù điều này có thể đòi hỏi một số mã thêm để buộc một tải lại bất kỳ cấu hình mailer hành động nội bộ nào (không tự mình kiểm tra)

+0

cuối cùng tôi đã có xung quanh để thử nghiệm này, nhưng tôi không thể làm cho nó hoạt động. thiết lập ActionMailer :: Base.smtp_settings [: user_name] = 'new_user_name' trong một phương thức điều khiển không ảnh hưởng gì đến hàm băm. bất kỳ ý tưởng làm thế nào để tải lại băm? –

0

Hộp nhận xét đã trở nên quá hạn chế đối với các câu hỏi của tôi. Thay đổi hàm băm ActionMailer::Base.smtp_settings hoạt động như mong đợi đối với tôi, vì vậy tôi nghi ngờ có một số yếu tố khác ở đây. Một số điều cần thử:

  1. Bạn đang sử dụng plugin TLS? Tôi đã sử dụng action_mailer_optional_tls với Rails 2.3.2 và Ruby 1.8.6.
  2. Điều gì đang được ghi vào nhật ký/bảng điều khiển?
  3. Bạn đang thay đổi tên người dùng nhưng không phải là mật khẩu: tất cả các tài khoản noreply có cùng mật khẩu không?

Edit: nhiều điều để thử

tôi muốn có một cái nhìn tốt ở đó tập tin smtp_tls.rb đề cập trong các ý kiến ​​để đảm bảo không có gì là mã hóa cứng. Hoặc xóa nó và thử plugin tôi đã liên kết ở trên. Để sử dụng nó, bạn chỉ cần thêm :tls => true vào hàm băm smtp_settings.

+0

1. Tôi đang sử dụng một smtp_tls.rb trong thư mục lib của tôi, nhưng tôi thành thật không nhớ nơi tôi đã nhận nếu từ, nhưng nó sẽ gửi thư với gmail tốt. Tôi sẽ thử action_mailer_optional_tls - yes, Rails 2.3.2, Ruby 1.86 patch lvl 111 2.console là email đăng nhập được gửi từ noreply1 3.Có, tất cả các mật khẩu đều giống nhau –

+0

bạn có sử dụng mã tương tự cho tôi không? ai đó đã gợi ý "nạp lại" băm, nhưng tôi không biết làm thế nào để làm điều đó. bạn có đặt giá trị trực tiếp hoặc sử dụng hợp nhất không! –

+0

Mã giống hệt nhau. Tôi đã thử đặt giá trị cũng như hợp nhất !, và cả hai đều đã hoạt động. Bạn không cần phải "tải lại" hàm băm: ActionMailer sử dụng cùng một hàm băm smtp_settings mà bạn cung cấp - không có bộ đệm trong. –

Các vấn đề liên quan