Enviar archivo adjunto por correo

18/01/2010 - 10:20 por Catalin Lungu | Informe spam
Hola a todos,
Sabe alguien como podria enviar un archivo adjunto comprimido por correo.
Bueno enviarlo es facil, el problema es que el fichero a la hora de mandarlo
lo tengo que abrir, leer y preparalo en memoria para luego enviarlo. Lo
tengo que hacer de esta manera porque de la otra, es decir pasarle la ruta
del fichero a la clase Attachment, este se queda pillado y no hay forma de
borrarlo una vez enviado hasta que no se sale del programa. Entonces el
fichero adjunto lo tengo que preparar en la memoria y asi me deja borrarlo.
Lo estoy haciendo de esta forma pero no va bien.

public Attachment PreparaAdjuntoMemoria(string ruta, string fichero)
{
string contenido = "";
using (StreamReader sr = new StreamReader(ruta + '\\' + fichero))
{
contenido = sr.ReadToEnd();
sr.Close();
}
if (contenido != "")
{
MemoryStream memoryStream = new MemoryStream();
StreamWriter memoryWriter = new StreamWriter(memoryStream);
memoryWriter.Write(buffer);
memoryWriter.Flush();
memoryStream.Seek(0, SeekOrigin.Begin);
Attachment attachment = new Attachment(memoryStream, fichero,
MediaTypeNames.Application.Zip);
return attachment;
}
return null;
}
 

Leer las respuestas

#1 Catalin Lungu
18/01/2010 - 12:17 | Informe spam
Bueno me contesto a mi mismo.

public Attachment PreparaAdjuntoMemoria(string ruta, string fichero)
{
byte[] contenido;
Attachment attachment = null;
FileStream fs = File.OpenRead(ruta + "\\" + fichero);
BinaryReader br = new BinaryReader(fs);
contenido = new byte[fs.Length];
br.Read(contenido, 0, (int)fs.Length);
br.Close();
if (contenido.Length != 0)
{
MemoryStream memoryStream = new MemoryStream(contenido);
memoryStream.Flush();
memoryStream.Seek(0, SeekOrigin.Begin);
attachment = new Attachment(memoryStream, fichero,
MediaTypeNames.Application.Zip);
return attachment;
}
return attachment;
}


De todas formas ahora tengo otro problema, y es que a la hora de enviar un
correo grande me el error "Se excedió el tiempo de espera de la operación".
Hay algun timeout que configurar?

Preguntas similares