ASP CDOSYS SMTP Email attachments are being corrupted

R

rschaeferhig

I have an ASP page that uses CDOSYS to send a simple HTML format email with a
PDF attachment. When I open the PDF attached to the email it shows up as a
blank page. I log into the web server console and open the same PDF in the
source directory and it opens fine. I run a binary comparison of the source
and attached files and there's a difference: one byte, x'2E' is missing at
offset x'0231'. If I save the attached file and use a hex editor to insert
the x'2E' the file opens just like the original.

Any ideas? I'm baffled...
 
A

Anthony Jones

rschaeferhig said:
I have an ASP page that uses CDOSYS to send a simple HTML format email with a
PDF attachment. When I open the PDF attached to the email it shows up as a
blank page. I log into the web server console and open the same PDF in the
source directory and it opens fine. I run a binary comparison of the source
and attached files and there's a difference: one byte, x'2E' is missing at
offset x'0231'. If I save the attached file and use a hex editor to insert
the x'2E' the file opens just like the original.

Any ideas? I'm baffled...

Windows 2003 server right?

I've come across this at a few of my client's sites but I haven't found out
why it happens. I seems that CDOSYS ends up using binary encoding rather
than Base64 encoding when creating the attachment body part. It doesn't
happen all system though.

In the end I just used the following code to create the attachment myself:-


Function AddAttachment(Message, Source, FileName, MimeType)

Dim oPart ' As IBodyPart
Dim oStreamIn ' As ADODB.Stream
Dim oStreamOut ' As ADODB.Stream

Set oPart = Message.Attachments.Add

oPart.ContentMediaType = MimeType & "; Name = """ & FileName & """"
oPart.ContentTransferEncoding = "base64"
oPart.Fields("urn:schemas:mailheader:content-disposition").Value =
"attachment; FileName = """ & FileName & """"
oPart.Fields.Update

Set oStreamIn = Server.CreateObject("ADODB.Stream")

oStreamIn.Open
oStreamIn.Type = adTypeBinary
oStreamIn.LoadFromFile Source

Set oStreamOut = oPart.GetDecodedContentStream

oStreamIn.CopyTo oStreamOut

oStreamOut.Flush

oStreamIn.Close

Set AddAttachment = oPart

End Function


Given a MyStuff.PDF in the folder C:\temp this function is called as:-



Dim oMsg

Set oMsg = Server.CreateObject("CDO.Message")

'Set From, To, etc.
oMsg.TextBody = "Blah Blah"

AddAttachment oMsg, "c:\temp\MyStuff.pdf", "MyStuff.pdf", "application/pdf"

oMsg.Send



HTH

Anthony.
 
R

rschaeferhig

Anthony Jones said:
Windows 2003 server right?

I've come across this at a few of my client's sites but I haven't found out
why it happens. I seems that CDOSYS ends up using binary encoding rather
than Base64 encoding when creating the attachment body part. It doesn't
happen all system though.

In the end I just used the following code to create the attachment myself:-


Function AddAttachment(Message, Source, FileName, MimeType)

Dim oPart ' As IBodyPart
Dim oStreamIn ' As ADODB.Stream
Dim oStreamOut ' As ADODB.Stream

Set oPart = Message.Attachments.Add

oPart.ContentMediaType = MimeType & "; Name = """ & FileName & """"
oPart.ContentTransferEncoding = "base64"
oPart.Fields("urn:schemas:mailheader:content-disposition").Value =
"attachment; FileName = """ & FileName & """"
oPart.Fields.Update

Set oStreamIn = Server.CreateObject("ADODB.Stream")

oStreamIn.Open
oStreamIn.Type = adTypeBinary
oStreamIn.LoadFromFile Source

Set oStreamOut = oPart.GetDecodedContentStream

oStreamIn.CopyTo oStreamOut

oStreamOut.Flush

oStreamIn.Close

Set AddAttachment = oPart

End Function


Given a MyStuff.PDF in the folder C:\temp this function is called as:-



Dim oMsg

Set oMsg = Server.CreateObject("CDO.Message")

'Set From, To, etc.
oMsg.TextBody = "Blah Blah"

AddAttachment oMsg, "c:\temp\MyStuff.pdf", "MyStuff.pdf", "application/pdf"

oMsg.Send



HTH

Anthony.
 
R

rschaeferhig

Oops.

Windows 2000 Server AND Windows 2003 Server, but I'll give it a shot. I
suspected an encoding problem, I've just never had any experience doing my
own encoding so I had no idea where to start.

thanks.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,143
Messages
2,570,822
Members
47,368
Latest member
michaelsmithh

Latest Threads

Top