Home All Groups Group Topic Archive Search About

ASP CDOSYS SMTP Email attachments are being corrupted



Author
27 Mar 2006 5:38 PM
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...

Author
27 Mar 2006 8:57 PM
Anthony Jones
"rschaeferhig" <rschaefer***@discussions.microsoft.com> wrote in message
news:781065F5-1E09-447E-8736-D43826913B04@microsoft.com...
> 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.
Author
27 Mar 2006 11:20 PM
rschaeferhig
Show quote
"Anthony Jones" wrote:

>
> "rschaeferhig" <rschaefer***@discussions.microsoft.com> wrote in message
> news:781065F5-1E09-447E-8736-D43826913B04@microsoft.com...
> > 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.
>
>
>
Author
27 Mar 2006 11:21 PM
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.

Show quote
"Anthony Jones" wrote:

>
> "rschaeferhig" <rschaefer***@discussions.microsoft.com> wrote in message
> news:781065F5-1E09-447E-8736-D43826913B04@microsoft.com...
> > 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.
>
>
>
Author
29 Mar 2006 10:53 PM
sanj
I had the same problem, have you tried sending via CDNOTS?

Sanj

Show quote
"rschaeferhig" wrote:

> 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.
>
> "Anthony Jones" wrote:
>
> >
> > "rschaeferhig" <rschaefer***@discussions.microsoft.com> wrote in message
> > news:781065F5-1E09-447E-8736-D43826913B04@microsoft.com...
> > > 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.
> >
> >
> >

AddThis Social Bookmark Button