2014-09-23 8 views
1

Я создаю ruby-скрипт, и он должен сделать выше. В течение дня я пытался взломать способ отправить HTML-адрес электронной почты на выбранное количество адресов электронной почты. Нет четкой документации о том, как я должен это делать, поэтому, пожалуйста, я буду благодарен вам за помощь.Отправка HTML-письма с использованием gmail API в ruby ​​

Вот мой код. Сценарий успешно авторизует пользователя и выбирает код для доступа к его/ее учетной записи gmail. Теперь я хочу отправить письмо электронной почты от имени этого пользователя.

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 

как я могу это сделать? есть способ, которым я могу использовать внешний файл html, который является отправным файлом электронной почты. то я могу отправить этот файл с помощью скрипта?

ответ

2

Только мой вход. Я смог создать скрипт, который отправил html по электронной почте нескольким пользователям примерно в 100 строках. Без использования api. Вам нужно изучить smtp. Это очень просто. Вы определяете сервер для его использования, а затем используете его метод send_message. Вот ссылка на хороший сайт! GOOD SITE

Я не могу отправить весь свой код здесь по соображениям безопасности, однако это поможет вам начать

class Email_Client 

attr_accessor :message_contents, :subject 

    def initialize(sender_name, receiver_name, sender_email, receiver_email) 
    @sender_name = sender_name 
    @receiver_name = receiver_name 
    @sender_email = sender_email 
    @receiver_email = receiver_email 
    end 

    def send_html 

message = <<MESSAGE 
From: #{@sender_name} <#{@sender_email}> 
To: #{@receiver_name} <#{@receiver_email}> 
MIME-Version: 1.0 
Content-type: text/html 
Subject: #{subject} 

#{message_contents} 

MESSAGE 

     Net::SMTP.start('SeRvEr_HeRe') do |smtp| 
     smtp.send_message message, 
     @sender_email, 
     @receiver_email 
     end 

end 
3

Я частично принимаю ответ выше, так как вы можете отправить по электронной почте через 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 <[email protected]>" 
message.to   = '[email protected]' 

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: '[email protected]' 
    }, 
    headers: { 'Content-Type' => 'application/json' } 
) 

response = JSON.parse(result.body) 

Для несколько частей электронной почты с приложением:

message   = Mail.new 
message.date = Time.now 
message.subject = 'Supertramp' 
message.from = "Michal Macejko <[email protected]>" 
message.to  = '[email protected]' 

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