Что ж, я не планировал расширять gdata-ruby-util gem :), но вот некоторый код, который можно использовать для API аудита Google на основе документации Google . Я только написал create_monitor_on
метод, но остальные довольно легко получить.
Дайте мне знать, если он работает или нуждается в каких-либо изменениях, и я обновлю его здесь:
class Audit < GData::Client::Base
attr_accessor :store_at
def initialize(options = {})
options[:clientlogin_service] ||= 'apps'
options[:authsub_scope] ||= 'https://apps-apis.google.com/a/feeds/compliance/audit/'
super(options)
end
def create_monitor_on(email_address)
user_name, domain_name = email_address.split('@')
entry = <<-EOF
<atom:entry xmlns:atom='http://www.w3.org/2005/Atom' xmlns:apps='http://schemas.google.com/apps/2006'>
<apps:property name='destUserName' value='#{@store_at}'/>
<apps:property name='beginDate' value=''/>
<apps:property name='endDate' value='2019-06-30 23:20'/>
<apps:property name='incomingEmailMonitorLevel' value='FULL_MESSAGE'/>
<apps:property name='outgoingEmailMonitorLevel' value='FULL_MESSAGE'/>
<apps:property name='draftMonitorLevel' value='FULL_MESSAGE'/>
<apps:property name='chatMonitorLevel' value='FULL_MESSAGE'/>
</atom:entry>
EOF
return true if post('https://apps-apis.google.com/a/feeds/compliance/audit/mail/monitor/'+domain_name+'/'+user_name, entry).status_code == 201
false
end
end
Затем используйте его в другом месте, как это:
auditor = Audit.new
auditor.store_at = 'this-username'
auditor.clientlogin(username, password)
render :success if auditor.create_monitor_on('email-address@my-domain.com')
Я предлагаю создать один основной адрес электронной почты, на который отправляются все мониторы электронной почты, чтобы входящие почтовые ящики ваших администраторов не забивались чужой почтой. Затем в своем приложении Rails используйте Net :: IMAP, чтобы загрузить нужные сообщения из этой основной учетной записи электронной почты. то есть, вы можете создать ссылку с надписью «Просмотр электронной почты Джо», и метод делает что-то вроде этого:
require 'net/imap'
imap = Net::IMAP.new('imap.gmail.com', 993, true)
imap.login('this-username@my-domain.com', password)
imap.select('INBOX')
messages = []
imap.search(["TO", "joe@email.com").each do |msg_id|
msg = imap.fetch(msg_id, "(UID RFC822.SIZE ENVELOPE BODY[TEXT])")[0]
body = msg.attr["BODY[TEXT]"]
env = imap.fetch(msg_id, "ENVELOPE")[0].attr["ENVELOPE"]
messages << {:subject => env.subject, :from => env.from[0].name, :body => body }
end
imap.logout
imap.disconnect
Затем вы можете поместить эти сообщения в ваше представление - или отправить их все в одном массовом электронном письме, или как вы хотите.