- es.davy.ai/
- Programación /
- Adjuntar archivo desde el servidor SFTP utilizando SSH.NET a MailMessage.
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);
}
}
}
}
}
Answer
Comments are closed.
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 quefile
en este caso es un objetoSftpFile
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étodosftp.DownloadFile
para descargar el archivo a un directorio local y luego utilizando la claseSystem.IO.FileStream
para crear un objeto de flujo que se puede pasar al archivo adjunto del correo electrónico.