9

ho un controller ActionMailer che si suppone di inviare questo file:ActionMailer non mostrando gli spazi nei mailer testo

/user_mailer/welcome_email.text.erb 

Questo è il contenuto (campione) del file:

Welcome to znood.com, <%= @user.name %> 

You have successfully signed up to znood.com, 
Your username is: <%= @user.email %>. 

To login to the site, just follow this link: <%= @url %>. 

Thanks for joining and have a great day! 

The Znood Team 

[modifica] questo è il codice nel controllore:

def sendmail 
     @user = User.first 
     UserMailer.welcome_email(@user).deliver 
     render "user_mailer/welcome_email.text" 
     #render the file to see what we're supposed to send 
end 

e questo è il codice in UserMailer < ActionMailer :: Base

def welcome_email(user) 
    @user = user 
    @url = "http://znood.com/" 
    mail(:to => user.email, :subject => "Welcome to Znood!") 
    end 

Questa è l'e-mail che ricevo:

Welcometoznood.com,AbdoAchkarYouhavesuccessfullysigneduptoznood.com,Yourusernameis:blabla.Tologintothesite,justfollowthislink:http://znood.com/.Thanksforjoiningandhaveagreatday!TheZnoodTeam 

Qualsiasi idea di come includere gli spazi, ritorni a capo e avanzamenti di riga?

[modifica] Dopo aver installato la gemma letter_opener, compaiono i seguenti nella mia console:

----==_mimepart_4ea9882a2735c_1c782d964bc18193 

Date: Thu, 27 Oct 2011 19:34:50 +0300 

Mime-Version: 1.0 

Content-Type: text/plain; 

charset=UTF-8 

Content-Transfer-Encoding: 7bit 

Content-ID: <[email protected]> 



Welcometoznood.com,AbdoAchkarYouhavesuccessfullysigneduptoznood.com,Yourusername 
is:blabla.Tologintothesite,justfollowthislink:http://znood.com/.Thanksforjoiningandhaveagreatday!TheZnoodTeam 

ho tentando cambiare le intestazioni "Content-Transfer-Encoding", ma non sembrano cambiare. Ho anche provato a impostare un valore predefinito per questo. Sembra che siamo bloccati con la codifica a 7 bit.

[Edited] Un altro che dovrebbe aiutarci a trovare il problema è che ho provato passando i seguenti params alla funzione di posta elettronica per vedere se il file di rendering è problematica: "Hellothere"

mail(:to => user.email, :subject => "Welcome to Znood!") do |format| 
     #format.text(:content_transfer_encoding => "base64") 
     format.text { render :text => "Hello there!" } 
    end 

anche uscito collazionato.

Ho quindi provato il codice seguente per verificare se sia la funzione di rendering o posta a causare gli errori.

mail(:to => user.email, :subject => "Welcome to Znood!") do |format| 
     format.text { "hello there!" } 
end 

Anche uscito collazionato.

+0

Quali sono i CRLF nel modello di origine? –

+0

Non lo so esattamente ma penso che se affrontiamo il problema degli spazi e lo risolviamo, risolveremo anche il problema CRLF =) – Abdo

risposta

0

Mi ci è voluto un po 'per risolvere. Il problema non era con ActionMailer.

Se si verifica questo problema, assicurarsi innanzitutto che non sia il codice o le gemme che lo causano. Avvia una nuova applicazione di guide e prova con ActionMailer. (Grazie per @RubyCyanide per questo suggerimento)

Nel mio caso, era una funzione join che avevo nel mio inizializzatore String class. È molto probabile che tu o una gemma che stai utilizzando sia in conflitto con la funzione di join di Mail.

Spero che questo aiuti!

1

Per impostazione predefinita, il mailer deve inviare email di testo: è possibile che ciò avvenga sul lato client. La vera soluzione è quella di avere sia modelli di testo che HTML (usa lo stesso modello per entrambi, se sono ugualmente semplici)

+0

Io ho entrambi, l'email di testo è stata renderizzata e sto ricevendo l'email sopra . Ho provato ad avere 1 file alla volta e poi ho provato ad averli entrambi. Continuo ad avere lo stesso problema. – Abdo

+0

@Abdo È ancora possibile che si tratti di un problema del client, inoltre non riesco a vedere cosa c'è nel modello HTML (come in realtà contiene HTML). –

+0

Accetto con Dave qui, forse è un problema client. –

0

Avrei impostato una classe che eredita da ActionMailer::Base e quindi creare il tuo metodo welcome_email lì. poi, nel vostro controller chiamata FooMailer.welcome_email(@user.email).deliver. Se si sta facendo questo molto prevedere il passaggio a resque o di lavoro in ritardo.

per quanto avendo un problema con la spaziatura, hai provato la creazione di un welcome_email.html.erb e inviarlo? Puoi specificare nel tuo metodo welcome_email per usare l'html (con o senza un layout) in questo modo:

def welcome_email(user) 
    @user = user 
    @url = "http://znood.com/" 
    mail(:to => user.email, :subject => "Welcome to Znood!") do |format| 
    format.html #{ render :layout => 'my_layout' } 
    end 
end 

Puoi guardare Ryan Bates RailsCast # 206 here per vedere che viene utilizzato e inoltre mostra un metodo per intercettare le e-mail prima che vengano consegnate in modo da poter vedere come appaiono. Un modo più semplice per farlo è usare il suo letter opener gem per aprire l'e-mail nel browser (usare in modalità dev).

+0

Spiacente, modificato il codice. Questo è quello che ho. Ho provato con diversi formati ma non ha funzionato. – Abdo

+0

@Abdo Continuerò a mettere la gemma dell'aperitivo in posizione e vedere cosa sta inviando l'app rispetto a ciò che vedi sul client (gmail, ecc.). Forse non è un problema di app ma un problema di configurazione del client. –

+0

Ho installato la gemma dell'apri lettera e ho ottenuto lo stesso risultato. Tutte le parole raccolte tra di loro. – Abdo