3

When sending emails with attachments (html files) to gmail the email body is not sent. If I comment out the attachment settings below it went ok. If it happens that the email doesn't have any attachments it went ok.

I tested out that the issues is caused only when the file has the extension of "html". Other files like log, png are ok.

  • ruby 1.8.7 (2010-08-16 patchlevel 302) [i386-mingw32]
  • mime-types (1.18)
  • pony (1.4)

How can I send .html files in my send mail function correctly?

Update: I added an extract from the received email and the email body is present as the middle mimepart. Search for Content-ID: <4fdfd7725ba26_a0c1a825dc8363d@RATionalxp.mail>

def email_it(body, subject, to, from, attachment_to_send)

  $smtp = 'mail.com.au'
  $smtp_port = 25

  body_with_footer = body +Email_footer

    Pony.mail(
        :to => to, 
        :from => from,
        :subject => subject, 
        :body => Nokogiri::HTML(body_with_footer).text, 
        :html_body =>  body_with_footer, 
        :attachments => attachment_to_send,
        :via => :smtp, 
        :via_options => {
                :address     => $smtp,
                :port     => $smtp_port,
                :enable_starttls_auto => false
        }
    )
end

Extract from the received email

Mime-Version: 1.0
Content-Type: multipart/alternative;
 boundary="--==_mimepart_4fdfd77251dac_a0c1a825dc83328";
 charset=UTF-8
Content-Transfer-Encoding: 7bit



----==_mimepart_4fdfd77251dac_a0c1a825dc83328
Date: Tue, 19 Jun 2012 11:35:46 +1000
Mime-Version: 1.0
Content-Type: text/plain;
 charset=UTF-8
Content-Transfer-Encoding: base64
Content-ID: <4fdfd7725ba26_a0c1a825dc8358f@RATionalxp.mail>

QW50wqBydW7CoG5hbWXCoMKgOsKgRWR1bWF0ZV91cGdyYWRlX211bHRpwqAo
ZXhwcmVzcylPdmVyYWxswqByZXN1bHQ6wqBmYWlswqBBbnTCoHJ1bsKgdG9v
azrCoG5vYm9kecKga25vd3PCoDstKcKgUmVzdG9yaW5nwqBmcm9twqAvdmFy
L2xpYi9lZHVtYXRlL2JkcnMvbG9xdWF0L2RhdGFiYXNlcy93ZWVrbHkvTE9R
VUFULjAuZGIyaW5zdDEuTk9ERTAwMDAuQ0FUTjAwMDAuMjAxMjA2MTAwMjMw
MDYuMDAxVGltZXN0YW1wwqBvZsKgYmFja3VwwqBpbWFnZcKgaXM6wqAxMMKg
SnVuwqAyMDEywqAwMjozMERhdGFiYXNlwqBSQVRJT05BTMKgcmVzdG9yZWTC
oHN1Y2Nlc3NmdWxsecKgZnJvbcKgZGF0YWJhc2U6wqBMT1FVQVRyZXN0b3Jl
wqB0b29rOsKgMDowMDozOC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LURldGFpbHPCoGZvcsKgYWxswqBSYXRpb25hbMKgdGVzdMKgc3VpdHMtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1FZHVtYXRlX3VwZ3JhZGU6wqBs
b2fCoGZpbGXCoG5vdMKgY3JlYXRlZC7CoEVycm9ywqBpbsKgcHJldmlvdXPC
oHRlc3TCoHN1aXTCoChzdG9wT25GYWlsdXJlPSd0cnVlJynCoG9ywqBpbsKg
YW50wqBydW7CoGl0c2VsZi5Qb3dlcmVkIGJ5IEVkdVRlc3RlciBodHRwOi8v
MTAuMC4wLjUw


----==_mimepart_4fdfd77251dac_a0c1a825dc83328
Date: Tue, 19 Jun 2012 11:35:46 +1000
Mime-Version: 1.0
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit
Content-ID: <4fdfd7725ba26_a0c1a825dc8363d@RATionalxp.mail>

