在 ruby 中使用 google-api-client gem 将文件附加到电子邮件
Attaching files to emails with google-api-client gem in ruby
感谢 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')
邮件被退回。
附加文件的正确方法是什么?
事实证明这比我预期的要容易。这是一个例子:
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
我会等待进一步的回复,也许有些事情我没有考虑到。
感谢 google-api-client
gem:
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')
邮件被退回。
附加文件的正确方法是什么?
事实证明这比我预期的要容易。这是一个例子:
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
我会等待进一步的回复,也许有些事情我没有考虑到。