Trying to send an email with attachments


#1

I am working on a script that will send an email with a .csv file
attachment. I can get everything set correctly, and the email gets
sent properly. The problem is with the attachments. This maybe a MIME
thing instead of something wrong with my script. My script is based
on an example from Hal F.'s The Ruby Way book. If anyone has any
suggestions or see something I did wrong I would greatly appreciate
it. Below is my script. Below that is what the email I receive looks
like.

Thanks!

Begin Script

require ‘time’
require ‘net/smtp’
require ‘date’

##################################################################

This portion of the code assembles the filenames of the files

to be attached in the email

##################################################################

time = Time.now #set time object to the current time
month = time.month #grab the number of the month from the
current time
day = time.day #grab the day of the current time
year = time.year #grab the year of the current time

month = month + 1 #to match the format of Ian’s file names

if month < 10 #formatting
fullmonth = “0” + month.to_s
else
fullmonth = month.to_s
end

if day < 10
fullday = “0” + day.to_s
else
fullday = day.to_s
end #end of formatting

filename1 = “pagecount-” + year.to_s + fullmonth + fullday + “.csv”
#assemble file name

#####################################

Attach files and send the email

####################################

def text_plus_attachment (subject, body, filename)
marker = “MIME_boundary”
middle = “–#{marker}\n”
ending = “–#{middle}–\n”
content = “Content-Type: Multipart/Related; " + “boundary=#{marker};
" + “typw=text/plain”
head1 = <<-EOF
MIME-Version: 1.0
#{content}
Subject: #{subject}
EOF
binary = File.read(filename)
encoded = [binary].pack(“m”) # base64 econding
head2 = <<-EOF
Content-Description: “#{filename}”
Content-Type: text/plain; name=”#{filename}”
Content-Transfer-Encoding: Binary
Content-Disposition: attachment; filename="#{filename}"

EOF

#Return

head1 + middle + body + middle + head2 + encoded + ending

end

body = <<EOF
The GFIFax Monthly report is attached.
EOF

mailtext = text_plus_attachment(“Monthly Report”, body,
filename1)

Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
Net::SMTP.start(‘smtp.xxx.xxx’, ‘25’, ‘umr.edu’, ‘removed_email_address@domain.invalid’,
‘xxx’, :plain) do |smtp|
smtp.sendmail(mailtext, ‘removed_email_address@domain.invalid’, [‘removed_email_address@domain.invalid’])
end

End Script

Begin Email results (This is all in the body of the email
instead of in the headers)

MIME-Version: 1.0
Content-Type: Multipart/Related; boundary=MIME_boundary; typw=text/
plain
Subject: GFIFax Service Monthly Report --MIME_boundary The GFIFax
Monthly report is attached.
–MIME_boundary
Content-Description: “pagecount-20070631.csv”
Content-Type: text/plain; name=“pagecount-20070631.csv”
Content-Transfer-Encoding: Uencode
Content-Disposition: attachment; filename=“pagecount-20070631.csv”

M4V5N="!&87AE<RPL+I5<V5R240L(%!A9V5S(%-E;G0L($QI;6ET+"!/=F5R M86=E"C4W,S(P,C(Q,30L,BPU,"PP"C4W,S(P,C(Q,34L-"PU,"PP"C4W,S,T M,3<X-#8L,2PU,"PP"@H*4F5C96EV960@1F%X97,L+"P*57-E<DE$+%!A9V5S M(%)E8V5I=F5D+"!,:6UI="P@3W9E<F%G90HU-S,S-#$V,C,S+#$R+#$P,"PP M"C4W,S(P,C(Q,30L,RPQ,#L,HU-S,S-#$T.#@Y+#(Q.2PQ,#L,3$Y"C4W
M,S,T,38R-S$…@L.3DY.2PP"C4W,S(P,C(S.3(L,CU+#DY.3DL,HU-S,R
E,#(R,SDW+#4T+#DY.3DL,`HU-S,R,#(R,SDV+#$Q+#$P,“PP”@``
----MIME_boundary

End Email

I hope someone can help me out!

Thanks!