Ant&nbsp;run&nbsp;name&nbsp;&nbsp;:&nbsp;Edumate_upgrade_multi&nbsp;(express)<BR>Overall&nbsp;result:&nbsp;fail<BR>&nbsp;<BR>Ant&nbsp;run&nbsp;took:&nbsp;nobody&nbsp;knows&nbsp;;-)<BR>&nbsp;<BR>Restoring&nbsp;from&nbsp;/var/lib/edumate/bdrs/loquat/databases/weekly/LOQUAT.0.db2inst1.NODE0000.CATN0000.20120610023006.001<BR>Timestamp&nbsp;of&nbsp;backup&nbsp;image&nbsp;is:&nbsp;10&nbsp;Jun&nbsp;2012&nbsp;02:30<BR>Database&nbsp;RATIONAL&nbsp;restored&nbsp;successfully&nbsp;from&nbsp;database:&nbsp;LOQUAT<BR>restore&nbsp;took:&nbsp;0:00:38<BR><BR><BR>------------------------------<BR>Details&nbsp;for&nbsp;all&nbsp;Rational&nbsp;test&nbsp;suits<BR>------------------------------<BR><BR>Edumate_upgrade:&nbsp;log&nbsp;file&nbsp;not&nbsp;created.&nbsp;Error&nbsp;in&nbsp;previous&nbsp;test&nbsp;suit&nbsp;(stopOnFailure='true')&nbsp;or&nbsp;in&nbsp;ant&nbsp;run&nbsp;itself.<BR><BR><HR><BR>Powered by EduTester http://10.0.0.50

----==_mimepart_4fdfd77251dac_a0c1a825dc83328
Date: Tue, 19 Jun 2012 11:35:46 +1000
Mime-Version: 1.0
Content-Type: text/html;
 charset=UTF-8;
 filename=rational_ft_logframe.html
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename=rational_ft_logframe.html
Content-ID: <4fdfd77259308_a0c1a825dc834d0@RATionalxp.mail>

<HTML>
<HEAD>
<META HTTP-EQUIV="charset" CONTENT="utf-8">

update2

from pony google group (not my words)

I have a similar but simpler example.

Pony.mail to: 'me@test.com', 
   from: 'test@test.com',
   subject: 'test attachments',
   html_body: '<p>HTML</p>',
   body: 'Text',
   attachments: { File.basename(a_file_path) => File.read(a_file_path) }

I believe the content-type and the boundaries are not being set properly. With the above code, I will only see the attachment, I will not see the HTML or text bodies, although they are being sent correctly. I can see them if I look at alternatives (Option-Command-] on OSX Mail), and they appear correctly. The content-type is set to multipart/alternative, there is no Content-Disposition. I believe in this case, we are sending the html, plain text, and attachment all as alternatives, rather than 2 alternatives with an attachment, which I believe is mixed, although setting the content-type multipart/mixed doesn't seem to work either: all 3 appear inline with each other.

Radek
  • 13,813
  • 52
  • 161
  • 255
  • I talked to the developer of pony gem and did extensive testing and it looks like there is no bug on pony's side. I tested 2 more web based email clients and even Thunderbird. All with different results. Gmail gives the best results. – Radek Jul 26 '12 at 22:20
  • I have exactly the same problem when sending pdf attachment with :html_body. When using only :body the mail works fine. – Mika Tuupola Oct 10 '12 at 13:09
  • @Mika Please email to the author of the gem. – Radek Oct 10 '12 at 22:08

3 Answers3

1

My workaround is to rename .htm(l) files to .txt prior to attaching.

Radek
  • 13,813
  • 52
  • 161
  • 255
1

For me it worked by adding

headers: { "Content-Type" => "multipart/mixed" }

as a parameter to Pony.mail.

Nic
  • 11
  • 1
-1

Put this attachment under via option like this

Pony.mail to: 'me@test.com', 
   from: 'test@test.com',
   subject: 'test attachments',
   html_body: '<p>HTML</p>',
   body: 'Text',
   :via_options => { :port => '25',
                     :address => 'smtp.gmail.com',
                     :enable_starttls_auto => true, 
                     :attachments: { File.basename(a_file_path) => File.read(a_file_path)}
                    }
Htoo Myat Aung
  • 666
  • 1
  • 7
  • 16