A class that uses a few other classes to generate an email I seem to find my self writing a lot of classes like the below where there seems to be some kind of send method that just calls a bunch of other methods.  Is this bad practice?  Is there a more object oriented way to do this?  

The below class uses User, UserDetail (preference object), and a custom Mailchimp api client.  It basically goes through creates a campaign, adds the html body to that campaign and then sends it.

# Generate and send mailers
class Mail
  def initialize(user_id)
    @user = User.find(user_id)
    @detail = @user.details
    @client = @user.mailchimp
    @campaign_id
  end

  def send
    create_campaign
    create_html_content
    send_campaign
  end

  private

  def create_campaign
    params = @detail.create_campaign_params
    @campaign_id = @client.create_campaign(params)
  end

  def create_html_content
    params = @detail.create_content_params
    @client.create_campaign_content(@campaign_id, params)
  end

  def send_campaign
    @client.send_campaign(@campaign_id)
  end
end
I find it weird that you wrote this as a module rather than as a class.

How is this code going to be called?  Mail.new(user_id).send, I assume?  It doesn't seem to make much sense to call #send twice on the same object.  So, really, there isn't any point to make an object at all.  You could just as well define a function.

def send_mail_to_user(user_id)
  user = User.find(user_id)
  client = user.mailchimp
  campaign_id = client.create_campaign(user.detail.create_campaign_params)
  client.create_campaign_content(campaign_id, user.detail.create_content_params)
  client.send_campaign(campaign_id)
end