由于google-api-client
gem,我设法通过Google API发送电子邮件:
def send_message(from:, to:, subject:, body:)
message = RMail::Message.new
message.header['From'] = from
message.header['To'] = to
message.header['Subject'] = subject
message.body = body
@service.send_user_message(
'me',
upload_source: StringIO.new(message.to_s),
content_type: 'message/rfc822'
)
end
现在我试图将文件附加到电子邮件中,但我找不到如何操作的示例。 gem的存储库中的example included并不能解释这种情况。我已经开始进行逆向工程,但经过几乎一整天的尝试,我开始做疯狂的事情。
我的最后一次尝试如下:
upload = Google::Apis::Core::UploadIO.new('/path/to/image.png', 'image/png', 'image.png')
file_part = Google::Apis::Core::FilePart.new(nil, upload)
message_object = Google::Apis::GmailV1::Message.new(payload: file_part, raw: 'this is a test body')
service.send_user_message('me', message_object, content_type: 'message/rfc822')
电子邮件被退回。
附加文件的正确方法是什么?
答案 0 :(得分:1)
事实证明它比我预期的要容易。这是一个例子:
class Client
def initialize(service)
@service = service
end
def send_message(from:, to:, subject:, body:)
message = RMail::Message.new
message.header.set('From', from)
message.header.set('To', to)
message.header.set('Subject', subject)
message.body = [text_part(body), file_part]
@service.send_user_message(
'me',
upload_source: StringIO.new(message.to_s),
content_type: 'message/rfc822'
)
end
private
def text_part(body)
part = RMail::Message.new
part.body = body
part
end
def file_part
part = RMail::Message.new
part.header.set('Content-Disposition', 'attachment', 'filename' => File.basename('/path/to/image.png'))
part.body = File.read('/path/to/image.png')
part
end
end
我会等待进一步的回复,也许我没有考虑到这一点。