メールを送信しようとしている時点ですべてが揃っていますが、すべてのリンクを変更してGoogleAnalyticsの属性を含める必要があります。問題は、電子メールのhtml_part.bodyを読み書きしようとすると、html文字列全体が何らかの形でエンコードされ、電子メールが正しく表示されないことです(つまり、<html>
になります<html>
)。html_part.body.raw_sourceをロガーに記録しましたが、適切なエンコードされていないHTMLとして表示されます。エンコードが行われるのは、メールが実際に送信されたときだけです。
EBlast.rb(ActionMailer)
def main(m, args={})
# Parse content attachment references (they don't use helpers like the layout does)
# and modify HTML in other ways
m.prep_for_email self
@email = m # Needed for helper methods in view
mail_args = {
:to => @user.email,
:subject => m.subject,
:template_path => 'e_blast',
:template_name => 'no_template'
}
mail_args[:template_name] = 'main' if m.needs_template?
m.prep_for_sending mail(mail_args)
end
Email.rb
def prep_for_sending(mail_object)
if mail_object.html_part
# If I simply do a 'return mail_object', the email sends just fine...
# but the url trackers aren't applied.
# Replace the content with the entire generated html
self.content = mail_object.html_part.body.decoded
# Add Google analytics tracker info to links in content
apply_url_tracker :source => "Eblast Generator", :medium => :email
# Replace the html_part contents
mail_object.html_part.body = content
# At this point, mail_object.html_part.body contains the entire
# HTML string, unencoded. But when I send the email, it gets its
# entities converted and the email is screwed.
end
# Send off email
mail_object
end