Отправка электронной почты увеличивает размер файла атрибутов в .net - PullRequest
1 голос
/ 22 декабря 2009

В настоящее время я работаю с фрагментом кода, который необходимо отправить вложение в электронная почта, которую он генерирует. Вложение в формате PDF. Из-за требований я невозможно сохранить PDF и отправить его, поэтому мне пришлось создать вложение потока памяти.

Проблема, с которой я столкнулся, заключается в том, что размер файла составляет _500 КБ. Однако сохраните файл на моем машина и это около 370KB.

Это увеличение размера файла недопустимо. кто-нибудь сталкивался с этой проблемой раньше? Если так, то как они обошли проблему.

Ниже приведен раздел кода. «

Dim memStream As System.IO.MemoryStream = Nothing
'assign number to the PDF name
Dim filename As String = req.GetAccountNumber()
'add file extension
filename &= ".pdf"

'initialise the memory stream
memStream = New System.IO.MemoryStream()

'generate the pdf and put it in a byte array
Dim arrBytData() As Byte = CType(PDFRequest(),Byte()))

'flush the stream
memStream.Flush()

'Create new instances of the message and attachments
'and intialise them
Dim msg As New System.Net.Mail.MailMessage(req.EmailFrom, req.EmailTo)
Dim att As New System.Net.Mail.Attachment(memStream, filename)

With msg
     .Attachments.Add(att)
     .Body = req.EmailBody
     .Subject = req.EmailSubject
End With

'connect to the server and send the message
Dim client As New System.Net.Mail.SmtpClient()
client.Host = PDFService(Of T).mSMTPServer
client.Send(msg)

'Close our stream
memStream.Close()
msg = Nothing

Ответы [ 2 ]

4 голосов
/ 22 декабря 2009

Проблема заключается в том, что вложение должно быть закодировано с помощью Base64 - необработанные двоичные данные не «выживут» в электронной почте, поэтому их необходимо кодировать в форму, в которой используются только определенные «безопасные» символы. Это увеличивает размер - двоичный файл имеет 256 «символов», в то время как кодировка Base64 имеет только 64. На самом деле это не так.

2 голосов
/ 22 декабря 2009

Увеличение, вероятно, связано с кодированием base64 двоичных данных, когда они прикрепляются к электронному письму. AFAIK, вы ничего не можете с этим поделать.

...