0

コンテンツが HTML ドキュメントの一部または HTML ドキュメント全体のいずれかである電子メールを作成するオプションがあります。一部のみの場合、メーラーはテンプレートを使用してレンダリングする必要があります。要素が含まれている場合<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、および添付ファイル (インラインのみ、またはインラインと外部の両方) がある場合、multipart/mixed および multipart/related パーツは生成されません。

更新 2: 部分的な成功! どうやら私は奇妙なエラーの磁石です。開発マシンにウィンドウを使用しているため、添付ファイルを読み取るときFile.open(loc, 'rb') { |f| f.read }の代わりに使用する必要があります。File.read(loc)ため息 File.read で 'rb' フラグを指定する方法はありますか? ドキュメントがどこにも見つかりません。これをテストするために Premailer を無効にする必要があったため、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 になる可能性があります。または、メール パーツの本文にコンテンツを割り当てるときに責任を負うクラスです。

于 2013-02-23T01:25:34.357 に答える