Skip to content

Commit

Permalink
Updating examples subtree
Browse files Browse the repository at this point in the history
  • Loading branch information
Roman Dzvinkovsky committed Dec 15, 2012
2 parents 5a3615b + d00659e commit a26181a
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 108 deletions.
15 changes: 7 additions & 8 deletions examples/email_worker/README.md
@@ -1,13 +1,12 @@
# email_worker
# email_worker example

This is simple example how to send email using IronWorker
Command line tool reference could be found here - http://dev.iron.io/worker/reference/cli/

## Getting started

- Edit _config.yml (iw and email sections)
- Upload the worker by running 'iron_worker upload email_worker' in this directory
- run 'single_email_sender.rb'
1. Be sure you've setup your Iron.io credentials, see main [README.md](https://github.com/iron-io/iron_worker_examples).
2. Copy `email_config_sample.json` to `email_config.json` and edit it to set your credentials.
3. Run `iron_worker upload email_worker` to upload worker.
4. Run `iron_worker queue email_worker --payload-file email_config.json`
5. Look at [HUD](https://hud.iron.io) to view your tasks running, check logs, etc.

That's it, now you should receive email.

Read the code in this directory to learn more about what happened.
26 changes: 26 additions & 0 deletions examples/email_worker/email_config_sample.json
@@ -0,0 +1,26 @@
{
"smtp": {
"user_name": "you@gmail.com",
"password": "secret",
"enable_starttls_auto": true,
"authentication": "plain",
"address": "smtp.gmail.com",
"port": 587
// "address": "smtp.sendgrid.net",
// "port": 25
},

// uncomment and edit to put email details on iron_cache
// "iron": {
// "token": "Et1E98729890283837Fu34L3234",
// "project_id": "523412343249345435342349"
// },

// uncomment and edit to send email detail via http api
// "endpoint": "www.myservice.com/api/email_sent",

"from": "you@gmail.com",
"to": "you@gmail.com",
"subject": "hello from IronWorker",
"body": "hello me"
}
102 changes: 28 additions & 74 deletions examples/email_worker/email_worker.rb
@@ -1,87 +1,41 @@
# Configures smtp settings to send email.
def init_mail(username, password, domain, provider)
puts "initializing provider"
case provider
when 'gmail'
puts "Selected gmail as a provider"
port = 587
address = "smtp.gmail.com"
when 'sendgrid'
puts "Selected sendgrid as a provider"
port = 25
address = "smtp.sendgrid.net"
end
puts "Preparing mail configuration"
mail_conf = {:address => address,
:port => port,
:domain => domain, #custom domain
:user_name => username,
:password => password,
:authentication => 'plain',
:enable_starttls_auto => true} #gmail require this option
Mail.defaults do
delivery_method :smtp, mail_conf
end
puts "Mail service configured"
require 'mail'
require 'rest'
require 'iron_cache'

# 'params' name is used in Mail widely
pars = JSON.parse(payload, symbolize_names: true)

# Configure smtp settings to send email.
Mail.defaults do
delivery_method :smtp, pars[:smtp]
end

def send_mail(to, from, subject, content)
puts "Preparing email from:#{from},to:#{to},subject#{subject}"
[pars[:to]].flatten.each do |to|
msg = Mail.new do
to to
from from
subject subject
html_part do |m|
content_type 'text/html'
body content
end
from pars[:from]
subject pars[:subject]
body pars[:body]
end
puts "Mail ready, delivering"
details = msg.deliver
puts "Mail delivered!"
details
end

def update_message_status(email, message_details)
puts "Updating user status via API endpoint"
puts "Email:#{email},details:#{message_details.inspect}"
puts "email:#{to}, details:#{details.to_s}"

#here is the example how you could send email details from this worker to your api
require 'rest'
puts "initializing client"
web_client = Rest::Client.new # res gem already merged
puts "sending api request"
#just change google.com on your api endpoint
web_client.get('http://google.com', {:email => email, :message_details => message_details})

# or put email details in iron_cache
if params['iw_token'] && params['iw_project_id']
puts "Initializing cache"
require 'iron_cache'
cache = IronCache::Client.new(:token => params['iw_token'], :project_id => params['iw_project_id'])
puts "Sending message details to cache"
cache.items.put(email, {:timestamp => Time.now, :message_details => message_details.inspect}.to_json)
if pars[:endpoint]
# here is the example how you could send email details from this worker to your api
puts "initializing client"
web_client = Rest::Client.new
puts "sending api request"
web_client.get(pars[:endpoint], email: to, details: details.to_s)
end

end

# Sample worker that sends an email.
puts "Worker started"

require 'mail'

init_mail(params['username'], params['password'], params['domain'], params['provider'])


if params['to'].is_a? Array # check what is passed one email or array of emails
puts "Array of #{params['to'].count} emails passed"
params['to'].each do |email|
message_details = send_mail(email, params['from'], params['subject'], params['content'])
update_message_status(email, message_details)
# or put email details in iron_cache
if pars[:iron]
puts "initializing cache"
cache = IronCache::Client.new(pars[:iron])
puts "sending message details to cache"
cache.items.put(to, details.to_s)
end
else
message_details = send_mail(params['to'], params['from'], params['subject'], params['content'])
update_message_status(email, message_details)
end

puts "Worker finished"
puts "worker finished"
26 changes: 0 additions & 26 deletions examples/email_worker/single_email_sender.rb

This file was deleted.

0 comments on commit a26181a

Please sign in to comment.