Tengo un proyecto en el que estoy usando un generador de PDF para enviar un archivo a un usuario. Nos gustaría dar al usuario la opción de adjuntar este archivo a un correo electrónico en su lugar, y estamos teniendo problemas para usar el objeto Stream y la lógica de Adjuntos juntos.Transmitir como un archivo adjunto a System.Net.Mail es 0 bytes
Comenzamos con ABCpdf, que tiene dos métodos de guardado: se puede guardar en un flujo, o si le da una cadena, intentará guardar en un archivo en el disco allí. Hemos hecho ambas cosas sin problema.
Stream stream = new MemoryStream();
myPdf.Save(stream);
Todo es sobre todo fresco en este punto - stream
tiene varios kilobytes de datos, y si .Save() en un archivo, se obtiene un archivo real con el mismo número de bytes.
Así que adjuntar a un correo electrónico en este momento (después de inicializar el objeto de correo, fijando a: y de :, etc.):
mail.Attachments.Add(new Attachment(stream, "myPdf.pdf"));
mail.Send();
... que nos llega hasta la recepción de un correo electrónico con 0 bytes, pero el nombre de archivo correcto.
Todos los ejemplos que encuentro en línea usan un StreamReader o un StreamWriter o un Flush() o algo así. Siempre parece que es más complicado que simplemente pasar un Stream, pero tal vez solo una o dos líneas más complicadas. Ninguno de esos ejemplos comienza con un Stream: siempre intentan convertir un array en un Stream para mostrar lo fácil que es, o tomar un archivo del disco (lo cual no podemos hacer, y es por eso que estamos emocionados usar un Stream).
De todos modos, si alguien puede explicar lo que estoy haciendo mal o lo que debería estar haciendo, realmente lo agradecería. Gracias.
En caso de que ayuda a nadie, mi apego fue de 64 bytes, pero al abrirla dijo que el archivo no es válido. La solución a continuación también solucionó esto, por lo que no es solo si dice 0 bytes. –