Mailgun - Lists ==================== This is the Mailgun Ruby *Lists* utilities. The below assumes you've already installed the Mailgun Ruby SDK in your project. If not, go back to the master README for a few quick install steps. OptInHandler: Provides methods for authenticating an Opt-In Request. The typical flow for using this utility would be as follows: **Recipient Requests Subscribe** -> [Validate Recipient Address] -> [Generate Opt-In Link] -> [Email Recipient Opt-In Link] **Recipient Clicks Opt-In Link** -> [Validate Opt-In Link] -> [Subscribe User] -> [Send final confirmation] The above flow is modeled below. Usage - Opt-In Handler (Recipient Requests Subscribe) ----------------------------------------------------- Here's how to use Opt-In Handler to validate Opt-In requests. ```ruby # First, instantiate the SDK with your API credentials, domain, and required parameters for example. mg_client = Mailgun::Client.new("your-api-key") mg_validate = Mailgun::Client.new("your-pub-api-key") domain = 'example.com'; mailing_list = 'youlist@example.com'; secret_app_id = 'a_secret_passphrase'; recipient_address = 'recipient@example.com'; # Let's validate the customer's email address, using Mailgun's validation endpoint. result = mg_validate.get('address/validate', {:address => recipient_address}); body = JSON.parse(result.body) if body['is_valid'] == true # Next, generate a hash. generated_hash = Mailgun::OptInHandler.generate_hash(mailing_list, secret_app_id, recipient_address); # Now, let's send a confirmation to the recipient with our link. mg_client.send_message(domain, {:from => 'bob@example.com', :to => recipient_address, :subject => 'Please Confirm!', :html => "Hello,

You have requested to be subscribed to the mailing list #{mailing_list}. Please confirm your subscription.

Thank you!"}); # Finally, let's add the subscriber to a Mailing List, as unsubscribed, so we can track non-conversions. mg_client.post("lists/#{mailing_list}/members", {:address => recipient_address, :subscribed => 'no', :upsert => 'yes'}); end ``` Usage - Opt-In Handler (Recipient Clicks Opt In Link) ----------------------------------------------------- Here's how to use Opt-In Handler to validate an Opt-In Hash. ```ruby # First, instantiate the SDK with your API credentials and domain. mg_client = Mailgun::Client.new("your-api-key") domain = 'example.com'; # Now, validate the captured hash. hash_validation = Mailgun::OptInHandler.validate_hash(secret_app_id, inbound_hash); # Lastly, check to see if we have results, parse, subscribe, and send confirmation. if !hash_validation.nil? validated_list = hash_validation['mailing_list']; validated_recipient = hash_validation['recipient_address']; mg_client.put("lists/#{validated_list}/members/#{validated_recipient}", {:address => validated_recipient, :subscribed => 'yes'}) mg_client.send_message(domain, {:from => 'bob@example.com', :to => validated_recipient, :subject => 'Confirmation Received!', :html => "Hello,

We've successfully subscribed you to the list, #{validated_list}!

Thank you! "}); end ``` A few notes: 1. 'secret_app_id' can be anything. It's used as the *key* in hashing, since your email address will vary. It should be secured like a password. 2. validateHash will return an array containing the recipient address and list address. 3. You should *always* send an email confirmation before and after the subscription request. This is what double-opt in means. Available Functions ----------------------------------------------------- `string generate_hash(string mailing_list, string secret_app_id, string recipient_address)` `array validate_hash(string secret_app_id, string unique_hash)` More Documentation ------------------ See the official [Mailgun Docs](https://documentation.mailgun.com/api-sending.html) for more information.