File: email_viewer.rb

package info (click to toggle)
ruby-email-spec 2.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 980 kB
  • sloc: ruby: 2,420; makefile: 3
file content (91 lines) | stat: -rw-r--r-- 2,504 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
module EmailSpec
  class EmailViewer
    extend Deliveries

    def self.save_and_open_all_raw_emails
      filename = tmp_email_filename

      File.open(filename, "w") do |f|
        all_emails.each do |m|
          f.write m.to_s
          f.write "\n" + '='*80 + "\n"
        end
      end

      open_in_text_editor(filename)
    end

    def self.save_and_open_all_html_emails
      all_emails.each_with_index do |m, index|
        if m.multipart? && m.parts.detect{ |p| p.content_type.include?('text/html') }
          filename = tmp_email_filename("-#{index}.html")
          File.open(filename, "w") do |f|
            f.write m.parts[1].body
          end
          open_in_browser(filename)
        end
      end
    end

    def self.save_and_open_all_text_emails
      filename = tmp_email_filename

      File.open(filename, "w") do |f|
        all_emails.each do |m|
          if m.multipart? && text_part = m.parts.detect{ |p| p.content_type.include?('text/plain') }
            if m.respond_to?(:ordered_each) # Rails 2 / TMail
              m.ordered_each{|k,v| f.write "#{k}: #{v}\n" }
            else # Rails 4 / Mail
              f.write(text_part.header.to_s + "\n")
            end

            f.write text_part.body
          else
            f.write m.to_s
          end
          f.write "\n" + '='*80 + "\n"
        end
      end

      open_in_text_editor(filename)
    end

    def self.save_and_open_email(mail)
      filename = tmp_email_filename

      File.open(filename, "w") do |f|
        f.write mail.to_s
      end

      open_in_text_editor(filename)
    end

    def self.save_and_open_email_attachments_list(mail)
      filename = tmp_email_filename

      File.open(filename, "w") do |f|
        mail.attachments.each_with_index do |attachment, index|
          info = "#{index + 1}:"
          info += "\n\tfilename: #{attachment.original_filename}"
          info += "\n\tcontent type: #{attachment.content_type}"
          info += "\n\tsize: #{attachment.size}"
          f.write info + "\n"
        end
      end

      open_in_text_editor(filename)
    end

    def self.open_in_text_editor(filename)
      Launchy.open(URI.parse("file://#{File.expand_path(filename)}"), :application => :editor)
    end

    def self.open_in_browser(filename)
      Launchy.open(URI.parse("file://#{File.expand_path(filename)}"))
    end

    def self.tmp_email_filename(extension = '.txt')
      "#{Rails.root}/tmp/email-#{Time.now.to_i}#{extension}"
    end
  end
end