Hey there, fellow Ruby developer! Ready to supercharge your email game with SendGrid? Let's dive right in and get you set up with a slick SendGrid API integration using the sendgrid-ruby
package. Buckle up!
Before we start, make sure you've got:
First things first, let's get that sendgrid-ruby
gem installed:
gem install sendgrid-ruby
Now, let's set up your API key. I like to use environment variables for this:
require 'sendgrid-ruby' include SendGrid api_key = ENV['SENDGRID_API_KEY']
Alright, let's send a simple email to make sure everything's working:
from = Email.new(email: '[email protected]') to = Email.new(email: '[email protected]') subject = 'Hello, World!' content = Content.new(type: 'text/plain', value: 'Greetings from SendGrid!') mail = Mail.new(from, subject, to, content) sg = SendGrid::API.new(api_key: api_key) response = sg.client.mail._('send').post(request_body: mail.to_json) puts response.status_code puts response.body puts response.headers
If all goes well, you should see a 202 status code. Congrats, you've just sent your first email!
Want to send fancy HTML emails? Just change the content type:
content = Content.new(type: 'text/html', value: '<h1>Hello, World!</h1>')
Sending files is a breeze:
attachment = Attachment.new attachment.content = Base64.strict_encode64(File.read('attachment.pdf')) attachment.type = 'application/pdf' attachment.filename = 'attachment.pdf' attachment.disposition = 'attachment' mail.add_attachment(attachment)
Need to keep people in the loop? Easy peasy:
cc = Email.new(email: '[email protected]') bcc = Email.new(email: '[email protected]') mail.add_cc(cc) mail.add_bcc(bcc)
SendGrid's dynamic templates are awesome. Here's how to use them:
mail = Mail.new mail.template_id = 'your_template_id' personalization = Personalization.new personalization.add_to(Email.new(email: '[email protected]')) personalization.add_dynamic_template_data({ 'name' => 'John Doe', 'city' => 'San Francisco' }) mail.add_personalization(personalization)
Always check those responses:
begin response = sg.client.mail._('send').post(request_body: mail.to_json) if response.status_code.to_i.between?(200, 299) puts "Email sent successfully!" else puts "Error sending email: #{response.body}" end rescue Exception => e puts "Error sending email: #{e.message}" end
Need to send a bunch of emails? No problem:
personalizations = [ { to: [{ email: '[email protected]' }], subject: 'Hello, Recipient 1!' }, { to: [{ email: '[email protected]' }], subject: 'Hello, Recipient 2!' } ] mail = Mail.new mail.from = Email.new(email: '[email protected]') mail.personalizations = personalizations mail.content = Content.new(type: 'text/plain', value: 'How are you?') response = sg.client.mail._('send').post(request_body: mail.to_json)
Want to know who's opening your emails? Enable click and open tracking:
tracking_settings = TrackingSettings.new tracking_settings.click_tracking = ClickTracking.new(enable: true) tracking_settings.open_tracking = OpenTracking.new(enable: true) mail.tracking_settings = tracking_settings
Remember to respect rate limits and consider using asynchronous sending for large volumes. The sendgrid-ruby
gem plays nice with background job processors like Sidekiq.
And there you have it! You're now a SendGrid Ruby ninja. Remember, this is just scratching the surface - SendGrid's API can do a ton more. Keep exploring, keep coding, and most importantly, keep sending awesome emails!
Need more info? Check out the SendGrid Ruby GitHub repo and the official docs. Happy coding!