Saya sedang menulis program untuk melampirkan file ke email. Saat ini saya menyimpan file menggunakan FileStream
ke disk, dan kemudian saya gunakan
System.Net.Mail.MailMessage.Attachments.Add(
new System.Net.Mail.Attachment("file name"));
Saya tidak ingin menyimpan file di disk, saya ingin menyimpan file di memori dan dari aliran memori meneruskan ini ke Attachment
.
c#
email
smtp
memorystream
Zain Ali
sumber
sumber
System.Net.Mime.MediaTypeNames.Application.Pdf
writer.Disopose()
terlalu dini untuk solusi saya tetapi yang lainnya adalah contoh yang bagus.ms.Position = 0;
sebelum membuat lampiran.Agak terlambat masuk - tapi semoga masih bermanfaat bagi seseorang di luar sana: -
Berikut cuplikan yang disederhanakan untuk mengirim string dalam memori sebagai lampiran email (file CSV dalam kasus khusus ini).
StreamWriter dan aliran yang mendasarinya tidak boleh dibuang hingga pesan telah dikirim (untuk menghindari
ObjectDisposedException: Cannot access a closed Stream
).sumber
stream.position = 0;
stream.Position=0
.Karena saya tidak dapat menemukan konfirmasi ini di mana pun, saya menguji apakah membuang MailMessage dan / atau objek Lampiran akan membuang aliran yang dimuat ke dalamnya seperti yang saya harapkan akan terjadi.
Itu muncul dengan pengujian berikut bahwa ketika MailMessage dibuang, semua aliran yang digunakan untuk membuat lampiran juga akan dibuang. Jadi selama Anda membuang MailMessage Anda, aliran yang digunakan untuk membuatnya tidak perlu penanganan lebih dari itu.
sumber
Jika Anda benar-benar ingin menambahkan .pdf, saya merasa perlu untuk mengatur posisi aliran memori ke Nol.
sumber
Jika yang Anda lakukan hanyalah memasang string, Anda dapat melakukannya hanya dalam 2 baris:
Saya tidak bisa menjalankan milik saya menggunakan server email kami dengan StreamWriter.
Saya pikir mungkin karena dengan StreamWriter Anda kehilangan banyak informasi properti file dan mungkin server kami tidak menyukai apa yang hilang.
Dengan Attachment.CreateAttachmentFromString () itu menciptakan semua yang saya butuhkan dan bekerja dengan baik!
Jika tidak, saya sarankan untuk mengambil file Anda yang ada di memori dan membukanya menggunakan MemoryStream (byte []), dan melewatkan StreamWriter secara bersamaan.
sumber
Saya mendapatkan pertanyaan ini karena saya perlu melampirkan file Excel yang saya buat melalui kode dan tersedia sebagai
MemoryStream
. Saya dapat melampirkannya ke pesan email tetapi dikirim sebagai file 64Bytes alih-alih ~ 6KB seperti yang dimaksudkan. Jadi, solusi yang berhasil untuk saya adalah ini:Mengatur nilai
attachment.ContentDisposition.Size
izinkan saya mengirim pesan dengan ukuran lampiran yang benar.sumber
gunakan aliran memori TERBUKA LAINNYA:
contoh untuk lauch pdf dan kirim pdf ke MVC4 C # Controller
sumber
stream.Position=0;
adalah garis yang membantu saya. tanpanya attcahment saya hanya 504 byte yang dipasang dari beberapa KBSaya pikir kode ini akan membantu Anda:
sumber