2011-01-05 20 views
6

Rails uygulamasında environments/ dosyasında aşağıdaki parametreleri içeren yeni bir hazırlama ortamı oluşturdum:Farklı ortamlarda e-postaların günlüğe kaydedilmesi ve gönderilmesi

config.action_mailer.perform_deliveries = true 
config.action_mailer.raise_delivery_errors = true 
config.action_mailer.delivery_method = :smtp 

Ancak, sistem bir e-posta oluşturduğunda, gönderilmek yerine staging.log dosyasına yazdırılır. SMTP ayarlarım diğer ortamlarda düzgün çalışıyor. E-postaların gerçekten gönderilmesini sağlamak için hangi yapılandırmayı kaçırıyorum?

Düzenleme: Evet, hazırlama kutusu, erişimi olan bir SMTP sunucusu için geçerli bir yapılandırma ile ayarlanır. Sorun SMTP ayarlarında değil gibi görünüyor (eğer öyleyse, günlüklerde hatalar alamaz mıyım?), Ancak Rails yapılandırmasıyla. Uygulama hala SMTP'den geçmenin aksine, e-postaları günlük dosyasına yönlendiriyor ("Gönderilen posta: ...").

Düzenleme # 2: Gerçekte doğru bir şekilde gönderilen e-postalar gibi görünüyor, sadece günlüğüne de yazıyorlar. Postayı başka bir adrese yönlendirmek için sanitize_email gemini kullanmaya çalışıyorum ve bu işe yaramıyor gibi görünüyor, bu yüzden e-postaların dışarı çıkmadığını düşündüm. Bu yüzden, bu problemi çözdüğümü düşünüyorum, ancak ActionMailer'ın ayarlarında hangi e-postaların gönderilip gönderilmediğini, günlük dosyasına mı yoksa her ikisine mi girdiğini hala merak ediyorum.

Düzenleme # 3:sanitize_email ile ilgili sorun, ActionMailer::Base.local_environments'ye yeni aşamalandırma ortamını eklemem için bana kaynatıldı. Bu soruyu herkesin son soruma cevap verip veremeyeceğini açıklayacağım (ActionMailer'in e-postalarının gönderilip gönderilmeyeceğini, günlük dosyasına veya her ikisine birden mi geçtiğini belirler)

+1

Hazırlama kutunuzda çalışan bir SMTP sunucusu var mı? – jdl

+0

localhost, port 25 ve bazı etki alanlarıyla config.action_mailer.smtp_settings'i ayarladınız mı? – marko

cevap

10

Üçüncü düzenlemeye ilişkin olarak günlük kaydı bir işlevdir. Uygulamanın kendisi için ayarladığınız günlük düzeyinin, ActionMailer'daki herhangi bir ayarın değil.

Rails 2.3, ActionMailer::Base'da, e-postayı, varsa herhangi bir logger yapılandırıldığına göndermeniz yeterlidir. Alıcı, info günlüğüne gönderilir ve e-postanın gövdesi, debug günlüğüne gönderilir. (Yorumlar benim. Gerisi düz kaynak kodunun dışındadır.)

def deliver!(mail = @mail) 
    raise "no mail object available for delivery!" unless mail 

    # 
    # Logging happens first (or not) 
    # 
    unless logger.nil? 
    logger.info "Sent mail to #{Array(recipients).join(', ')}" 
    logger.debug "\n#{mail.encoded}" 
    end 

    # 
    # And then we decide if an email should really get sent 
    # 
    begin 
    __send__("perform_delivery_#{delivery_method}", mail) if perform_deliveries 
    rescue Exception => e # Net::SMTP errors or sendmail pipe errors 
    raise e if raise_delivery_errors 
    end 

    return mail 
end 

Sizin environment.rb veya staging.rb dosya kayıt düzeyini kontrol eden bir çizgi olmalıdır. Aşağıdaki gibi bir şey:

config.log_level = :debug 

Bu, tüm e-posta gönderildi olup olmadığını kontrol eder zaten bulunan postacı yapılandırması, tamamen ayrıdır.

config.action_mailer.perform_deliveries = true 
+0

Teşekkürler, mükemmel cevap! Bu temizler. – jrdioko

İlgili konular