Използвам gmail gem за изпращане на имейли и трябва да проследя тези имейли.
Опитвам да потърся имейла с message_id, но той въвежда всички имейли от входящата ми поща и искам само отговорите на конкретен имейл.
Ето моят действителен код:
* запазване на имейла със съобщението за съобщение *
mail = gmail.deliver(email)
Email.create(:message_id => mail.message_id, :from => user.email,
:to => annotation.to, :body => annotation.content, :title => annotation.title,
:annotation => annotation, :user => user)
* търсене в имейлите с message_id *
messages = gmail.inbox.mails(:message_id => email.message_id)
За разбирането,
Ferrício Ferrari de Campos
Отговори:
3 за отговор № 1можеш да вземеш Net :: IMAP поглед.
uid = gmail.conn.uid_search(["HEADER", "Message-ID", "<324820.440351247482145930.JavaMail.coremail@bj163app31.163.com>"])[0]
#=> 103
message = Gmail::Message.new(gmail.inbox, uid)
#=> #<Gmail::Message0x12a72e798 mailbox=INBOX uid=103>
message.subject
#=> "hello world"
message.message_id
#=> "<324820.440351247482145930.JavaMail.coremail@bj163app31.163.com>"
не са намерили метод може да търсите по message_id.via по този начин можете да получите конкретен имейл.
3 за отговор № 2
Използването на стандартния gmail gem изглежда доста добре
messages = gmail.inbox.mails(:query => ["HEADER", "Message-ID", email.message_id])
0 за отговор № 3
Успях да използвам това този Gmail Gem (не съм сигурен дали това е същият камък, който използвате).
Заглавката ID на съобщението е част от генерирания имейл обект. След това се използва за търсене rfc822msgid
(описано в Помощна страница за разширено търсене в Gmail).
Ето един пример:
def gmail_connect
Gmail.connect(email_address, password)
end
def send_email
gmail = gmail_connect
email = gmail.compose do
to recipient@mail.internet
subject "Hello"
content_type "text/html; charset=utf-8"
body "Hello, World"
end
gmail.deliver(email)
gmail.logout
email.message_id
end
def verify_sent_email(id)
gmail = gmail_connect
found = gmail.mailbox("sent").find(rfc822msgid: id).count
gmail.logout
( found > 0 ) ? true : false
end
id = send_email
verify_sent_email(id)