2016-10-25 6 views
2

Есть ли у кого-нибудь простой пример того, как отправить электронное письмо с нуля с помощью API v0.9.Отправка сообщения электронной почты с ruby ​​gmail api v0.9

просто хотите пример отправки следующее:

m = Mail.new(
to: "[email protected]", 
from: "[email protected]", 
subject: "Test Subject", 
body:"Test Body") 

Теперь для создания этого объекта сообщения, которое требуется для отправки, мы можем использовать:

msg = Base64.urlsafe_encode64 m.to_s 

А затем попытаться отправить (где message_object = msg):

client = Google::Apis::GmailV1::GmailService.new #Appropriately authorised 
client.send_user_message("me", message_object) 

Клиент хочет закодированную в RFC822 кодированную строку, который должен быть указан выше.

Я пробовал:

message_object = msg 
=> Google::Apis::ClientError: invalidArgument: 'raw' RFC822 payload message string or uploading message via /upload/* URL required 
message_object = raw:msg 
=>ArgumentError: unknown keyword: raw 
message_object = {raw:msg} 
=>ArgumentError: unknown keyword: raw 
message_object = Google::Apis::GmailV1::Message.new(raw:msg) 
=> #<Google::Apis::GmailV1::Message:0x007f9158e5b4b0 @id="15800cd7178d69a4", @thread_id="15800cd7178d69a4"> 
#But then I get Bounce <[email protected]> - An error occurred. Your message was not sent. 

т.е. ни один из них не работает ...

Отправка основной encded строку (МВП выше) через Gmail API интерфейс тестера here работ.

Очевидно, что я не вижу здесь ничего очевидного, как построить этот объект, необходимый для его работы через API.

+1

Что именно не работает? Что вы ожидаете, что на самом деле происходит? Какие исключения вы получаете? При запуске какого точного кода? См. Http://stackoverflow.com/help/mcve о том, как создать минимальный, полный и проверенный пример, который помогает другим решить ваши проблемы. –

+0

Ключ был во имя метода. Отправить сообщение должно отправить сообщение. Не вдаваясь в очень длинное и затянутое пошаговое руководство процесса oauth Google, этот пример примерно так же ясен, как я могу это сделать. Я использую метод из рубиновой клиентской библиотеки Google. Клиентская библиотека для API Gmail. Gmail - это почтовый сервис Одна из целей электронной почты - отправить и электронное сообщение между двумя сторонами. Приведенный выше пример представляет собой попытку отправить электронное сообщение между двумя сторонами. Действительно не уверен, насколько яснее я мог бы быть ... – Carpela

+0

Что не хватает в вашем вопросе, все равно, что именно не работает. Что происходит, когда вы запускаете код? Вы получаете исключение? Любое другое поведение? Откуда вы знаете, что «это не работает»? Пожалуйста, обратитесь к статье, о которой я говорил выше, о том, как написать хороший вопрос, который позволяет другим вам помочь. –

ответ

4

Хорошо. Итак, ответ ... спасибо за вашу помощь Хольгер ... Было ли это ошибкой в ​​документации. Он просит вас кодировать base64. Кодировка base64 не требуется (она выполняется внутри клиента api).

Правильный способ отправить это

msg = m.encoded 
# or m.to_s 
# this doesn't base64 encode. It just turns the Mail::Message object into an appropriate string. 

message_object = Google::Apis::GmailV1::Message.new(raw:m.to_s) 
client.send_user_message("me", message_object) 

Надежда, что спасает кого-то из того покровительствовал переусердствовать мод.

1

Ответ Carpela работает нормально, но для message_object отсутствует сообщение «raw» в Message.new. Правильный код должен быть следующим:

message_object = Google::Apis::GmailV1::Message.new(raw: m.encoded) # or m.to_s 
client.send_user_message('me', message_object) 
+0

Ты абсолютно прав. Я обновлю свой ответ – Carpela