Forum: Ruby on Rails assigning directory path to downloaded email attachments

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
520baebe0b0887ff800dca9b8d3a8f26?d=identicon&s=25 Étienne Lacoste (jj84)
on 2009-05-09 17:30
Attachment: fetch-email_attachment_3.rb (2 KB)
I am trying to build a script that will download emails + their
attachments (from gmail server) and place them both into their
respective folders (one folder containing one email + its attachments).

I have managed to build a script (by putting together pieces from two
separate scripts) that gets the job 90% done, my problem is that I can't
get the attachments to save in the same folders as their respective
emails.

The folder structure where the emails are saved now is perfect, it is
just a question of getting the attachments to follow its respective
email into the folder.

If someone would have any tips for me I would be extremely grateful!

Here's some sample code of the attached script:

*************************************************************************

def save_to_disk(email)        ## downloads emails
  dir = File.join(MAIL_FOLDER,email.subject)
  FileUtils.mkdir_p(dir)

  filename = File.join(dir,email.subject)
  file = File.open(filename,"w")
  file.puts email.body
  file.close



      if email.multipart? then    ## downloads attachments
         email.parts.each do |m|
           if m.disposition
             filename = m.disposition_param('filename')
             if filename[0,2]=='=?'
               filename.gsub!(/=\?[^\?]+\?(.)\?([^\?]+)\?=$/){$1=='B' ?
$2.unpack('m*') : $2.unpack('M*')}
             end
            file = File.open(filename,'wb') {|f|f.write(m.body)}
            puts filename
          end
        end
      end
    end

*************************************************************************
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-05-09 17:35
(Received via mailing list)
On May 9, 4:30 pm, "étienne Lacoste" <rails-mailing-l...@andreas-
s.net> wrote:
> I am trying to build a script that will download emails + their
> attachments (from gmail server) and place them both into their
> respective folders (one folder containing one email + its attachments).
>
> I have managed to build a script (by putting together pieces from two
> separate scripts) that gets the job 90% done, my problem is that I can't
> get the attachments to save in the same folders as their respective
> emails.
>
The filename in the mime headers is just a filename - you need to join
that with a directory name same as you do when saving the email
itself.

Fred
520baebe0b0887ff800dca9b8d3a8f26?d=identicon&s=25 Étienne Lacoste (jj84)
on 2009-05-09 18:11
Frederick Cheung wrote:
> On May 9, 4:30�pm, "�tienne Lacoste" <rails-mailing-l...@andreas-
> s.net> wrote:
>> I am trying to build a script that will download emails + their
>> attachments (from gmail server) and place them both into their
>> respective folders (one folder containing one email + its attachments).
>>
>> I have managed to build a script (by putting together pieces from two
>> separate scripts) that gets the job 90% done, my problem is that I can't
>> get the attachments to save in the same folders as their respective
>> emails.
>>
> The filename in the mime headers is just a filename - you need to join
> that with a directory name same as you do when saving the email
> itself.
>
> Fred

Thanks for the reply. I have already tried doing that, but since I'm a
beginner with programming, I can't seem to get it done! I was hoping
maybe you could give me an example??
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-05-09 19:21
(Received via mailing list)
On May 9, 5:11 pm, "Étienne Lacoste" <rails-mailing-l...@andreas-
s.net> wrote:
> Frederick Cheung wrote:

> Thanks for the reply. I have already tried doing that, but since I'm a
> beginner with programming, I can't seem to get it done! I was hoping
> maybe you could give me an example??

Well you've already got
 File.join(dir,email.subject)

for when you wanted a file in dir with the name email.subject, it's
exactly the same this time except that instead of email.subject it's
whatever you've extracted from the message part.

Fred
520baebe0b0887ff800dca9b8d3a8f26?d=identicon&s=25 Étienne Lacoste (jj84)
on 2009-05-09 23:42

I got it to work now! Thanks for the advice Fred.
This topic is locked and can not be replied to.