2016-04-02 21 views
1

Ich versuche Rails 4 mit meinen Devise und manrill/mailchimp (fusioniert) Konten einzurichten.Rails 4 Mailchimp Mandrill mit Devise

Ich möchte eine Bestätigungs-E-Mail von meinem Mailchimp/Mandrill-Konto senden.

Meine Heroku Logs zeigen diese Meldung:

MandrillDeviseMailer#confirmation_instructions: processed outbound mail in 504.2ms 

Allerdings erhalte ich keine E-Mail.

Ich kann nicht herausfinden, wie ich meine code/mandrill/mailchimp Konten zu arbeiten.

Ich habe einen Mailer wie folgt:

class MandrillDeviseMailer < Devise::Mailer 
    default from: "[email protected]" 

    require "mandrill" 

    def confirmation_instructions(record, token, opts={}) 
    # code to be added here later 
     options = { 
     :subject => 'Confirm your account', 
     :email => record.email, 
     :name => record.formal_name, 
     :global_merge_vars => [ 
     { 
      name: 'email', 
      content: record.email 
     }, 
     { 
      name: 'confirmation_link', 
      content: record.confirmation_token 
     } 
     ], 
     :template => 'devise-confirmation-instructions' 
    } 
    mandrill_send(options) 
    end 

    def reset_password_instructions(record, token, opts={}) 
    options = { 
     :subject => "Reset your password", 
     :email => record.email, 
     :global_merge_vars => [ 
     { 
      name: "password_reset_link", 
      content: "http://www.testhub.com/users/password/edit?reset_password_token=#{token}" 

     }, 

     { 
      name: "PASSWORD_RESET_REQUEST_FROM", 
      content: record.full_name 
     } 
     ], 
     :template => "Forgot Password" 
    } 
    mandrill_send options 
    end 

    def unlock_instructions(record, token, opts={}) 
    # code to be added here later 
    end 

    def mandrill_send(opts={}) 
    message = { 
     :subject=> "#{opts[:subject]}", 
     :from_name=> "Welcome aboard", 
     :from_email=>ENV["OD_WELCOME"], 
     :to=> 
      [{"name"=>"#{opts[:formal_name]}", 
       "email"=>"#{opts[:email]}", 
       "type"=>"to"}], 
     :global_merge_vars => opts[:global_merge_vars] 
     } 
    sending = MANDRILL.messages.send_template opts[:template], [], message 
    rescue Mandrill::Error => e 
     Rails.logger.debug("#{e.class}: #{e.message}") 
     raise 
    end 
end 

ich mit meiner production.rb Setup:

config.action_mailer.smtp_settings = { 
    :port => "587", 
    :address => "smtp.mandrillapp.com", 
    :user_name => ENV['OD_WELCOME'], 
    :password => ENV['ROD_WELCOME'], 
    :domain => "testhub.com", 
    :authentication => :plain } 

ich kann nicht herausfinden, wie meine E-Mail-Vorlagen in Mandrill/MailChimp einrichten damit diese Variablen funktionieren.

Ich habe verschiedene Varianten ausprobiert, aber anstatt die Variable mit der dynamischen Eingabe zu füllen, wird die E-Mail mit Pipes und Ruby-Tags und Text gesendet, der als Code erfüllt werden sollte.

In meiner MailChimp Vorlage, die ich habe:

Hallo <% = @ user.formal_name%>

Sie können Ihr Konto E-Mail über den unten stehenden Link bestätigen:

Das kommt durch als Text, wie er oben erscheint. Ich habe auch versucht, die Ruby Tags innerhalb || Tags, aber diese nur ausdrucken.

Weiß jemand, wie man das einrichtet?

Weitere Versuch

ich auch meine Mail Chimp Vorlage versucht haben, Einstellung zu verwenden fusionieren Schlagwörter als:

| password_reset_link |

Als ich dies versuchen, in der Produktion, es eine E-Mail mit diesem im Körper gedruckt sendet:

<a href="*|password_reset_link|*">Change my password </a> 
+0

Sie sagen, Sie die Nachricht nicht erhalten haben, aber die Nachricht gesendet wurde? Sie sollten die Mandrill-Konsole überprüfen, um zu sehen, ob Nachrichten gesendet werden. Sie gehen möglicherweise in Ihren Spam-Ordner. – TooMuchPete

Antwort

1
  1. Ihr Mailer wohl hier funktioniert gut, aber ist eine kommentierte Version von mir:

    /app/mailers/mandrill_devise_mailer.rb 
    require "mandrill" 
    
    class MandrillDeviseMailer < Devise::Mailer 
        default(
        from: "[email protected]", 
        reply_to: "[email protected]" 
    ) 
    
        def reset_password_instructions(record, token, opts={}) 
        subject = "Password reset link from Your App" 
    
        # These become available in your Mailchimp template and can be used 
        # using the usual *|DISPLAY_NAME|* 
        merge_vars = { 
         "PASSWORD_RESET_LINK" => "https://www.yourdomain.com/users/password/edit?reset_password_token=#{token}", 
         "DISPLAY_NAME" => record.display_name || record.email 
        } 
    
        # The name of your template in Mailchimp 
        # make sure to "send to mandrill" from the edit dropdown 
        body = mandrill_template("Password Reset Template", merge_vars) 
    
        send_mail(record.email, subject, body) 
        end 
    
        private 
    
        def send_mail(email, subject, body) 
        mail(to: email, subject: subject, body: body, content_type: "text/html") 
        end 
    
        def mandrill_template(template_name, attributes) 
        mandrill = Mandrill::API.new(ENV["SMTP_PASSWORD"]) 
    
        merge_vars = attributes.map do |key, value| 
         { name: key, content: value } 
        end 
    
        mandrill.templates.render(template_name, [], merge_vars)["html"] 
        end 
    
    end 
    
  2. Ihre Config sieht auch in Ordnung, aber hier ist mein:

    # /config/environments/production.rb 
    
    config.action_mailer.perform_deliveries = true 
    config.action_mailer.raise_delivery_errors = true 
    config.action_mailer.delivery_method = :smtp 
    
    config.action_mailer.smtp_settings = { 
        address: ENV["SMTP_ADDRESS"], 
        authentication: :plain, 
        domain: ENV["SMTP_DOMAIN"], 
        enable_starttls_auto: true, 
        password: ENV["SMTP_PASSWORD"], 
        port: "587", 
        user_name: ENV["SMTP_USERNAME"] 
    } 
    
    config.action_mailer.default_url_options = { host: ENV["SMTP_DOMAIN"] } 
    
  3. Was Sie vielleicht fehlt, ist die devise.rb initializer Veränderungen, die wie folgt aussehen müssen:

    config.mailer_sender = "[email protected]" 
    
    # Configure the class responsible to send e-mails. 
    config.mailer = 'MandrillDeviseMailer' 
    
Verwandte Themen