2010-04-23 14 views
5

Ya tengo un servicio de Windows C# que usamos internamente para monitorear un directorio en nuestra red y cuando detecta un cambio envía un correo electrónico usando nuestro servidor SMTP interno a los grupos de personas especificados.Enviar correo electrónico automatizado a través de Windows que tiene una imagen incrustada usando C#

Ahora tengo que incrustar una imagen en ese correo electrónico automatizado. Entiendo que necesito crear una AlternateView y un Recurso vinculado y usar el del Recurso vinculado cID en la Vista alternativa, correcto.

Lo que no entiendo es ¿dónde pongo la imagen? ¿Debo agregarlo a mi proyecto de servicio y configurar ? De ser así, ¿cómo accedería luego al crear mi LinkedResource? Además, ¿dónde pongo la imagen en el Servidor que aloja el Servicio?

Esto es lo que tengo hasta ahora, pero parece que no funciona. No recibo ningún error, del que soy consciente, pero tampoco recibo un correo electrónico. Supongo que está buscando la imagen pero que no la tengo en la ubicación correcta.

// This event is called when an object(file,folder) is created in the srcPath 
    void WatcherCreated(object source , FileSystemEventArgs e) 
    { 
     var folderName = e.Name; 
     var folderPath = e.FullPath; 

     MailMessage mail = new MailMessage(); 

     mail.From = new MailAddress("[email protected]"); 
     mail.To.Add("[email protected]"); 

     mail.Subject = "New Enrollment for " + folderName; 

     AlternateView plainView = AlternateView.CreateAlternateViewFromString("This is the plain text view", null, 
                       "text/html"); 

     AlternateView htmlView = 
      AlternateView.CreateAlternateViewFromString("Here is an embedded image. <img src=cid:enrollProcessID>", 
                 null, "text/html"); 

     LinkedResource imageResourceLink = new LinkedResource("C:\\FolderMonitorService\\EnrollmentProcess.jpg") 
               {ContentId = "enrollProcessID"}; 

     htmlView.LinkedResources.Add(imageResourceLink); 

     mail.AlternateViews.Add(plainView); 
     mail.AlternateViews.Add(htmlView); 

     var smtp = new SmtpClient("internalSMTP"); 
     smtp.Send(mail); 
    } 
+0

@Refracted: ¿Cuál es la imagen de poner el daño en la carpeta del servicio y acceder a ella por la ruta del archivo? –

+0

@KMan: No tengo idea ... ¿es eso lo que debería hacer? ¿La "carpeta de servicios" es la carpeta desde la que instalé el exe o hay un servicio especial de MS en el hogar? –

+0

Depende de qué/cómo elige almacenar la aplicación/datos. Es perfectamente normal guardar la imagen como un recurso incrustado; y mejor guardarlo como un archivo separado en caso de que planee cambiar la imagen en el futuro. –

Respuesta

2

En realidad, estás mal interpretando el error aquí .. Su código es absolutamente bien en la medida de lo que pueda ver ... Solo para verificarlo, lo copié en una aplicación simple, actualicé la ruta local a una imagen y la ejecuté - Recibí el correo electrónico de inmediato.

Además, si le doy un camino equivocado en un archivo - será una excepción inmediatamente, indicando que el archivo no se encuentra :)

Si usted no recibe la imagen en su buzón de correo que podría ser que los filtros de spam se la filtra .. estoy descartando la configuración del servidor SMTP aquí, porque se dice que el envío de un texto plano única versión funciona :)

UPD: lo que recomiendo por experiencia personal está cambiando la codificación a UTF8. Este fue uno de los criterios por los cuales mis mensajes de correo fueron eliminados por los filtros de spam. Aparte de eso, tu código se ve bien, y no veo ninguna razón para que no funcione. Funciona de mi lado después de todo:)

Cuestiones relacionadas