6

確認する必要のあるメールを作成するWatirを使用して自動化を行っています。私はこれを行う最も簡単な方法として電子メールの宝石を指摘されました。

次のコードを追加し、受信トレイから最初のメールを受け取ることができます。

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 

私はこのフォーラムに不慣れで、次の質問があります:

  1. 未読のメールをすべて受け取るにはどうすればよいですか?、、、を試しましたがMail.all、未読のメールは返されません。Mail.firstMail.last

  2. メール内にあるすべてのリンクを取得するにはどうすればよいですか?または、特定の電子メールからメッセージ本文をメールで送信しますか?最初の未読メールの本文を取得する必要があります。

  3. 受信トレイ内にサブフォルダーがある場合、特定のフォルダーから電子メールを取得するにはどうすればよいですか?

4

3 に答える 3

13

IMAP プロトコルのセクション6.4.4 は、メッセージの検索に使用できるさまざまな検索フラグを示しています。

次のように検索フラグを find メソッドに渡すことで、新しいメッセージのみを取得できます。

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

このメッセージは、Mail GitHub リポジトリの問題でも回答されています。

于 2013-07-19T17:53:39.357 に答える
1

いくつかのドキュメントを読んだようです。Mail.allは、既読メールを含むすべてのメールを返します。Mail.firstは、最初の未読を返します。それをもう一度行うと、次の未読が返されると思います。システムが制御されている場合は、未読の電子メールがそれほど多くないことを心配する必要はありません。もし私があなたなら、あなたがそれを理解するまでIRBで試してみます。おそらく、あなたにとって使いやすいクラスを構築することさえできます。幸運を。

更新:Mailgemのドキュメント。Mail.firstが未読の電子メールを(常に)返さない場合は、作成者が知っている必要があります。あなたは問題を提出することができます。私はその宝石を自分で使用しません。テストにはGmailの宝石を使用しています。

Mail.all    #=> Returns an array of all emails
Mail.first  #=> Returns the first unread email
Mail.last   #=> Returns the first unread email
于 2012-04-26T16:35:21.613 に答える
0

メールを読む時間を節約し、次にすべてのメールを読むときは、その日付以降のメールのみを処理するのはどうですか? 回避策であることは知っていますが、mail gem ではサポートされていないと思います。Mailman gem はそれをサポートしていますが、一度処理するとメールは削除されます。

于 2013-04-16T12:16:02.653 に答える