2012-04-25 10 views
6

Ben kontrol etmek için gereken bir e-posta oluşturur Watir kullanarak otomasyon yapıyorum. E-posta geminde bunu yapmanın en kolay yolu olarak işaret ettim. ruby ​​içinde "mail" gem ile e-postaları okumak için yardıma ihtiyacınız var

Aşağıdaki kodu eklenmiş ve benim doğuştan gelen ilk e-posta almak mümkün.

require 'mail' 
require 'openssl' 

Mail.defaults do 
    retriever_method :pop3, :address => "email.someemail.com", 
          :port  => 995, 
          :user_name => 'domain/username', 
          :password => 'pwd', 
          :enable_ssl => true 
end 

puts Mail.first 

Aşağıdaki soruları bu foruma yeni ve var:

  1. nasıl okunmamış tüm e-postalar alabilirsiniz? Mail.all, Mail.first, Mail.last'u denedim, ancak okunmamış e-posta ile hiçbir şey dönmez.

  2. nasıl mevcut iç e-postalar tüm bağlantıları alabilirim? Veya belirli bir e-postadan posta mesajı gövdesi? İlk okunmamış e-postanın e-posta gövdesini almam gerekiyor.

  3. nasıl alabilirim belirli bir klasöre gelen e-postalar gelen kutuma içinde alt varsa?

+0

Watir'in sorunuzla alakası yok. Bunun nasıl çalıştığından emin değilim, ama doğru etiketleri seçmeyi denemeliyim. –

cevap

1

documentation'dan bazılarını okuduğunuz anlaşılıyor. Mail.all, e-postaları oku dahil olmak üzere tüm e-postaları döndürür. Mail.first, ilk okunmamış değerini döndürür. Bunu bir daha okumanın bir daha geri dönmeyeceğini düşünürdüm. Sisteminiz kontrol edilirse, çok sayıda okunmamış e-posta hakkında endişelenmenize gerek yok. Senin yerinde olsaydım, IRB'de bir tanıtıcıya ulaşana kadar bunu denerdim, belki de sizin için kullanımı kolaylaştıran bir sınıf inşa edebilirim. İyi şanslar.

Güncelleme: Posta gemisinden belgeler. Mail.first okunmamış bir e-posta (her zaman) döndürmezse, yazarın bilmesi gerekir. Bir sorun gönderebilirsin. O gemimi kendim kullanmıyorum. Test için bir gmail gem kullanıyorum.

Mail.all #=> Returns an array of all emails 
Mail.first #=> Returns the first unread email 
Mail.last #=> Returns the first unread email 
+0

hayır işe yaramadı. Mail.First ile – user1356838

+0

, her zaman gelen kutusunun ilk e-postasını geri alır. Posta kutusundan okunmamış ilk e-postayı asla geri almaz. – user1356838

+0

Ayrıca tüm okunmamış postaları da almak istiyorum. Ama bende aynı sorun var: 'Mail.all' tüm mailleri geri alır, 'Mail.first' ilkini (okunup okunmadığına bakılmaksızın). –

0

nasıl sadece daha sonra o tarihten bütün postaları süreç postaları okurken daha sonra bir dahaki sefere postaları okumak ve zaman tasarrufu hakkında? Bir geçici çözüm biliyorum ama posta gem ile desteklenmez inanıyorum. Mailman gem bunu destekliyor ancak işledikten sonra postaları siler.

13

Bölüm 6.4.4 of the IMAP protocol iletiler aramak için kullanabileceğiniz farklı arama bayrakları gösterir.

Öyle gibi bulmak yöntemine arama bayrakları ileterek yalnızca yeni iletileri alabilir:

new_messages = Mail.find(keys: ['NOT','SEEN']) 

Bu mesaj aynı zamanda bir issue on the Mail GitHub repo cevap edilmiştir.

İlgili konular