15

今日は頭が悪いだけかもしれませんが、Ruby の net/imap ライブラリでメールを読む方法が突然わかりません。私は何時間もそれに取り組んできました。「ruby imap read body」のいくつかのバリエーションをグーグルに入力し、多くのサイトを探索しました。それらのすべてに、添付ファイルのプル、電子メール サーバーの同期、gmail の操作などの例があります。一部 (chilkat など) は、実際にこれを行うシェアウェア ライブラリです。私は net/imap のドキュメントを見てきましたが、本文を読む以外のすべてを行う例がいくつかあります。

以前に net/imap を使用したことがありますが、受信トレイ内の添付ファイルをディレクトリにプルダウンするだけで済みました。私は #ruby と #rubyonrails で尋ねましたが無駄でした - 誰もそれを理解できませんでした。


imap=Net::IMAP.new('mail.xks.com') #of course these are not real
imap.login('web1_xk3','pxx2006')
imap.select('INBOX')
imap.search(["SENTSINCE",(Time.now-1.day).strftime("%d-%b-%Y")]).each do |msgid|
     body = imap.fetch(msgid,"BODY")[0].attr["BODY"]
     ##insert code for getting the text from the body here
     ##body.class is BodyTypeText 
end

PSコードでアクティブなサポートについて言及していますが、これはsans-railsであるため、アクションメーラーはありません

4

3 に答える 3

26

@Bjerの答えに便乗して、mailgemとgmail_xoauthgemを使用してOAuth2を使用してgmailにログインし、すべてのメールを解析する完全なソリューションを次に示します。

imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false)
imap.authenticate('XOAUTH2', 'example@gmail.com', 'access_token_goes_here')
imap.select('INBOX')
imap.search(['ALL']).each do |message_id|

    msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822']
    mail = Mail.read_from_string msg

    puts mail.subject
    puts mail.text_part.body.to_s
    puts mail.html_part.body.to_s

end
于 2012-10-11T23:10:30.983 に答える
23

メッセージの本文コンテンツだけが必要な場合は、次を使用できます。

body = imap.fetch(message_id,'BODY[TEXT]')[0].attr['BODY[TEXT]']

ただし、IMAP API は少し難解です。メッセージ全体を処理したい場合は、TMailを使用して、使いやすい形式に解析することをお勧めします。

msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822']
mail = TMail::Mail.parse(msg)
body = mail.body
于 2009-07-09T02:01:42.290 に答える
7

または、Ruby 1.9.x を使用している場合、TMail に問題があるようです。
メールを使用しています ( https://github.com/micel/mail )

body = imap.fetch(message_id,'BODY[TEXT]')[0].attr['BODY[TEXT]']
msg = imap.fetch(-1,'RFC822')[0].attr['RFC822']
mail = Mail.read_from_string msg

body = mail.body
from = mail.from 
于 2012-05-26T08:52:25.370 に答える