Estou usando a SmtpClient
biblioteca para enviar e-mails usando o seguinte:
SmtpClient client = new SmtpClient();
client.Host = "hostname";
client.Port = 465;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.EnableSsl = true;
client.Credentials = new NetworkCredential("User", "Pass);
client.Send("from@hostname", "to@hostname", "Subject", "Body");
O código funciona bem em meu ambiente de teste, mas quando uso servidores SMTP de produção, o código falha com uma SmtpException
mensagem "Falha no envio de email". com um interno IOException
"Não é possível ler dados da conexão de transporte: net_io_connectionclosed".
Confirmei que os firewalls não são um problema. A porta abre perfeitamente entre o cliente e o servidor. Não tenho certeza do que mais poderia gerar esse erro.
Mude a porta de 465 para 587 e funcionará.
fonte
Para qualquer pessoa que se depara com esta postagem procurando uma solução e você configurou o sendgrid SMTP via Azure.
O nome de usuário não é o nome de usuário que você configurou quando criou o objeto sendgrid no azure. Para encontrar seu nome de usuário;
Espero que isto ajude!
fonte
Você também pode ter que alterar a configuração "aplicativos menos seguros" na sua conta do Gmail. EnableSsl, use a porta 587 e habilite "aplicativos menos seguros". Se você pesquisar no Google a parte de aplicativos menos seguros, há páginas de ajuda do Google que o vincularão diretamente à página de sua conta. Esse era o meu problema, mas agora está tudo funcionando graças a todas as respostas acima.
fonte
Tentei todas as respostas acima, mas ainda recebo esse erro com a conta do Office 365. O código parece funcionar bem com a conta do Google e smtp.gmail.com ao permitir aplicativos menos seguros.
Alguma outra sugestão que eu pudesse tentar?
Aqui está o código que estou usando
ATUALIZAÇÃO E COMO RESOLVEI:
Resolvido o problema alterando o cliente Smtp para Mailkit. O cliente Smtp System.Net.Mail agora não é recomendado para uso pela Microsoft devido a problemas de segurança e você deve usar o MailKit. O uso do Mailkit gerou mensagens de erro mais claras que pude entender, encontrando a causa raiz do problema (problema de licença). Você pode obter o Mailkit baixando-o como um pacote Nuget .
Leia a documentação sobre o cliente Smtp para obter mais informações: https://docs.microsoft.com/es-es/dotnet/api/system.net.mail.smtpclient?redirectedfrom=MSDN&view=netframework-4.7.2
Aqui está como eu implementei SmtpClient com MailKit
fonte
A sua biblioteca SMTP oferece suporte para conexão criptografada? O servidor de e-mail pode estar esperando uma conexão TLS segura e, portanto, fechando a conexão na ausência de um handshake TLS
fonte
SmtpClient
biblioteca .NET padrão , ela oferece suporte a criptografia, o servidor requer criptografia e eu a configureiclient.EnableSssl = true;
. Embora eu ache que vou prosseguir um pouco mais com o Wireshark.Se você estiver usando um servidor SMTP na mesma caixa e seu SMTP estiver vinculado a um endereço IP em vez de "Qualquer atribuído", ele pode falhar porque está tentando usar um endereço IP (como 127.0.0.1) que o SMTP não está funcionando atualmente em.
fonte
Para elevar o que jocull mencionou em um comentário, eu estava fazendo tudo mencionado neste tópico e eliminando ... porque o meu estava em um loop para ser atropelado continuamente; após a primeira vez no loop, às vezes ele falhava. Sempre trabalhei pela primeira vez no loop.
Para ficar claro: o loop inclui a criação de SmtpClient e, em seguida, fazer .Send com os dados corretos. O SmtpClient foi criado dentro de um bloco try / catch, para detectar erros e ter certeza de que o objeto foi destruído antes do final do loop.
No meu caso, a solução foi garantir que SmtpClient fosse descartado após cada vez no loop (seja por meio da instrução using () ou fazendo um descarte manual). Mesmo se o objeto SmtpClient estiver sendo destruído implicitamente no loop, o .NET parece estar deixando coisas por aí para entrar em conflito com a próxima tentativa.
fonte
Mude o seu número de porta de 465 para 587
fonte
removendo
parecia resolver isso para mim.
fonte
No meu caso, o cliente esqueceu de adicionar um novo endereço IP em suas configurações de SMTP. Abra o IIS 6.0 no servidor que configura o smtp, clique com o botão direito do mouse no servidor virtual Smtp, escolha Propriedades, guia Acesso, clique em Conexões, adicione o endereço IP do novo servidor. Em seguida, clique em Relay e adicione também o endereço IP do novo servidor. Isso resolveu meu problema.
fonte
Tente isto: aqui está o código que estou usando para enviar e-mails para vários usuários.
fonte
SmtpClient
também é Descartável, por isso deve ser embrulhado em umusing
blocoNo caso de todas as soluções acima não funcionarem para você, tente atualizar o arquivo a seguir para o seu servidor (por publicação, quero dizer, e uma compilação anterior seria útil).
Após a atualização, você verá este erro. como eu resolvi com esta solução.
fonte
Para o Outlook, use a configuração a seguir que não está me dando erro
Nome do servidor SMTP smtp-mail.outlook.com
Porta SMTP 587
fonte
Este erro é muito genérico. Pode ser devido a vários motivos, como O servidor de e-mail está incorreto. Algumas empresas de hospedagem usam o formato mail.domainname. Se você apenas usar o nome de domínio, não funcionará. verifique as credenciais nome do host nome do usuário senha, se necessário Verifique com a empresa de hospedagem.
fonte
No meu caso, o IP do servidor web foi bloqueado no servidor de e-mail, ele precisa ser desbloqueado pela empresa de hospedagem e colocá-lo na lista de permissões. Além disso, use a porta 587.
fonte
Se o seu servidor de e-mail for Gmail (smtp.google.com), você receberá este erro quando atingir o limite de mensagens. O Gmail permite o envio por SMTP de até 2.000 mensagens por 24 horas.
fonte
Corri para isso ao usar smtp.office365.com, usando a porta 587 com SSL. Consegui fazer login na conta usando portal.office.com e confirmei que a conta tinha uma licença. Mas quando disparei o código para enviar e-mails, continuei recebendo o erro net_io_connectionclosed.
Levei algum tempo para descobrir, mas o administrador do Exchange encontrou o culpado. Estamos usando o O365, mas o servidor Exchange estava em um ambiente híbrido. Embora a conta que estávamos tentando usar fosse sincronizada com o Azure AD e tivesse uma licença válida do O365, por algum motivo a caixa de correio ainda residia no servidor Exchange híbrido - não no Exchange online. Depois que o administrador do Exchange usou o comando "Move-Mailbox" para mover a caixa de correio do servidor híbrido do Exchange para o O365, poderíamos usar o código para enviar e-mails usando o 365.
fonte
Prepare: 1. HostA é o servidor virtual SMTP com porta padrão 25 2. HostB é uma estação de trabalho na qual eu envio e-mail com SmtpClient e simulo uma rede instável que uso desajeitado
Caso 1 fornecido se HostB for 2008R2 Quando eu enviar e-mail. Então esse problema ocorre.
Caso 2 fornecido se HostB for 2012 ou uma versão superior quando eu enviar e-mail. Em seguida, o e-mail foi enviado.
Conclusão: essa causa raiz está relacionada ao Windows Server 2008R2.
fonte