Tenho um aplicativo C # que envia relatórios de planilhas do Excel por e-mail por meio de um servidor Exchange 2007 usando SMTP. Eles chegam bem para usuários do Outlook, mas para usuários do Thunderbird e Blackberry, os anexos foram renomeados como "Parte 1.2".
Encontrei este artigo que descreve o problema, mas não parece me fornecer uma solução alternativa. Não tenho controle do servidor Exchange, portanto não posso fazer alterações nele. Há algo que eu possa fazer no final do C #? Tentei usar nomes de arquivo curtos e codificação HTML para o corpo, mas nenhum dos dois fez diferença.
Meu código de envio de e-mail é simplesmente este:
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);
}
Obrigado por qualquer ajuda.
c#
email
smtp
attachment
Jon
fonte
fonte
Attachment.Name
propriedade?Name
é exibido como o nome do anexo quando o e-mail com o anexo é recebido. Portanto, você pode tentar qualquer valor.Respostas:
Código simples para enviar e-mail com anexo.
fonte: http://www.coding-issues.com/2012/11/sending-email-with-attachments-from-c.html
fonte
using(SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com")) { //code goes here using(MailMessage mail = new MailMessage()){ //code goes here } }
Preencher explicitamente os campos ContentDisposition resolveu o problema.
BTW , no caso do Gmail, você pode ter algumas exceções sobre SSL seguro ou mesmo porta!
fonte
FileInfo
objeto para obterCreationTime
,LastWriteTime
, eLastAccessTime
propriedades? Você está criando um para obter aLength
propriedade de qualquer maneira.Aqui está um código de envio de e-mail simples com anexo
Leia mais Enviando e-mails com anexo em C #
fonte
Completando a solução de Ranadheer, usando Server.MapPath para localizar o arquivo
fonte
Server.MapPath
vem e quando deve ser usado?fonte
Fiz um pequeno código para fazer isso e quero compartilhá-lo com você.
Aqui está o código principal:
fonte
Experimente isto:
fonte
Tentei o código fornecido por Ranadheer Reddy (acima) e funcionou muito bem. Se você estiver usando um computador da empresa com um servidor restrito, pode ser necessário alterar a porta SMTP para 25 e deixar seu nome de usuário e senha em branco, pois eles serão preenchidos automaticamente pelo administrador.
Originalmente, tentei usar o EASendMail do gerenciador de pacotes nugent, apenas para perceber que é uma versão paga com 30 dias de avaliação. Não desperdice seu tempo com ele, a menos que planeje comprá-lo. Percebi que o programa rodou muito mais rápido usando EASendMail, mas para mim, o grátis superou rápido.
Apenas meus 2 centavos.
fonte
Use este método em seu serviço de e-mail, ele pode anexar qualquer corpo de e-mail e anexos ao Microsoft Outlook
usando Outlook = Microsoft.Office.Interop.Outlook; // Faça referência a Microsoft.Office.Interop.Outlook de local ou nuget se for usar um agente de compilação posteriormente
fonte