2011-02-23 18 views
5

GMail hesabıyla posta gönderen bir mailerim var ve bu ActionMailer uygulamasının verdiğim kimlik bilgileriyle GMail'in SMTP sunucusunda oturum açabileceğini test etmek istiyorum. Bunu test etmenin en iyi yolu nedir?Rails mailler kimlik bilgilerinin geçerli olduğunu nasıl test ediyorsunuz?

+0

Neyi test etmeye çalışıyorsunuz? Kimlik bilgileriniz doğru mu, yoksa ActionMailer aslında çalışıyor mu? –

+0

Kimlik bilgileri doğru. ActionMailer'in çalıştığına inanıyorum. Sadece bir şifreyi manuel olarak değiştirirsem ancak kodumu güncellemeyi unutursam testlerimin onu yakalamasını istiyorum. – XZVASFD

cevap

9

Tam yığın bir çözüm değildir, ancak doğrudan doğruya Net :: SMTP kullanarak sunucu kimlik doğrulamasının doğru olup olmadığını kontrol edebilirsiniz. ActionMailer e-postalar göndermek 3 kullanımlarını Raylar Posta mücevher (sizin ActionMailer.smtp_settings birlikte) şöyle Mail kullanıyor:

#line 96 of mail-2.2.7/lib/mail/network/delivery_methods/smtp.rb 
    smtp = Net::SMTP.new(settings[:address], settings[:port]) 
    if settings[:enable_starttls_auto] 
    smtp.enable_starttls_auto if smtp.respond_to?(:enable_starttls_auto) 
    end 

    smtp.start(settings[:domain], settings[:user_name], settings[:password], 
    settings[:authentication]) do |smtp| 
    smtp.sendmail(message, envelope_from, destinations) 
    # @Mason: this line need not be included in your code. SMTP#start throws 
    # a Net::SMTPAuthenticationError if the authentication was not successful. 
    # So just putting this call to #start with an empty block in a method and 
    # calling assert_no_raise Net::SMTPAuthenticationError should do the trick. 
    # The empty block is necessary so that the connection gets closed. 
    # Reference #{rubydir}/lib/ruby/1.8/net/smtp.rb for more info. 
    end 

ActionMailer benziyor :: Base.smtp_settings erişilebilir çok geçerli:

settings = ActionMailer::Base.smtp_settings 

koymak Sizin testinizde ve yukarıda bahsedilen hatların yorumlanmasında sizin için bir çalışma örneği olmalıdır.

+0

harika. Teşekkürler Tim ve denemek ve kabul etmek için bu kadar uzun süre için üzgünüm! – XZVASFD

5
smtp = Net::SMTP.new settings[:address], settings[:port] 
smtp.enable_starttls_auto if settings[:enable_starttls_auto] 
smtp.start(settings[:domain]) do 
    expect { 
    smtp.authenticate settings[:user_name], settings[:password], settings[:authentication] 
    }.to_not raise_error 
end 

kimlik doğrulama başarısız olursa bir Net::SMTPAuthenticationError yükseltecektir authenticate çağrılıyor.

Aksi takdirde, Net::SMTP::Response döndürülecek ve yanıt için status numaralı çağrı "235" döndürecektir.

+0

Kendi testimde bildiğim kadarıyla, kimlik doğrulama başarısız olduğunda "kimlik doğrulaması" hata vermez. Yanlış bir parola verilirse, şu iletiyi '.string 'içinde döndürür, örneğin:' 535 Kimlik doğrulama başarısız oldu: Hatalı kullanıcı adı/parola '. – theGreenCabbage

İlgili konular