2016-10-25 3 views
2

v0.9 API를 사용하여 이메일을 처음부터 보내는 방법에 대한 간단한 예제가 있습니까?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 호환 인코딩 된 문자열을 원하지만, 위의되어야합니다. 에서 Gmail API 인터페이스 테스터 here 작품을 통해 기본 encded 문자열을 (MSG 위) 보내는 그들의

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. 

즉를 수행해도 문제가 해결되지 않는 ...

:

내가 해봤

.

분명히 API를 통해 작동하도록하는 데 필요한 객체를 만드는 방법에 대한 명백한 내용이 여기에 빠져 있습니다.

+1

정확히 작동하지 않는 것은 무엇입니까? 무슨 일이 일어나길 기대합니까, 실제로 일어나는 일은 무엇입니까? 어떤 예외가 있습니까? 어떤 정확한 코드를 실행할 때? 다른 사람들이 귀하의 문제를 해결할 수 있도록 돕는 Minimal, Complete, Verifiable 예제를 만드는 방법은 http://stackoverflow.com/help/mcve를 참조하십시오. –

+0

실마리는 방법의 이름에 있었다. 메시지 보내기는 메시지를 보내야합니다. Google의 oauth 프로세스에 대한 길고 도약 된 연습에 빠지지 않고 그 예가 내가 할 수있는 것처럼 분명합니다. Google의 루비 클라이언트 라이브러리에서 메소드를 사용하고 있습니다. Gmail API 용 클라이언트 라이브러리. Gmail은 이메일 서비스입니다. 이메일의 목적 중 하나는 양 당사자간에 전자 통신을 전송하는 것입니다. 위의 예는 두 당사자간에 전자 통신을 전송하려는 시도입니다. 내가 얼마나 더 명확하게 할 수 있었는지 잘 모르겠다. – Carpela

+0

무엇이 빠져있는 가라는 질문은 여전히 ​​정확히 작동하지 않는 것입니다. 코드를 실행하면 어떻게됩니까? 예외가 있습니까? 다른 어떤 행동? "그것이 효과가 없다"는 것을 어떻게 알 수 있습니까? 다른 사람들이 당신을 도울 수있는 좋은 질문을 작성하는 방법에 대해 위에 링크 된 기사를 참조하십시오. –

답변

4

확인. 그래서 대답은 ... 모든 도움을 주셔서 감사합니다 Holger ... 설명서가 잘못되었습니다. 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의 경우 Message.new에서 "raw"가 누락되었습니다. 올바른 코드는 다음과 같아야합니다.

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

당신은 절대적으로 옳습니다. 내 대답을 업데이트하겠습니다. – Carpela