es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Adjuntar archivo desde el servidor SFTP utilizando SSH.NET a MailMessage.

¿Hay alguna manera de hacerlo funcionar?

Estamos obteniendo un archivo de un servidor SFTP y necesitamos enviarlo por correo electrónico como parte de un trabajo de automatización CRON.

Esto es lo que tengo, pero no puedo enviar el archivo como un adjunto.

string host = @"scp.test.com";
string username = "test";
string password = "test";
string localFileName = System.IO.Path.GetFileName(@"localfilename");
string remoteDirectory = "/home/test/";

using (var sftp = new SftpClient(host, 65000, username, password))
{
sftp.Connect();
var files = sftp.ListDirectory(remoteDirectory);

foreach (var file in files)  
{
    if (!file.Name.StartsWith("."))
    {
        string remoteFileName = file.Name;

        using (SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com"))
        {
            using (MailMessage mail = new MailMessage())
            {
                mail.From = new MailAddress("test@gmail.com");
                mail.To.Add("test@test.co.za");
                mail.Subject = "Prueba de correo - 1";
                mail.Body = "Correo con adjunto";
                mail.IsBodyHtml = false;
                // No se puede convertir el archivo SFTP a Adjunto
                mail.Attachments.Add(file);

                SmtpServer.Port = 587;
                SmtpServer.UseDefaultCredentials = false;
                SmtpServer.Credentials =
                    new System.Net.NetworkCredential("test", "test");
                SmtpServer.EnableSsl = true;

                SmtpServer.Send(mail);
            }
        }
    }
}

}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    No, en la implementación actual no es posible adjuntar el archivo SFTP al correo electrónico. El método mail.Attachments.Add espera una ruta de archivo o un objeto de flujo, mientras que file en este caso es un objeto SftpFile devuelto por el cliente SFTP. Una posible solución sería descargar el archivo del servidor SFTP a un directorio local y luego adjuntarlo al correo electrónico. Esto se puede lograr utilizando el método sftp.DownloadFile para descargar el archivo a un directorio local y luego utilizando la clase System.IO.FileStream para crear un objeto de flujo que se puede pasar al archivo adjunto del correo electrónico.

Comments are closed.