2014-05-05 7 views
6

Ich erlaube derzeit Benutzern, bestimmte Parameter zu wählen, und basierend auf diesen, ich erzeuge eine CSV-Datei und schiebe es als Download für die Benutzer. z.B.senden dynamisch generierte Datei als E-Mail

send_data <generated csv data>, :disposition => 'attachment' :type => 'text/csv' 

Manchmal, wenn die Daten zu berechnen, zu groß werden, will ich nicht die Benutzer machen warten, bis die Datei als Download geschoben werden. Ich möchte diese Datei als Anhang in einer E-Mail senden.

Ich kann normalerweise eine E-Mail senden. Ich kann eine bereits vorhandene Datei als Anhang senden. Ich möchte diese Datei nicht speichern. Ich möchte es direkt an den Benutzer senden.

Wie mache ich das?

+0

Willkommen beim Stapelüberlauf! – fotanus

Antwort

6

@juanpastas - Ich habe es so gemacht, wie Sie es vorgeschlagen haben. Dadurch wurde die Datei jedoch als Text im E-Mail-Text angezeigt.

So erschien es in der E-Mail.

Inhaltstyp: text/csv; Zeichensatz = UTF-8; Dateiname = data.csv Content-Transfer-Codierung: 7bit Content-Disposition: Anhang; filename = data.csv Content-ID: xyzxyz [Inhalt der CSV-Datei als Text]

Dann enthalten ich den Nachrichtentext und es funktionierte.

Dies führte dazu, dass die E-Mail den Betreff und die Betreffzeile enthielt und die Datei stattdessen als Anhang angezeigt wurde.

+0

Ich versuche das jetzt zu tun. Kannst du mir den Code zeigen, den du für die 'csv_data' verwendest? Ich versuche herauszufinden, wie ich mich darauf beziehen soll. Derzeit, wenn meine App eine CSV-Datei generiert, wird sie im Hauptverzeichnis gespeichert, wo 'app',' db', 'config' liegen. Verwenden Sie etwas anderes als diesen Block: 'CSV.open (" my.csv "," w ") tun' –

5

ich nicht getestet haben, aber dies sollte funktionieren:

class YourMailer < ActionMailer::Base 
    def csv_mail(user, csv_data) 
    attachments['a.csv'] = csv_data 
    mail(to: user.email) 

    end 
end 

Und in Ihrem Controller:

YourMailer.csv_mail(user, csv_data).deliver 

Siehe attachments und inline attachments.

+0

Danke ... das hat fast funktioniert. –

Verwandte Themen