2015-09-25 16 views
5

Wie binde ich meinen Rails-Mailer mit dem smtpapi-ruby-Juwel an Sendgrid? Ich habe ihre limited documentation verfolgt, aber meine E-Mails nicht durchlaufen, ich habe überprüft, dass meine SendGrid-Implementierung funktioniert gut, wenn Sie nur eine einfache E-Mail senden, so dass es nicht ist. Das ist, was ich habe:Rails Mailer mit SendGrid-Vorlage

user_controller.rb

def create 
    @user = User.new(user_params) 

    respond_to do |format| 
     if @user.save 
     format.html { redirect_to @user, notice: 'User was successfully created.' } 
     format.json { render :show, status: :created, location: @user } 


     header = Smtpapi::Header.new 
     header.add_to(@user.email) 
     header.add_substitution('user', [@user.name]) 
     header.add_substitution('body', "You've registered! This is from the controller.") 
     header.add_filter('templates', 'enable', 1) 
     header.add_filter('templates', 'template_id', 'xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx') 
     header.to_json 

     UserNotifier.welcome(header).deliver 
     else 
     format.html { render :new } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Mailer/user_notifier.rb

class UserNotifier < ApplicationMailer 
    default from: "[email protected]" 

    def welcome(header) 
    headers['X-SMTPAPI'] = hdr.to_json 
    mail(subject: "Welcome to the site!") 
    end 
end 

views/user_notifier/welcome.html.erb

<html> 
<body> 
    Hi -user-<br /> 
    Thanks so much for joining us! 

    <p>-body-</p> 

    Thanks,<br /> 
    The Microblog Team 
</body> 
</html> 

Ich sehe nicht, dass im SendGrid-Aktivitätsprotokoll irgendetwas passiert ist, daher wird es nicht einmal dorthin gesendet, zumindest ist das meine Vermutung.

Was mache ich falsch?

Antwort

6

Ich glaube, Sie haben Ihre Variablen gemischt. Sie rufen hdr.to_json und der Parametername ist header, die auch bereits in Json konvertiert wird.

Sie sollten die Header-Metadaten direkt in UserNotifier umfassen:

headers "X-SMTPAPI" => { 
    "sub": { 
     "%name%" => [user.name] 
    }, 
    "filters": { 
     "templates": { 
     "settings": { 
      "enable": 1, 
      "template_id": 'xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx' 
     } 
     } 
    } 
    }.to_json 

# the 'to' email can be overridden per action 
mail(
    from: '[email protected]', 
    to: '[email protected]', 
    subject: "Hello World" 
) 

Sie auch den Inhalt passieren kann, wenn UserNotifier.welcome in anderen Teilen Ihrer Anwendung verwendet wird:

UserNotifier.welcome(user: @user, subject: "Welcome!").deliver_now 

# user_notifier.rb 

class UserNotifier < ApplicationMailer 
    default from: "[email protected]" 

    def welcome(user: , subject: , template: "default") 

    # template's default view is "default" 
    headers "X-SMTPAPI" => { 
    "sub": { 
     "%name%" => [user.name] 
    }, 
    "filters": { 
     "templates": { 
     "settings": { 
      "enable": 1, 
      "template_id": 'xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx' 
     } 
     } 
    } 
    }.to_json 

    mail(
     from: '[email protected]', 
     to: user.email, 
     subject: subject, 
     template_path: 'path/to/view', 
     template_name: template 
    ) 
    # this would try to render the view: `path/to/view/default.erb` 
    end 
end 

in Ihrer Vorlage Sie können Ihre Ersatz-Tags einschließen, indem Sie den Namen des Tags einschließen:

More information about substitution tags

Sehen Sie sich die Sendgrid docs auf using their template system

3

Sie haben den Code in Ihrem Mailer, um etwas zu ändern, wie:

class UserNotifier < ApplicationMailer 
    default from: "[email protected]" 

    def welcome(hdr) 
    headers['X-SMTPAPI'] = hdr.asJSON() 
    mail(subject: "Welcome to the site!") 
    end 
end 

Beispiel: https://sendgrid.com/docs/Integrate/Code_Examples/SMTP_API_Header_Examples/ruby.html

+0

Ok, das macht Sinn, aber jetzt bekomme ich 'undefined lokale Variable oder Methode' Header‘für # ' – Godzilla74

+0

Ihre 'ApplicationMailer' inheriths von 'ActionMailer :: Base'? Wenn nicht, können Sie versuchen, Folgendes zu verwenden: 'class UserNotifier Aguardientico

+0

Hatte die Zeile in' headers ['X-SMTPAPI'] = hdr.to_json' zu ändern, dann würde es reichen ... immer noch nicht obwohl durch. – Godzilla74

Verwandte Themen