Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
61 additions
and
108 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" |
This file was deleted.
Oops, something went wrong.