ActionMailer不在文本邮件程序中显示空格

时间:2011-10-27 15:10:25

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 actionmailer

我有一个应该发送此文件的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中的代码&lt;的ActionMailer ::基

 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 gem后,我在控制台中看到以下内容:

----==_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(:to => user.email, :subject => "Welcome to Znood!") do |format|
        format.text { "hello there!" }
end

也出来整理。

3 个答案:

答案 0 :(得分:1)

默认情况下,邮件程序应该发送文本电子邮件 - 这可能发生在客户端。真正的解决方案是同时拥有文本和HTML模板(或者通过技巧(或者只是Markdown),如果它们同样简单,则使用相同的模板。

答案 1 :(得分:0)

我设置了一个继承自ActionMailer::Base的类,然后在那里创建了welcome_email方法。然后在你的控制器中调用FooMailer.welcome_email(@user.email).deliver。如果你这么做的话要考虑把它转移到resque或延迟工作。

如果间距有问题,您是否尝试创建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 here以查看其使用情况,并且他还展示了一种在发送电子邮件之前拦截电子邮件的方法,以便您可以看到它们的外观。更简单的方法是使用他的letter opener gem它在浏览器中打开电子邮件(在开发模式下使用)。

答案 2 :(得分:0)

我花了一段时间才解决。问题不在于ActionMailer。

如果您遇到此问题,请首先确保不是您的代码或导致此问题的宝石。启动一个新的rails应用程序并使用它测试ActionMailer。 (感谢@RubyCyanide提出此建议)

在我的情况下,我在join初始化程序中使用了String class函数。您或您正在使用的宝石很可能与Mail的连接功能发生冲突。

希望这有帮助!