ActionMailer не показывает пробелы в текстовой почтовой программе - PullRequest
9 голосов
/ 27 октября 2011

У меня есть контроллер ActionMailer, который должен отправить этот файл:

/user_mailer/welcome_email.text.erb

Это (пример) содержимое файла:

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

[редактировать] Это код в контроллере:

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

и это код в UserMailer

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

Это письмо, которое я получаю:

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

Любая подсказка, как включить пробелы, возврат каретки и перевод строки?

[править] После установки гема letter_opener в консоли я вижу следующее:

----==_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: <4ea9882a2d8ee_1c782d964bc18277@lenovo-PC.mail>



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

Я пытался изменить заголовки «Content-Transfer-Encoding», но они не изменились. Я также попытался установить для него значение по умолчанию. Похоже, мы застряли с 7-битной кодировкой.

[Изменено] Другая проблема, которая должна помочь нам найти проблему, состоит в том, что я попытался передать следующие параметры функции mail, чтобы проверить, не является ли проблематичным средство визуализации файлов:

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

"Hellothere!" также вышло с разбором.

Затем я попробовал приведенный ниже код, чтобы убедиться, что это - функция рендеринга или mail, которая вызывает ошибки.

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

Также вышло с разбором.

Ответы [ 3 ]

1 голос
/ 27 октября 2011

По умолчанию отправитель должен отправлять текстовые электронные письма - возможно, это происходит на стороне клиента.Реальное решение состоит в том, чтобы текстовые и HTML-шаблоны (или с помощью хитрости (или просто Markdown) использовали один и тот же шаблон для обоих, если они одинаково просты.

0 голосов
/ 10 ноября 2011

Это заняло у меня некоторое время, чтобы решить.Проблема не в ActionMailer.

Если у вас возникла эта проблема, сначала убедитесь, что это не ваш код или гемы, вызывающие это.Запустите новое приложение rails и протестируйте с ним ActionMailer.(Спасибо за @RubyCyanide за это предложение)

В моем случае это была функция join, которая была у меня в инициализаторе String class.Весьма вероятно, что вы или используемый вами драгоценный камень конфликтует с функцией соединения Mail.

Надеюсь, это поможет!

0 голосов
/ 27 октября 2011

Я бы установил класс, который наследуется от ActionMailer::Base, а затем создал бы там свой welcome_email метод.Тогда в вашем контроллере позвоните FooMailer.welcome_email(@user.email).deliver.Если вы делаете это много, подумайте о том, чтобы переместить его в режим ожидания или с задержкой.

Что касается проблемы с пробелами, вы пытались создать welcome_email.html.erb и отправить его?Вы можете указать в своем методе welcome_email использование html (с макетом или без) следующим образом:

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

Вы можете посмотреть Ryan Bates RailsCast # 206 здесь , чтобы увидеть этоиспользуется, а также он показывает метод перехвата электронных писем до их доставки, чтобы вы могли увидеть, как они выглядят.Более простой способ сделать это - использовать его gem * opener для открытия писем , который открывает электронное письмо в браузере (использовать в режиме разработки).

...