Em vez de confiar no meu host para enviar um email, eu estava pensando em enviar as mensagens de email usando minha conta do Gmail . Os e-mails são personalizados para as bandas que eu toco no meu programa.
< systemnetmail.com > é provavelmente o site mais absurdamente completo dedicado a um único namespace .NET ... mas tem TUDO o que você poderia querer saber sobre o envio de email via .NET, seja ASP.NET ou Desktop. < systemwebmail.com > era o URL original da postagem, mas não deve ser usado para o .NET 2.0 e superior.
Você ainda pode obter erros de logon do usuário se o Google decidir de repente que você enviou muitos nos últimos xx minutos. Você sempre deve adicionar um trySend, se os erros durarem um pouco e, em seguida, tentar novamente.
2625 Jason Jason
72
Nota interessante: se você trocar 'UseDefaultCredentials = false' e 'Credentials = ...', ele não será autenticado.
21139 Nathan Wheeler
13
Não há problemas com o SPF usando esse método. Todo cliente de email pode ser configurado para fazer exatamente isso. Você só pode ter problemas se usar seu próprio servidor (ou seja, algo mais que isso smtp.gmail.com) [email protected]como remetente. Btw: smtp.gmail.comsubstitui automaticamente o endereço do remetente, se não for o seu.
Meinersbur 18/03/10
24
Eu estava tendo dificuldades para fazer isso funcionar, mesmo tentando vários ajustes. Conforme sugerido em uma postagem relacionada, descobri que era realmente o meu antivírus que estava impedindo que os emails fossem enviados com êxito. O antivírus em questão é o McAffee e sua "Proteção de acesso" possui uma categoria "Proteção padrão antivírus" que possui a regra "Impedir que worms de mala direta em massa enviem email". Ajustar / desabilitar essa regra deixou esse código funcionando para mim!
yourbuddypal
18
Eu estava recebendo a mensagem de erro 5.5.1 Autenticação necessária até perceber que estava testando com uma conta (minha pessoal) que tinha a autenticação de dois fatores ativada. Depois que usei uma conta que não tinha, funcionou bem. Eu também poderia ter gerado uma senha para o meu aplicativo que estava testando no meu conta pessoal, mas não queria fazer isso.
precisa
153
A resposta acima não funciona. Você precisa definir DeliveryMethod = SmtpDeliveryMethod.Networkou ele retornará com um erro "o cliente não foi autenticado ". Também é sempre uma boa ideia colocar um tempo limite.
Código revisado:
using System.Net.Mail;
using System.Net;var fromAddress =newMailAddress("[email protected]","From Name");var toAddress =newMailAddress("[email protected]","To Name");conststring fromPassword ="password";conststring subject ="test";conststring body ="Hey now!!";var smtp =newSmtpClient{Host="smtp.gmail.com",Port=587,EnableSsl=true,DeliveryMethod=SmtpDeliveryMethod.Network,Credentials=newNetworkCredential(fromAddress.Address, fromPassword),Timeout=20000};
using (var message =newMailMessage(fromAddress, toAddress){Subject= subject,Body= body}){
smtp.Send(message);}
Interessante; funciona na minha máquina (TM). Mas, como isso parece plausível, vou adicioná-lo à minha resposta.
Domenic
3
Hmm, meu palpite é que SmtpDeliveryMethod.Network é o padrão, mas talvez o padrão seja alterado durante a execução no IIS --- era isso que você estava fazendo?
Domenic
3
Estou usando o mesmo código no aplicativo Console. É através do erro "Falha no envio de email".
Para que as outras respostas funcionem "de um servidor", primeiro ative o Acesso para aplicativos menos seguros na conta do Gmail.
Parece que o Google mudou recentemente sua política de segurança. A resposta com a melhor classificação não funciona mais até que você altere as configurações da sua conta, conforme descrito aqui: https://support.google.com/accounts/answer/6010255?hl=pt-BR
Em março de 2016, o Google alterou o local da configuração novamente!
@BCS Software, no meu programa, o usuário insere qualquer email que meu programa precise usá-lo para enviar a mensagem. Então, como posso tornar o usuário de email capaz de enviar o email mesmo se a autenticação de dois fatores estiver ativada?
Alaa'
Essa é a mesma configuração que você precisa alterar se quiser usar um cliente Microsoft Outlook (em um desktop, celular, etc.) para enviar / receber e-mails pelo GMail do Google.
Brett Rigby
41
Isto é para enviar e-mail com anexo .. Simples e curto ..
O Google pode bloquear tentativas de login de alguns aplicativos ou dispositivos que não usam padrões de segurança modernos. Como esses aplicativos e dispositivos são mais fáceis de invadir, bloqueá-los ajuda a manter sua conta mais segura.
Alguns exemplos de aplicativos que não oferecem suporte aos mais recentes padrões de segurança incluem:
O aplicativo Mail no seu iPhone ou iPad com iOS 6 ou inferior
O aplicativo Mail no seu Windows phone anterior à versão 8.1
Alguns clientes de correio da área de trabalho, como o Microsoft Outlook e o Mozilla Thunderbird
Portanto, você deve habilitar o Logon menos seguro na sua conta do Google.
Para que eu funcionasse, tive que ativar minha conta do Gmail, possibilitando o acesso de outros aplicativos. Isso é feito com "ativar aplicativos menos seguros" e também usando este link:
https://accounts.google.com/b/0/DisplayUnlockCaptcha
using System;
using System.Net;
using System.Net.Mail;
namespace SendMailViaGmail{classProgram{staticvoidMain(string[] args){//Specify senders gmail addressstringSendersAddress="[email protected]";//Specify The Address You want to sent Email To(can be any valid email address)stringReceiversAddress="[email protected]";//Specify The password of gmial account u are using to sent mail(pw of [email protected])conststringSendersPassword="Password";//Write the subject of ur mailconststring subject ="Testing";//Write the contents of your mailconststring body ="Hi This Is my Mail From Gmail";try{//we will use Smtp client which allows us to send email using SMTP Protocol//i have specified the properties of SmtpClient smtp within{}//gmails smtp server name is smtp.gmail.com and port number is 587SmtpClient smtp =newSmtpClient{Host="smtp.gmail.com",Port=587,EnableSsl=true,DeliveryMethod=SmtpDeliveryMethod.Network,Credentials=newNetworkCredential(SendersAddress,SendersPassword),Timeout=3000};//MailMessage represents a mail message//it is 4 parameters(From,TO,subject,body)MailMessage message =newMailMessage(SendersAddress,ReceiversAddress, subject, body);/*WE use smtp sever we specified above to send the message(MailMessage message)*/
smtp.Send(message);Console.WriteLine("Message Sent Successfully");Console.ReadKey();}catch(Exception ex){Console.WriteLine(ex.Message);Console.ReadKey();}}}}
Embora seu artigo possa de fato responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência. O estouro de pilha é tão útil quanto suas perguntas e respostas, e se o host do seu blog ficar inoperante ou os URLs forem movidos, essa resposta se tornará inútil. Obrigado!
sarnold
14
Espero que esse código funcione bem. Você pode tentar.
// Include this.
using System.Net.Mail;string fromAddress ="[email protected]";string mailPassword ="*****";// Mail id password from where mail will be sent.string messageBody ="Write the body of the message here.";// Create smtp connection.SmtpClient client =newSmtpClient();
client.Port=587;//outgoing port for the mail.
client.Host="smtp.gmail.com";
client.EnableSsl=true;
client.Timeout=10000;
client.DeliveryMethod=SmtpDeliveryMethod.Network;
client.UseDefaultCredentials=false;
client.Credentials=newSystem.Net.NetworkCredential(fromAddress, mailPassword);// Fill the mail form.var send_mail =newMailMessage();
send_mail.IsBodyHtml=true;//address from where mail will be sent.
send_mail.From=newMailAddress("[email protected]");//address to which mail will be sent.
send_mail.To.Add(newMailAddress("[email protected]");//subject of the mail.
send_mail.Subject="put any subject here";
send_mail.Body= messageBody;
client.Send(send_mail);
mensagem send_mail = new MailMessage (); Como essa linha deve funcionar? Você não pode converter implicitamente 'System.Net.Mail.MailMessage' em 'System.Windows.Forms.Message'
privatevoid button1_Click(object sender,EventArgs e){try{MailMessage mail =newMailMessage();SmtpClientSmtpServer=newSmtpClient("smtp.gmail.com");
mail.From=newMailAddress("[email protected]");
mail.To.Add("to_address");
mail.Subject="Test Mail";
mail.Body="This is for testing SMTP mail from GMAIL";SmtpServer.Port=587;SmtpServer.Credentials=newSystem.Net.NetworkCredential("username","password");SmtpServer.EnableSsl=true;SmtpServer.Send(mail);MessageBox.Show("mail Send");}catch(Exception ex){MessageBox.Show(ex.ToString());}}
Para evitar problemas de segurança no Gmail, você deve gerar uma senha de aplicativo primeiro nas configurações do Gmail e usar essa senha em vez de uma senha real para enviar um email, mesmo se você usar a verificação em duas etapas.
Se você deseja enviar a partir de um endereço de email arbitrário (como um formulário de feedback no site em que o usuário digita o email e você não deseja que ele envie um email diretamente para você) sobre o melhor que você pode fazer é:
Com isso, basta clicar em 'responder' na sua conta de e-mail para responder ao fã da sua banda em uma página de feedback, mas eles não receberão seu e-mail real, o que provavelmente levaria a uma tonelada de spam.
Se você estiver em um ambiente controlado, isso funcionará muito bem, mas observe que alguns clientes de email enviam para o endereço de origem mesmo quando a resposta é especificada (não sei qual).
Eu tive o mesmo problema, mas foi resolvido acessando as configurações de segurança do gmail e Permitindo aplicativos menos seguros . O código de Domenic & Donny funciona, mas somente se você tiver ativado essa configuração
Se você fez login (no Google), siga este link e alterne "Ativar" para "Acesso a aplicativos menos seguros"
using System;
using System.Net;
using System.Net.Mail;
namespace SendMailViaGmail{classProgram{staticvoidMain(string[] args){//Specify senders gmail addressstringSendersAddress="[email protected]";//Specify The Address You want to sent Email To(can be any valid email address)stringReceiversAddress="[email protected]";//Specify The password of gmial account u are using to sent mail(pw of [email protected])conststringSendersPassword="Password";//Write the subject of ur mailconststring subject ="Testing";//Write the contents of your mailconststring body ="Hi This Is my Mail From Gmail";try{//we will use Smtp client which allows us to send email using SMTP Protocol//i have specified the properties of SmtpClient smtp within{}//gmails smtp server name is smtp.gmail.com and port number is 587SmtpClient smtp =newSmtpClient{Host="smtp.gmail.com",Port=587,EnableSsl=true,DeliveryMethod=SmtpDeliveryMethod.Network,Credentials=newNetworkCredential(SendersAddress,SendersPassword),Timeout=3000};//MailMessage represents a mail message//it is 4 parameters(From,TO,subject,body)MailMessage message =newMailMessage(SendersAddress,ReceiversAddress, subject, body);/*WE use smtp sever we specified above to send the message(MailMessage message)*/
smtp.Send(message);Console.WriteLine("Message Sent Successfully");Console.ReadKey();}catch(Exception ex){Console.WriteLine(ex.Message);Console.ReadKey();}}}}
Copiando de outra resposta , os métodos acima funcionam, mas o gmail sempre substitui o email "de" e "responde ao" pela conta real do envio do gmail. aparentemente, há uma solução alternativa:
Atualização 3: O leitor Derek Bennett diz: "A solução é acessar as configurações do seu Gmail: contas e" Tornar padrão "uma conta que não seja a sua conta do Gmail. Isso fará com que o Gmail reescreva o campo De com o email da conta padrão o endereço é."
Você pode tentar Mailkit. Oferece funcionalidades melhores e avançadas para o envio de e-mail. Você pode encontrar mais sobre isso Aqui está um exemplo
MimeMessage message =newMimeMessage();
message.From.Add(newMailboxAddress("FromName","[email protected]"));
message.To.Add(newMailboxAddress("ToName","[email protected]"));
message.Subject="MyEmailSubject";
message.Body=newTextPart("plain"){Text=@"MyEmailBodyOnlyTextPart"};
using (var client =newSmtpClient()){
client.Connect("SERVER",25);// 25 is port you can change accordingly// Note: since we don't have an OAuth2 token, disable// the XOAUTH2 authentication mechanism.
client.AuthenticationMechanisms.Remove("XOAUTH2");// Note: only needed if the SMTP server requires authentication
client.Authenticate("YOUR_USER_NAME","YOUR_PASSWORD");
client.Send(message);
client.Disconnect(true);}
Respostas:
Certifique-se de usar
System.Net.Mail
, não o obsoletoSystem.Web.Mail
. Fazer SSL comSystem.Web.Mail
é uma bagunça grosseira de extensões hacky.fonte
smtp.gmail.com
)[email protected]
como remetente. Btw:smtp.gmail.com
substitui automaticamente o endereço do remetente, se não for o seu.A resposta acima não funciona. Você precisa definir
DeliveryMethod = SmtpDeliveryMethod.Network
ou ele retornará com um erro "o cliente não foi autenticado ". Também é sempre uma boa ideia colocar um tempo limite.Código revisado:
fonte
Para que as outras respostas funcionem "de um servidor", primeiro ative o Acesso para aplicativos menos seguros na conta do Gmail.
Parece que o Google mudou recentemente sua política de segurança. A resposta com a melhor classificação não funciona mais até que você altere as configurações da sua conta, conforme descrito aqui: https://support.google.com/accounts/answer/6010255?hl=pt-BR
Em março de 2016, o Google alterou o local da configuração novamente!
fonte
Isto é para enviar e-mail com anexo .. Simples e curto ..
fonte: http://coding-issues.blogspot.in/2012/11/sending-email-with-attachments-from-c.html
fonte
O Google pode bloquear tentativas de login de alguns aplicativos ou dispositivos que não usam padrões de segurança modernos. Como esses aplicativos e dispositivos são mais fáceis de invadir, bloqueá-los ajuda a manter sua conta mais segura.
Alguns exemplos de aplicativos que não oferecem suporte aos mais recentes padrões de segurança incluem:
Portanto, você deve habilitar o Logon menos seguro na sua conta do Google.
Depois de fazer login na conta do Google, acesse:
https://myaccount.google.com/lesssecureapps
ou
https://www.google.com/settings/security/lesssecureapps
Em C #, você pode usar o seguinte código:
fonte
Para que eu funcionasse, tive que ativar minha conta do Gmail, possibilitando o acesso de outros aplicativos. Isso é feito com "ativar aplicativos menos seguros" e também usando este link: https://accounts.google.com/b/0/DisplayUnlockCaptcha
fonte
Aqui está minha versão: " Enviar email em c # usando o Gmail ".
fonte
Espero que esse código funcione bem. Você pode tentar.
fonte
Inclua isso,
E depois,
fonte
Origem : Enviar email no ASP.NET C #
Abaixo está um exemplo de código de trabalho para enviar um email usando C #, no exemplo abaixo, estou usando o servidor smtp do google.
O código é bastante auto-explicativo, substitua email e senha pelos seus valores de email e senha.
fonte
Se você deseja enviar um email de plano de fundo, faça o seguinte
e adicione espaço para nome
fonte
Uma dica! Marque a caixa de entrada do remetente, talvez você precise permitir aplicativos menos seguros. Consulte: https://www.google.com/settings/security/lesssecureapps
fonte
Experimente,
fonte
use desta maneira
Não se esqueça disso:
fonte
Para evitar problemas de segurança no Gmail, você deve gerar uma senha de aplicativo primeiro nas configurações do Gmail e usar essa senha em vez de uma senha real para enviar um email, mesmo se você usar a verificação em duas etapas.
fonte
Alteração do remetente no e-mail do Gmail / Outlook.com:
Para impedir a falsificação - o Gmail / Outlook.com não permite o envio de um nome de conta arbitrário.
Se você tiver um número limitado de remetentes, siga estas instruções e defina o
From
campo para este endereço: Enviando email de um endereço diferenteSe você deseja enviar a partir de um endereço de email arbitrário (como um formulário de feedback no site em que o usuário digita o email e você não deseja que ele envie um email diretamente para você) sobre o melhor que você pode fazer é:
Com isso, basta clicar em 'responder' na sua conta de e-mail para responder ao fã da sua banda em uma página de feedback, mas eles não receberão seu e-mail real, o que provavelmente levaria a uma tonelada de spam.
Se você estiver em um ambiente controlado, isso funcionará muito bem, mas observe que alguns clientes de email enviam para o endereço de origem mesmo quando a resposta é especificada (não sei qual).
fonte
Eu tive o mesmo problema, mas foi resolvido acessando as configurações de segurança do gmail e Permitindo aplicativos menos seguros . O código de Domenic & Donny funciona, mas somente se você tiver ativado essa configuração
Se você fez login (no Google), siga este link e alterne "Ativar" para "Acesso a aplicativos menos seguros"
fonte
fonte
Aqui está um método para enviar email e obter credenciais do web.config:
E a seção correspondente em web.config:
fonte
Tente este
fonte
O problema para mim era que minha senha tinha uma barra preta "\" , copiada e colada sem perceber que causaria problemas.
fonte
Copiando de outra resposta , os métodos acima funcionam, mas o gmail sempre substitui o email "de" e "responde ao" pela conta real do envio do gmail. aparentemente, há uma solução alternativa:
http://karmic-development.blogspot.in/2013/10/send-email-from-aspnet-using-gmail-as.html
"3. Na guia Contas, clique no link" Adicione outro endereço de e-mail que você possui "e verifique-o"
Ou possivelmente isso
Atualização 3: O leitor Derek Bennett diz: "A solução é acessar as configurações do seu Gmail: contas e" Tornar padrão "uma conta que não seja a sua conta do Gmail. Isso fará com que o Gmail reescreva o campo De com o email da conta padrão o endereço é."
fonte
Você pode tentar
Mailkit
. Oferece funcionalidades melhores e avançadas para o envio de e-mail. Você pode encontrar mais sobre isso Aqui está um exemplofonte