Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Updating examples subtree

  • Loading branch information...
commit a26181aa64d1150e935bd52fe119a7866fa909ac 2 parents 5a3615b + d00659e
Roman Dzvinkovsky authored
15 examples/email_worker/README.md
View
@@ -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 examples/email_worker/email_config_sample.json
View
@@ -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 examples/email_worker/email_worker.rb
View
@@ -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 examples/email_worker/single_email_sender.rb
View
@@ -1,26 +0,0 @@
-require 'yaml'
-require 'iron_worker_ng'
-
-# loading config from config file
-config_data = YAML.load_file '../../ruby/_config.yml'
-#also you could just create iron.json config file in your home directory and don't load anything
-
-# Create an IronWorker client
-client = IronWorkerNG::Client.new(:token => config_data['iw']['token'], :project_id => config_data['iw']['project_id'])
-
-email = config_data['email']
-#general params
-params = {:username => email['username'],
- :password => email['password'],
- :domain => email['domain'],
- :provider => 'gmail'
-}
-#individual params
-params.merge!({
- :from => email['from'],
- :to => [email['to'],email['to']],
- :subject => 'sample',
- :content => 'HEY ITs a body'
- })
-#launching worker
-client.tasks.create("email_worker", params)
Please sign in to comment.
Something went wrong with that request. Please try again.