ruby-ripmime 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/README +547 -0
  2. data/ext/extconf.rb +5 -0
  3. data/ext/ripmime.c +83 -0
  4. data/ext/ripmime.h +18 -0
  5. metadata +69 -0
data/README ADDED
@@ -0,0 +1,547 @@
1
+ = ruby-ripmime
2
+
3
+ == Description
4
+
5
+ Ruby bindings for ripMIME.
6
+
7
+ ripMIME extract attachments out of a MIME encoded email packages.
8
+
9
+ == Source Code
10
+
11
+ https://bitbucket.org/winebarrel/ruby-ripmime
12
+
13
+ == Install
14
+
15
+ gem install ruby-ripmime
16
+
17
+ == Example
18
+
19
+ require 'rubygems'
20
+ require 'ripmime'
21
+
22
+ require 'tempfile'
23
+ require 'tmpdir'
24
+
25
+ begin
26
+ mailpack = Tempfile.new('mailpack')
27
+ mailpack << DATA.read
28
+ mailpack.flush
29
+
30
+ Dir.mktmpdir do |outputdir|
31
+ Ripmime.decode(mailpack.path, outputdir)
32
+
33
+ Dir.glob("#{outputdir}/*").each do |file|
34
+ size = File.stat(file).size
35
+ puts "#{size}\t#{file}"
36
+ end
37
+ # (output)
38
+ # 28 /tmp/d20121223-23507-zhwjuj/textfile1
39
+ # 9941 /tmp/d20121223-23507-zhwjuj/220px-Shiitake_Meshi_Ekiben.JPG
40
+ # 0 /tmp/d20121223-23507-zhwjuj/textfile0
41
+ # 16361 /tmp/d20121223-23507-zhwjuj/234px-Shiitakegrowing.jpg
42
+ end
43
+ ensure
44
+ mailpack.close
45
+ end
46
+
47
+ __END__
48
+ Received: from unknown ([127.0.0.1] helo=[127.0.0.1]) via TCP with ESMTP
49
+ id mel99a83b1a80f5de2674282c2e26d3334a44dba442b70c;
50
+ Sun, 23 Dec 2012 11:07:07 +0900
51
+ Date: Sun, 23 Dec 2012 11:07:07 +0900
52
+ From: SUGAWARA Genki <sgwr_dys@yahoo.co.jp>
53
+ To: sgwr_dts@yahoo.co.jp
54
+ Subject: I like shiitake mushroom.
55
+ Message-Id: <20121223110706.74E0.7E26811B@yahoo.co.jp>
56
+ MIME-Version: 1.0
57
+ Content-Type: multipart/mixed; boundary="------_50D666A10000000074DE_MULTIPART_MIXED_"
58
+ Content-Transfer-Encoding: 7bit
59
+ X-Mailer: Becky! ver. 2.58 [ja]
60
+
61
+ --------_50D666A10000000074DE_MULTIPART_MIXED_
62
+ Content-Type: text/plain; charset="US-ASCII"
63
+ Content-Transfer-Encoding: 7bit
64
+
65
+ I like shiitake mushroom.
66
+
67
+ --------_50D666A10000000074DE_MULTIPART_MIXED_
68
+ Content-Type: image/jpeg;
69
+ name="234px-Shiitakegrowing.jpg"
70
+ Content-Disposition: attachment;
71
+ filename="234px-Shiitakegrowing.jpg"
72
+ Content-Transfer-Encoding: base64
73
+
74
+ /9j/4AAQSkZJRgABAQEASABIAAD//gBJRmlsZSBzb3VyY2U6IGh0dHA6Ly9jb21tb25zLndpa2lt
75
+ ZWRpYS5vcmcvd2lraS9GaWxlOlNoaWl0YWtlZ3Jvd2luZy5qcGf/2wBDAAYEBQYFBAYGBQYHBwYI
76
+ ChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcH
77
+ BwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo
78
+ KCgoKCj/wAARCAE4AOoDASIAAhEBAxEB/8QAHAAAAQQDAQAAAAAAAAAAAAAABQEDBAYAAgcI/8QA
79
+ OhAAAgEDAgUDAgQFAwUAAwEAAQIDAAQREiEFEzFBUSJhcQaBFDKRoQdCscHwFSNSM2LR4fEkU3KC
80
+ /8QAGQEAAwEBAQAAAAAAAAAAAAAAAQIDAAQF/8QAIxEAAgICAgMBAQEBAQAAAAAAAAECEQMhEjET
81
+ QVEiYTJxof/aAAwDAQACEQMRAD8A8u0/ZwNPMqhcjPx9qZqxWFsI7ddSsoGGJHXfv8UsnQ8VbMso
82
+ dMiqsByRlMDH3PtUq2sWnifmuqKOzNjPvipKxoZp+YWDEHlsv5QBUooiRRMj5kVcE+Kiy6RBktZX
83
+ VRLIqxJ+U+fetmszzI5wwlZ87OMH52okkcbRIAQQBufenpEQDBbAG2P7VhqAzcOuorgF4o5i2dj6
84
+ vvtUEW8POkF1E2nOPR1U1Zp15TcxGZWUYzmobIlszSDS5YZZXHX4PmsCisfhYWjkWWNtTDEU2cDI
85
+ 8ihUsLRD1Y64x3q4zRQtbakOpi2TbkbY96FTWHMj0NswJ0A9/g08ZUTlGyv1lbyRtGxVxgg4rSqE
86
+ TKysrKxhRW4putlrBNqSsNIaxhaSspKxhaSszSVgC1hNJWVjC5rM0lZWMLmkrKwVjGVmKykrBHos
87
+ c1M9NQz+tXKRWiQ6SzD8pGMhTjpVL6VbonWVRLHKWiYAtg9/ikkPAko2gJqJG2pc9fcfBrDkKzW6
88
+ qQRjRnJqRa20UzZzkf8AEmjyRRWXKhWNDK5AGfekKWVtIpzEukMpIGobk5rfVPHql5Ta/BHcVdRb
89
+ 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
361
+ /9k=
362
+ --------_50D666A10000000074DE_MULTIPART_MIXED_
363
+ Content-Type: image/jpeg;
364
+ name="220px-Shiitake_Meshi_Ekiben.JPG"
365
+ Content-Disposition: attachment;
366
+ filename="220px-Shiitake_Meshi_Ekiben.JPG"
367
+ Content-Transfer-Encoding: base64
368
+
369
+ /9j/4AAQSkZJRgABAQEAtAC0AAD//gBPRmlsZSBzb3VyY2U6IGh0dHA6Ly9jb21tb25zLndpa2lt
370
+ ZWRpYS5vcmcvd2lraS9GaWxlOlNoaWl0YWtlX01lc2hpX0VraWJlbi5KUEf/2wBDAAYEBQYFBAYG
371
+ BQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/
372
+ 2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo
373
+ KCgoKCgoKCgoKCj/wAARCAClANwDASIAAhEBAxEB/8QAHAAAAQQDAQAAAAAAAAAAAAAABgMEBQcA
374
+ AQII/8QAQxAAAgEDAgMGAwUGAwcEAwAAAQIDAAQRBSESMUEGEyJRYXEUgZEHIzKhsRUzQlLB0XLh
375
+ 8BYXJDRTYpIIQ0TCc4KD/8QAGgEAAgMBAQAAAAAAAAAAAAAAAQMAAgQFBv/EAC8RAAIBAgUDAgQG
376
+ AwAAAAAAAAABAgMRBBITITFBUWEFIhQjodEyUnGBsfBCkcH/2gAMAwEAAhEDEQA/APL1ZKqjBRid
377
+ t8jGK3x8YXYDAxsMZ96xeEkcZIHoKbyV4OUPiweu4rtCokHeAlOoU4NInalNyobGx2z60Ews0evO
378
+ uTjh9c8q3jwcXEvljO9cHc1LkNHrjOBWDG+aw+/PnWgcGqhOhWxW2wGODyOxHKsG5z86KAdHDMSF
379
+ CjoB0ot+zvsLqfbjVvhrEdxZREG6vXXKQL/9mPRRz9Bk0r9mfYPUe3etfD2+bfT4MG7vCuVhXoB5
380
+ ueg+Z2BNevNB0TTuzuj2+laNbC3soB4V5s7dXY9WPU/0FPp077vgRWrZdlyN+yugaV2U0WHS9Et+
381
+ 6to/EztgyTP1dz1Y/QDYYFTSS9Sd6bstccXDWvgxcj4yk0k0xwQab94elJvJjO9S5LHTv60hI/ma
382
+ SmmwKaSXHrVcxZIUllwfSqZ+3fsat9at2m0yFTd264vUA/exjYS4815H0welWtJNk4JppPcBQQQr
383
+ DBBB3BHUEUubTVmMhdO6PGwUscCuWOcbAYGNhRl9pXZlOz2sSPZxn9mXTF7dt/uz1j+XT0x60G++
384
+ 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
543
+ 6UHZxWVlKlyPh+FDmI0qfasrKUy5/9k=
544
+ --------_50D666A10000000074DE_MULTIPART_MIXED_--
545
+
546
+
547
+
data/ext/extconf.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'mkmf'
2
+
3
+ if have_header('ripmime-api.h') and have_library('ripmime')
4
+ create_makefile('ripmime')
5
+ end
data/ext/ripmime.c ADDED
@@ -0,0 +1,83 @@
1
+ #include "ripmime.h"
2
+
3
+ static VALUE rb_mRipmime;
4
+ static VALUE rb_eRipmimeError;
5
+
6
+ static VALUE ruby_ripmime_decode(VALUE self, VALUE mailpack, VALUE outputdir) {
7
+ struct RIPMIME_object rm;
8
+ int ret, fd_stdout, fd_stderr;
9
+ FILE *fp_err;
10
+ VALUE errmsg;
11
+ char buf[BUFSIZ];
12
+
13
+ fp_err = tmpfile();
14
+
15
+ if (fp_err == NULL) {
16
+ rb_raise(rb_eRuntimeError, strerror(errno));
17
+ }
18
+
19
+ fd_stdout = dup(fileno(stdout));
20
+
21
+ if (fd_stdout == -1) {
22
+ rb_raise(rb_eRuntimeError, strerror(errno));
23
+ }
24
+
25
+ fd_stderr = dup(fileno(stderr));
26
+
27
+ if (dup2(fileno(fp_err), fileno(stdout)) == -1) {
28
+ rb_raise(rb_eRuntimeError, strerror(errno));
29
+ }
30
+
31
+ if (dup2(fileno(fp_err), fileno(stderr)) == -1) {
32
+ rb_raise(rb_eRuntimeError, strerror(errno));
33
+ }
34
+
35
+ RIPMIME_init(&rm);
36
+
37
+ ret = RIPMIME_decode(&rm, StringValuePtr(mailpack), StringValuePtr(outputdir));
38
+
39
+ if (dup2(fd_stdout, fileno(stdout)) == -1) {
40
+ rb_raise(rb_eRuntimeError, strerror(errno));
41
+ }
42
+
43
+ if (dup2(fd_stdout, fileno(stderr)) == -1) {
44
+ rb_raise(rb_eRuntimeError, strerror(errno));
45
+ }
46
+
47
+ if (close(fd_stdout) == -1) {
48
+ rb_warn(strerror(errno));
49
+ }
50
+
51
+ if (close(fd_stderr) == -1) {
52
+ rb_warn(strerror(errno));
53
+ }
54
+
55
+ rewind(fp_err);
56
+
57
+ errmsg = rb_str_new(0, 0);
58
+
59
+ while (fgets(buf, BUFSIZ, fp_err) != NULL) {
60
+ rb_str_append(errmsg, rb_str_new2(buf));
61
+ }
62
+
63
+ if (fclose(fp_err) != 0) {
64
+ rb_warn(strerror(errno));
65
+ }
66
+
67
+ if (ret != 0 || RSTRING_LEN(errmsg) != 0) {
68
+ if (RSTRING_LEN(errmsg) > 0) {
69
+ rb_raise(rb_eRipmimeError, RSTRING_PTR(errmsg));
70
+ } else {
71
+ rb_raise(rb_eRipmimeError, "ripMIME decode errer (retval: %d)", ret);
72
+ }
73
+ }
74
+
75
+ return 0;
76
+ }
77
+
78
+ void Init_ripmime() {
79
+ rb_mRipmime = rb_define_module("Ripmime");
80
+ rb_eRipmimeError = rb_define_class_under(rb_mRipmime, "Error", rb_eStandardError);
81
+
82
+ rb_define_module_function(rb_mRipmime, "decode", ruby_ripmime_decode, 2);
83
+ }
data/ext/ripmime.h ADDED
@@ -0,0 +1,18 @@
1
+ #ifndef __RUBY_RIPMIME_H__
2
+ #define __RUBY_RIPMIME_H__
3
+
4
+ #include <stdio.h>
5
+ #include <stdlib.h>
6
+ #include <unistd.h>
7
+ #include <errno.h>
8
+ #include <ripmime-api.h>
9
+ #include <ruby.h>
10
+
11
+ #ifndef RSTRING_PTR
12
+ #define RSTRING_PTR(s) (RSTRING(s)->ptr)
13
+ #endif
14
+ #ifndef RSTRING_LEN
15
+ #define RSTRING_LEN(s) (RSTRING(s)->len)
16
+ #endif
17
+
18
+ #endif // __RUBY_RIPMIME_H__
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-ripmime
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - winebarrel
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-12-23 00:00:00 Z
19
+ dependencies: []
20
+
21
+ description: Ruby binding for ripMIME.
22
+ email: sgwr_dts@yahoo.co.jp
23
+ executables: []
24
+
25
+ extensions:
26
+ - ext/extconf.rb
27
+ extra_rdoc_files:
28
+ - README
29
+ files:
30
+ - ext/ripmime.c
31
+ - ext/ripmime.h
32
+ - ext/extconf.rb
33
+ - README
34
+ homepage: https://bitbucket.org/winebarrel/ruby-ripmime
35
+ licenses: []
36
+
37
+ post_install_message:
38
+ rdoc_options:
39
+ - --title
40
+ - ruby-ripmime - Ruby binding for ripMIME.
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ hash: 3
49
+ segments:
50
+ - 0
51
+ version: "0"
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ requirements: []
62
+
63
+ rubyforge_project:
64
+ rubygems_version: 1.8.11
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: Ruby binding for ripMIME.
68
+ test_files: []
69
+