【问题标题】:ActionMailer not showing spaces in text mailerActionMailer 未在文本邮件中显示空格
【发布时间】:2011-12-16 14:42:04
【问题描述】:

我有一个 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 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(:to => user.email, :subject => "Welcome to Znood!") do |format|
        #format.text(:content_transfer_encoding => "base64")
        format.text { render :text => "Hello there!" }
    end

“你好!”也整理出来了。

然后我尝试了下面的代码来确定是渲染函数还是邮件函数导致了错误。

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

也整理出来了。

【问题讨论】:

  • 源模板中的CRLF是什么?
  • 我不太清楚,但我认为如果我们解决空间问题并解决它,我们也会解决 CRLF 问题 =)

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


【解决方案1】:

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

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

在我的例子中,它是我的 String class 初始化程序中的一个函数 join。您或您正在使用的 gem 很可能与 Mail 的 join 功能冲突。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    我会设置一个继承自 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 here 来了解它的使用情况,他还展示了一种在电子邮件发送之前拦截电子邮件的方法,以便您了解它们的外观。一个更简单的方法是使用他的letter opener gem 它在浏览器中打开电子邮件(在开发模式下使用)。

    【讨论】:

    • 抱歉,修改了代码。这就是我所拥有的。我尝试了不同的格式,但没有成功。
    • @Abdo 我仍然会将开信刀 gem 放在适当的位置,看看您的应用程序发送的内容与您在客户端(gmail 等)上看到的内容。可能不是应用问题,而是客户端配置问题。
    • 我安装了开信器 gem 并得到了相同的结果。所有的单词都相互整理。
    • 那是电子邮件在浏览器中打开的时间正确吗?你看到所有的词都混在一起了吗?如果使用config/environments/development.rb 中的config.action_mailer.delivery_method = :letter_opener 正确配置了开信器,则发送的任何电子邮件都应在浏览器中打开,而不是发送给客户端。
    • 是的,@Caley。开信刀gem生成的文件,所有单词都已整理;电子邮件未发送给客户。
    【解决方案3】:

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

    【讨论】:

    • 我两者都有,文本电子邮件正在呈现,我收到了上面的电子邮件。我尝试一次拥有 1 个文件,然后尝试同时拥有这两个文件。我一直遇到同样的问题。
    • @Abdo 这仍然可能是客户端问题,而且我看不到您的 HTML 模板中的内容(就像它实际上包含 HTML 一样)。
    • 同意 Dave 的观点,也许是客户问题。
    • 我安装了开信器 gem 并得到了相同的结果。
    • @Abdo 开信刀宝石是查看发送的内容,而不是更改它。查看源代码。
    猜你喜欢
    • 2017-05-26
    • 2014-12-12
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2017-11-21
    • 1970-01-01
    相关资源
    最近更新 更多