Amazon Simple Email Service (Amazon SES) là một dịch vụ có quy mô cực kỳ linh hoạt và tiết kiệm chi phí dùng để gửi và nhận email. Amazon SES loại bỏ sự phức tạp cũng như chi phí của việc xây dựng một giải pháp email nội bộ hoặc việc cấp phép, cài đặt và vận hành một giải pháp email của bên thứ ba.
1. Giới thiệu về Amazon SES.
Amazon Simple Email Service (Amazon SES) là dịch vụ gửi email trên nền tảng đám mây được thiết kế để giúp các chuyên gia marketing kỹ thuật số và nhà phát triển ứng dụng gửi email marketing, thông báo và giao dịch. Đây là dịch vụ tin cậy, tiết kiệm chi phí dành cho các doanh nghiệp thuộc đủ mọi quy mô sử dụng email để giữ liên lạc với khách hàng của mình.
Bạn có thể sử dụng giao diện SMTP hoặc một trong các SDK của AWS để tích hợp Amazon SES trực tiếp vào các ứng dụng hiện có của bạn. Bạn cũng có thể tích hợp tính năng gửi email của Amazon SES vào trang web đang sử dụng.
2. Config và sử dụng.
- Đi tới trang service ses của amazon. Và tìm kiếm dịch vụ Simple email service.
- Click chọn Email Address và verify email 2 email dùng để gửi và nhận.
Lưu ý dùng đúng email vì amazon sẽ gửi 1 email để confirm.
Add config
Ở đây mình sử dụng 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> |
Ở bài trước mình có hướng dẫn tạo user IAM, Giờ mình chỉ cần vào group_có user đó và add quyền AmazonSESFullAccess cho 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" |
Tiếp theo là phần gửi email.
Ở application_mailer mình sẽ define 1 số method dùng để gửi email bằng dịch vụ của amazon.
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 href="/cdn-cgi/l/email-protection" class="__cf_email__">[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> |
Tạo 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 gửi email
Mình sẽ gửi tới địa chỉ được verify ở trên.
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 href="/cdn-cgi/l/email-protection" class="__cf_email__">[email protected]</a>"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>deliver_now |
và email nhận được
Các bạn có thể tham khảo thêm 1 số method khác của aws sdk ses tại đây
Source code github