Skip to main content
This guide covers SMTP integration. For full configuration options and available headers, see the SMTP Introduction.

Installation

gem install mail
Or add to your Gemfile:
gem 'mail'

Basic Configuration

Use environment variables for credentials:
SMTP_HOST = 'smtp.lettermint.co'
SMTP_USERNAME = 'lettermint'
API_TOKEN = ENV['LETTERMINT_API_TOKEN']
require 'mail'

Mail.defaults do
  delivery_method :smtp, {
    address: 'smtp.lettermint.co',
    port: 587,
    user_name: 'lettermint',
    password: ENV['LETTERMINT_API_TOKEN'],
    authentication: 'plain',
    enable_starttls_auto: true
  }
end

mail = Mail.new do
  from     'sender@yourdomain.com'
  to       'recipient@example.com'
  subject  'Test Email'

  text_part do
    body 'Hello! This is a test email.'
  end

  html_part do
    content_type 'text/html; charset=UTF-8'
    body '<h1>Hello!</h1><p>This is a test email.</p>'
  end
end

mail.deliver!

Advanced Features

Multiple Recipients

mail = Mail.new do
  from     'sender@yourdomain.com'
  to       ['user1@example.com', 'user2@example.com']
  cc       'manager@yourdomain.com'
  bcc      'archive@yourdomain.com'
  subject  'Newsletter'
  body     '<h1>Monthly Update</h1>'
end

Attachments

mail = Mail.new do
  from     'sender@yourdomain.com'
  to       'recipient@example.com'
  subject  'Document Attached'
  body     'Please find the document attached.'

  add_file '/path/to/document.pdf'
  add_file filename: 'data.txt', content: 'Custom content'
end

Custom Headers

mail = Mail.new do
  from     'sender@yourdomain.com'
  to       'recipient@example.com'
  subject  'Custom Headers'
  body     'Email with custom headers.'

  header['X-Priority'] = '1'
  header['X-Custom-Header'] = 'Custom Value'
end

Metadata for Tracking

Add metadata that will be included in webhook payloads:
mail = Mail.new do
  from     'sender@yourdomain.com'
  to       'recipient@example.com'
  subject  'Order Confirmation'
  body     'Your order has been confirmed.'

  header['X-LM-Metadata-order_id'] = '12345'
  header['X-LM-Metadata-customer_id'] = 'cust_789'
  header['X-LM-Metadata-campaign'] = 'order_confirmation'
end

Lettermint Headers

Add Lettermint-specific headers for tags and routing:
mail = Mail.new do
  from     'sender@yourdomain.com'
  to       'recipient@example.com'
  subject  'Order Confirmation'
  body     'Your order has been confirmed.'

  # Tag for categorization
  header['X-LM-Tag'] = 'order-confirmation'

  # Metadata for tracking (included in webhooks)
  header['X-LM-Metadata-order_id'] = '12345'
  header['X-LM-Metadata-customer_id'] = 'cust_789'

  # Route selection
  header['X-Lettermint-Route'] = 'transactional'
end
Metadata headers are extracted by Lettermint and included in webhook payloads, but not added to the actual email sent to recipients. See the SMTP Introduction for full details on available headers.

Rails Integration

In config/environments/production.rb:
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address: 'smtp.lettermint.co',
  port: 587,
  user_name: 'lettermint',
  password: ENV['LETTERMINT_API_TOKEN'],
  authentication: 'plain',
  enable_starttls_auto: true
}