コンテンツが 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 をインライン化し、プレーン テキスト部分を生成するためだけに必要です。