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.
Étienne L. (Guest)
on 2009-05-09 19:30
Attachment: fetch-email_attachment_3.rb (0 Bytes)
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

*************************************************************************
Frederick C. (Guest)
on 2009-05-09 19: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
Étienne L. (Guest)
on 2009-05-09 20:11
Frederick C. 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??
Frederick C. (Guest)
on 2009-05-09 21:21
(Received via mailing list)
On May 9, 5:11 pm, "Étienne Lacoste" <rails-mailing-l...@andreas-
s.net> wrote:
> Frederick C. 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
Étienne L. (Guest)
on 2009-05-10 01:42

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