0

我可以选择创建一封电子邮件,其中的内容可以是 HTML 文档的一部分,也可以是整个 HTML 文档。如果只是一部分,Mailer应该使用模板进行渲染。如果它包含该<html>元素(表明它是一个完整的 HTML 文档),则在发送时不应使用模板文件。除了发送的电子邮件中的“电子邮件部分”出现故障并在某些情况下重复之外,我几乎已经完成了所有设置和工作。它搞砸了电子邮件的呈现。我认为这与我对方法的调用mail以及 Premailer 对deliver方法所做的操作有关,但我不确定从这里去哪里。

EBlast.rb

def main(m, args={})
    # 'm' is an Email.rb object
    ready_email 'E-Blast', args # Don't worry about this
    assign_private_id_header # or this

    # Read the Template
    @variable_width = (@user.email =~ /@hotmail|@live|@windows/).nil?
    @page_title = m.subject
    m.prep_for_email # squeeze unnecessary whitespace and create 'quick-nav' links based on h1 tags

    # Read in attachments
    m.inline_attachments.each do |name, loc|
    attachments.inline[name] = File.read(loc)
    end
    m.external_attachments.each do |name, loc|
    attachments[name] = File.read(loc)
    end


    mail_object = mail(:to => @user.email, :subject => m.subject) do |format|
    format.text { render :text => 'placeholder' } # This should be replaced by Premailer html > text conversion upon deliver!

    if m.needs_template?
        # Use the main.html.erb template
        @email = m # Needed for helper methods in template view
        format.html 
    else
        # Use the content of the email as the entire HTML source
        format.html { render :text => m.content }
    end
    end
    # Apply Google Analytics tracking parameters to links pointing to this domain
    m.prep_for_sending mail_object
end

电子邮件.rb

def prep_for_sending(mail_object)

    unless mail_object.html_part.nil?
    # Replace the content with the generated html
    self.content = mail_object.html_part.body.raw_source
    # Add Google analytics tracker info to links
    apply_url_tracker :source => "Eblast Generator", :medium => :email
    # Replace the html raw_source
    mail_object.html_part.body = content

    end

    # Return mail object so mailer can call deliver
    mail_object

end

更新:经过一些解决方法(为“非模板内容”创建一个空白模板),我发现了另一个问题……我认为这个问题真正触及了正在发生的事情的核心。当有文本、html 和附件(只是内联或内联和外部)时,不会生成多部分/混合和多部分/相关部分。

更新 2:部分成功!显然,我很喜欢奇怪的错误。我必须使用File.open(loc, 'rb') { |f| f.read }而不是File.read(loc)在阅读附件时使用,因为我正在使用 Windows 作为开发机器。叹息有没有办法在 File.read 中指定“rb”标志?我在任何地方都找不到文档。我现在要尝试让 Premailer 工作,因为我必须禁用它来测试它。

最终更新:看起来 Premailer 正在搞砸多部分布局。有没有一种方法可以使用 Premailer 而不会自行连接到交付?我只需要它来内联 CSS 并生成纯文本部分。

4

1 回答 1

1

确认这是 premailer-rails3 gem here的错误。使用gem "premailer-rails3", :git => "git://github.com/tdgs/premailer-rails3.git"并正确发送。有6个小时:)

附录:似乎 Premailer 可能遇到了我在这个线程中遇到的同样问题。它似乎也复制了 html 部分,并且最终可能会搞砸整个电子邮件解析。所以实际上最终它可能是 ActionMailer - 或者在将内容分配给 Mail 部分的主体时负责的任何类。

于 2013-02-23T01:25:34.357 回答