Problem mit multipart emails

Hallo UG,

ich quäle mich gewissermassen mit multipart emails – und habe doch den
Eindruck, dass das eigentlich garnicht nötig wäre.

Ich möchte eine Email verschicken, deren Inhalt sowohl in text als
auch in xml-Format anhängt.

Die Doku verstehe ich so, dass es ausreicht, in
app/models/order_notifier.rb folgendes zu schreiben:

class OrderNotifier < ActionMailer::Base
def versanddienstleister_notification(order)
recipients “bla”
from “bla”
subject “Neue Bestellung”
end
end

Dann müssten Templates unter app/views/order_notifier/ die mit
versanddienstleister_notification anfangen gefunden werden und alle
gerendert werden.

Hier liegen bei mir:
versanddienstleister_notification.text.plain.rhtml
versanddienstleister_notification.text.xml.rhtml

Rails sucht allerdings lediglich nach
versanddienstleister_notification.rhtml

Wenn ich die Datei hinlege, frisst er die, wenn ich die anderen beiden
stattdessen hinlege, findet er keine.

Geht Euch das auch so? Ist da im aktuellen Rails
Ruby version 1.8.5 (i686-darwin8.8.2)
RubyGems version 0.9.4
Rails version 1.2.5
Active Record version 1.15.5
Action Pack version 1.13.5
Action Web Service version 1.2.5
Action Mailer version 1.3.5
Active Support version 1.4.4
ein Bug?

Alternativ habe ich folgendes probiert:

def versanddienstleister_notification(order)
setup_email(order)
subject “Bitte Bestellung ##{order.id} versenden”
part( :content_type => “multipart/alternative” ) do |p|
p.part( :content_type => “text/plain”,
:body =>
render_message(“versanddienstleister_notification.text.plain.rhtml”,
{:order => order}) )

  p.part( :content_type => "text/xml",
          :body =>

render_message(“versanddienstleister_notification.text.xml.rxml”,
{:order => order}) )
end
end

Für das erste Attachment geht das, bei dem zweiten nutze ich
render_message um ein builder template zu rendern. Ist das korrekt?
Problem ist: Rails steigt irgendwie aus, die Fehlermeldung ist:
Erake aborted!
Command failed with status (1): [/usr/local/bin/ruby -Ilib:test
"/usr/local…]

Was ich mache ist: Ich lasse einen Test laufen:
response =
OrderNotifier.create_versanddienstleister_notification(@order)

Hat da jemand eine Idee? Wie kann man rxml-templates rendern, so dass
man den Text so bekommt und dann mit :body => … anhängen kann?

Für Vorschläge bin ich sehr dankbar,

LG

M.

Hi Markus Railsfreund*,

Am 13.11.2007 um 17:38 schrieb Markus Railsfreund:

  p.part( :content_type => "text/xml",
          :body =>

render_message(“versanddienstleister_notification.text.xml.rxml”,
{:order => order}) )
end
end

Für das erste Attachment geht das, bei dem zweiten nutze ich
render_message um ein builder template zu rendern. Ist das korrekt?

Also wenn ich die Doku richtig verstehe darf du nicht den richtigen
Dateinamen verwenden.

Du hast außerdem ein part zuviel, um deines mal an das Beispiel
der Doku anzupassen:

class OrderMailer < ActionMailer::Base
def versanddienstleister_notification(recipient)
setup_email(order)
subject “Bitte Bestellung ##{order.id} versenden”

   part "text/plain" do |p|
     p.body = render_message("versanddienstleister-as-plain",

{:order => order})
p.transfer_encoding = “base64”
end

   part :content_type => "text/xml",
     :body => render_message("versanddienstleister-as-xml",

{:order => order})
end
end

Gegenfrage, die Methode setup_email als solche macht keinen Ärger?
Nicht dass wir da was übersehen.

ciao, tom

  • Ich glaub ja nicht dass du mit Nachnamen Railsfreund heißt,
    wenn du um deine Anonymität besorgt bist dann reicht auch der
    Vorname allein, alles andere schaut ja eher lächerlich aus.
    Nur mal so, gibt’s ernsthaft Personalchefs die dich nicht
    einstellen nur weil du hin und wieder ein Frage stellst?
    Ich glaub nicht, sonst wär’s hier nämlich sehr ruhig :wink:


Thomas R. “TomK32” Koll <> http://tomk32.de <> http://ananasblau.de
just a geek trying to change the world