使用 ruby​​ 中的 gmail API 发送 HTML 电子邮件

ben*_*ben 1 ruby gmail ruby-on-rails

我正在创建一个 ruby​​ 脚本,它应该执行上述操作。在这一天里,我试图破解我将 HTML 电子邮件发送到选定数量的电子邮件地址的方法。没有关于我应该怎么做的明确文件,所以请我感谢你的帮助。

这是我的代码,脚本成功授权用户并选择代码访问他/她的 gmail 帐户。现在我想代表该用户发送 HTML 电子邮件。

require 'rubygems'
require 'google/api_client'
require 'launchy'

CLIENT_ID = 'my_app_Id_on_gmail_developers_console'
CLIENT_SECRET = 'the_secret_key'
OAUTH_SCOPE = 'https://mail.google.com/'
REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob'

# Create a new API client & load the Google Drive API
client = Google::APIClient.new(:application_name => 'Ruby Gmail sample',
                               :application_version => '1.0.0')
gmail = client.discovered_api('gmail', "v1")

# Request authorization
client.authorization.client_id = CLIENT_ID
client.authorization.client_secret = CLIENT_SECRET
client.authorization.scope = OAUTH_SCOPE
client.authorization.redirect_uri = REDIRECT_URI

uri = client.authorization.authorization_uri
Launchy.open(uri)

# Exchange authorization code for access token
$stdout.write  "Enter authorization code: "
client.authorization.code = gets.chomp
client.authorization.fetch_access_token!

#testing if it is working well by counting the emails.
@emails = client.execute(
    api_method: gmail.users.messages.list,
    parameters: {
        userId: "me"},
    headers: {'Content-Type' => 'application/json'}
)

count = @emails.data.messages.count
puts "you have #{count} emails "
# Pretty print the API result
jj @emails.data.messages
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?有没有办法可以将外部 html 文件作为要发送的电子邮件文件。那么我可以使用脚本发送这个文件吗?

Mic*_*jko 5

我部分接受上面的答案,因为您可以很容易地通过 STMP 发送电子邮件,但使用 gmail API 就更容易了。根据您的代码,它应该如下所示:

message              = Mail.new
message.date         = Time.now
message.subject      = 'Supertramp'
message.body         = "<p>Hi Alex, how's life?</p>"
message.content_type = 'text/html'
message.from         = "Michal Macejko <michal@macejko.sk>"
message.to           = 'supetramp@alex.com'

service = client.discovered_api('gmail', 'v1')

result = client.execute(
  api_method: service.users.messages.to_h['gmail.users.messages.send'],
  body_object: {
    raw: Base64.urlsafe_encode64(message.to_s)
  },
  parameters:  {
    userId: 'michal@macejko.sk'
  },
    headers:   { 'Content-Type' => 'application/json' }
)

response = JSON.parse(result.body)
Run Code Online (Sandbox Code Playgroud)

对于带有附件的多部分电子邮件:

message         = Mail.new
message.date    = Time.now
message.subject = 'Supertramp'
message.from    = "Michal Macejko <michal@macejko.sk>"
message.to      = 'supetramp@alex.com'

message.part content_type: 'multipart/alternative' do |part|
  part.html_part = Mail::Part.new(body: "<p>Hi Alex, how's life?</p>", content_type: 'text/html; charset=UTF-8')
  part.text_part = Mail::Part.new(body: "Hi Alex, how's life?")
end

open('http://google.com/image.jpg') do |file| 
  message.attachments['image.jpg'] = file.read 
end
Run Code Online (Sandbox Code Playgroud)