Tengo una aplicación C # que envía por correo electrónico informes de hoja de cálculo de Excel a través de un servidor Exchange 2007 mediante SMTP. Estos llegan bien para los usuarios de Outlook, pero para los usuarios de Thunderbird y Blackberry los archivos adjuntos han sido renombrados como "Parte 1.2".
Encontré este artículo que describe el problema, pero no parece darme una solución. No tengo control del servidor Exchange, por lo que no puedo realizar cambios allí. ¿Hay algo que pueda hacer en el extremo de C #? Intenté usar nombres de archivo cortos y codificación HTML para el cuerpo, pero ninguno hizo una diferencia.
Mi código de envío de correo es simplemente esto:
public static void SendMail(string recipient, string subject, string body, string attachmentFilename)
{
SmtpClient smtpClient = new SmtpClient();
NetworkCredential basicCredential = new NetworkCredential(MailConst.Username, MailConst.Password);
MailMessage message = new MailMessage();
MailAddress fromAddress = new MailAddress(MailConst.Username);
// setup up the host, increase the timeout to 5 minutes
smtpClient.Host = MailConst.SmtpServer;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = basicCredential;
smtpClient.Timeout = (60 * 5 * 1000);
message.From = fromAddress;
message.Subject = subject;
message.IsBodyHtml = false;
message.Body = body;
message.To.Add(recipient);
if (attachmentFilename != null)
message.Attachments.Add(new Attachment(attachmentFilename));
smtpClient.Send(message);
}
Gracias por cualquier ayuda.
c#
email
smtp
attachment
Jon
fuente
fuente
Attachment.Name
propiedad?Name
muestra como el nombre del archivo adjunto cuando se recibe el correo electrónico con el archivo adjunto. Entonces puedes probar cualquier valor.Respuestas:
Código simple para enviar correo electrónico con adjunto.
fuente: http://www.coding-issues.com/2012/11/sending-email-with-attachments-from-c.html
fuente
using(SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com")) { //code goes here using(MailMessage mail = new MailMessage()){ //code goes here } }
Completar explícitamente los campos ContentDisposition funcionó.
Por cierto , en el caso de Gmail, es posible que tenga algunas excepciones sobre ssl secure o incluso port.
fuente
FileInfo
objeto para obtenerCreationTime
,LastWriteTime
yLastAccessTime
propiedades? DeLength
todos modos, está creando uno para obtener la propiedad.Aquí hay un código de envío de correo simple con archivo adjunto
Leer más Envío de correos electrónicos con archivos adjuntos en C #
fuente
Completando la solución de Ranadheer, usando Server.MapPath para ubicar el archivo
fuente
Server.MapPath
viene y cuándo debe usarse?fuente
He creado un código corto para hacer eso y quiero compartirlo contigo.
Aquí el código principal:
fuente
Prueba esto:
fuente
Probé el código proporcionado por Ranadheer Reddy (arriba) y funcionó muy bien. Si está utilizando una computadora de la empresa que tiene un servidor restringido, es posible que deba cambiar el puerto SMTP a 25 y dejar su nombre de usuario y contraseña en blanco, ya que su administrador los completará automáticamente.
Originalmente, intenté usar EASendMail desde el administrador de paquetes nugent, solo para darme cuenta de que es una versión de pago con una prueba de 30 días. No pierda su tiempo con él a menos que planee comprarlo. Me di cuenta de que el programa se ejecutaba mucho más rápido con EASendMail, pero para mí, lo gratuito superó rápidamente.
Solo mis 2 centavos.
fuente
Utilice este método en su servicio de correo electrónico, puede adjuntar cualquier cuerpo de correo electrónico y archivos adjuntos a Microsoft Outlook.
usando Outlook = Microsoft.Office.Interop.Outlook; // Haga referencia a Microsoft.Office.Interop.Outlook desde local o nuget si utilizará un agente de compilación más adelante
fuente