Amazon Simple Email Service (Amazon SES) is an extremely flexible and cost-effective service for sending and receiving email. Amazon SES eliminates the complexity and cost of building an internal email solution or licensing, installing and operating a third-party email solution.
1. Introduction to Amazon SES.
Amazon Simple Email Service (Amazon SES) is a cloud-based email service designed to help digital marketing professionals and application developers send email marketing, notifications and deals. This is a reliable, cost-effective service for businesses of all sizes to use email to stay in touch with their customers.
You can use the SMTP interface or one of the AWS SDKs to integrate Amazon SES directly into your existing applications. You can also integrate the email delivery feature of Amazon SES into the site you are using.
2. Config and use.
- Go to the service ses page of amazon. And look for Simple email service.
- Click Email Address and verify email 2 emails to send and receive. Note to use the correct email because amazon will send an email to confirm.
Add config
Here I use aws-sdk. gem_file
1 2 | gem <span class="token string">"aws-sdk"</span> <span class="token punctuation">,</span> <span class="token string">"~> 3"</span> |
create config / initalizes / amazon_aws.rb
1 2 3 4 5 6 7 8 | <span class="token keyword">require</span> <span class="token string">"aws-sdk"</span> <span class="token constant">Aws</span> <span class="token punctuation">.</span> config <span class="token punctuation">.</span> <span class="token function">update</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> credentials <span class="token punctuation">:</span> <span class="token constant">Aws</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token constant">Credentials</span> <span class="token punctuation">.</span> <span class="token keyword">new</span> <span class="token punctuation">(</span> <span class="token constant">ENV</span> <span class="token punctuation">[</span> <span class="token string">'AWS_ACCESS_KEY_ID'</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token constant">ENV</span> <span class="token punctuation">[</span> <span class="token string">'AWS_SECRET_ACCESS_KEY'</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> |
In the previous post I have instructions for creating an IAM user, Now I just need to go to that group_ad user and add AmazonSESFullAccess permission for that group. create config / initalizes / amazon_ses.rb
1 2 3 4 5 6 7 | <span class="token keyword">require</span> <span class="token string">"aws-sdk"</span> <span class="token constant">AMAZON_SES</span> <span class="token operator">=</span> <span class="token constant">Aws</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token constant">SES</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token constant">Client</span> <span class="token punctuation">.</span> <span class="token keyword">new</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> region <span class="token punctuation">:</span> <span class="token constant">Settings</span> <span class="token punctuation">.</span> aws <span class="token punctuation">.</span> ses <span class="token punctuation">.</span> region <span class="token punctuation">,</span> raise_response_errors <span class="token punctuation">:</span> <span class="token keyword">true</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> |
setting.yml
1 2 3 4 5 | aws: ses: region: "ap-south-1" sender_name: "NamDV" |
Next is the email section.
In application_mailer I will define some methods to send email using amazon service.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <span class="token keyword">class</span> <span class="token class-name">ApplicationMailer</span> <span class="token operator"><</span> <span class="token constant">ActionMailer</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token constant">Base</span> after_action <span class="token symbol">:amazon_send_email</span> default from <span class="token punctuation">:</span> <span class="token string">" <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> "</span> layout <span class="token string">"mailer"</span> <span class="token keyword">private</span> <span class="token keyword">def</span> amazon_send_email mail <span class="token punctuation">.</span> perform_deliveries <span class="token operator">=</span> <span class="token keyword">false</span> ses_params <span class="token operator">=</span> <span class="token punctuation">{</span> destination <span class="token punctuation">:</span> <span class="token punctuation">{</span> to_addresses <span class="token punctuation">:</span> mail <span class="token punctuation">.</span> to_addrs <span class="token punctuation">}</span> <span class="token punctuation">,</span> message <span class="token punctuation">:</span> <span class="token punctuation">{</span> body <span class="token punctuation">:</span> <span class="token function">body_type</span> <span class="token punctuation">(</span> mail <span class="token punctuation">.</span> mime_type <span class="token punctuation">,</span> mail <span class="token punctuation">.</span> body <span class="token punctuation">.</span> raw_source <span class="token punctuation">,</span> mail <span class="token punctuation">.</span> charset <span class="token punctuation">)</span> <span class="token punctuation">,</span> subject <span class="token punctuation">:</span> <span class="token punctuation">{</span> charset <span class="token punctuation">:</span> mail <span class="token punctuation">.</span> charset <span class="token punctuation">,</span> data <span class="token punctuation">:</span> mail <span class="token punctuation">.</span> subject <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> source <span class="token punctuation">:</span> <span class="token string">"< <span class="token interpolation"><span class="token delimiter tag">#{</span> mail <span class="token punctuation">.</span> from <span class="token punctuation">.</span> join <span class="token delimiter tag">}</span></span> >"</span> <span class="token punctuation">}</span> <span class="token keyword">begin</span> ses_response <span class="token operator">=</span> <span class="token constant">AMAZON_SES</span> <span class="token punctuation">.</span> send_email ses_params p <span class="token string">"FINISHED"</span> <span class="token keyword">rescue</span> <span class="token constant">StandardError</span> <span class="token operator">=</span> <span class="token operator">></span> e p <span class="token string">"FAILED: <span class="token interpolation"><span class="token delimiter tag">#{</span> e <span class="token punctuation">.</span> message <span class="token delimiter tag">}</span></span> "</span> <span class="token keyword">end</span> <span class="token keyword">end</span> <span class="token keyword">def</span> body_type mime_type <span class="token punctuation">,</span> body <span class="token punctuation">,</span> mail_charset type <span class="token operator">=</span> mime_type <span class="token operator">==</span> <span class="token string">"text/plain"</span> <span class="token operator">?</span> <span class="token symbol">:text</span> <span class="token punctuation">:</span> <span class="token symbol">:html</span> <span class="token punctuation">{</span> type <span class="token operator">=</span> <span class="token operator">></span> <span class="token punctuation">{</span> charset <span class="token punctuation">:</span> mail_charset <span class="token punctuation">,</span> data <span class="token punctuation">:</span> body <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">end</span> <span class="token keyword">end</span> |
Create UserMailer
1 2 3 4 5 6 7 8 9 | <span class="token keyword">class</span> <span class="token class-name">UserMailer</span> <span class="token operator"><</span> <span class="token constant">ApplicationMailer</span> <span class="token keyword">def</span> send_mail_demo email <span class="token function">mail</span> <span class="token punctuation">(</span> to <span class="token punctuation">:</span> email <span class="token punctuation">,</span> subject <span class="token punctuation">:</span> <span class="token string">"Amazon Simple Email Service"</span> <span class="token punctuation">)</span> <span class="token keyword">do</span> <span class="token operator">|</span> format <span class="token operator">|</span> format <span class="token punctuation">.</span> text <span class="token keyword">end</span> <span class="token keyword">end</span> <span class="token keyword">end</span> |
send_mail_demo.text.erb
1 2 3 4 | <span class="token constant">Amazon</span> <span class="token constant">Simple</span> <span class="token constant">Email</span> <span class="token constant">Service</span> <span class="token punctuation">(</span> <span class="token constant">Amazon</span> <span class="token constant">SES</span> <span class="token punctuation">)</span> is a cloud <span class="token operator">-</span> based email sending service designed to help digital marketers <span class="token keyword">and</span> application developers send marketing <span class="token punctuation">,</span> notification <span class="token punctuation">,</span> <span class="token keyword">and</span> transactional emails <span class="token punctuation">.</span> <span class="token constant">It</span> is a reliable <span class="token punctuation">,</span> cost <span class="token operator">-</span> effective service <span class="token keyword">for</span> businesses of all sizes that use email to keep <span class="token keyword">in</span> contact with their customers <span class="token punctuation">.</span> <span class="token constant">You</span> can use our <span class="token constant">SMTP</span> interface <span class="token class-name">or</span> one of the <span class="token constant">AWS</span> <span class="token constant">SDKs</span> to integrate <span class="token constant">Amazon</span> <span class="token constant">SES</span> directly into your existing applications <span class="token punctuation">.</span> <span class="token constant">You</span> can also integrate the email sending capabilities of <span class="token constant">Amazon</span> <span class="token constant">SES</span> into the software you already use <span class="token punctuation">,</span> such as ticketing systems <span class="token keyword">and</span> email clients <span class="token punctuation">.</span> |
Test send email
I will send to the verified address above.
1 2 | <span class="token constant">UserMailer</span> <span class="token punctuation">.</span> <span class="token function">send_mail_demo</span> <span class="token punctuation">(</span> <span class="token string">" <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> "</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> deliver_now |
and email received
You can refer to some other methods of aws sdk ses here
Source code github