Envie e -mail via conta C# através do Google Apps
-
09-09-2019 - |
Pergunta
Eu tenho uma conta padrão do Google Apps. Eu configurei um domínio personalizado através do Google Apps. Consigo enviar e receber e -mails com sucesso através do Google Apps quando uso a interface do Gmail. No entanto, quero enviar um email via código. Para tentar isso, tenho tentado o seguinte código:
MailMessage mailMessage = new MailMessage();
mailMessage.To.Add("someone@somewhere.com");
mailMessage.Subject = "Test";
mailMessage.Body = "<html><body>This is a test</body></html>";
mailMessage.IsBodyHtml = true;
// Create the credentials to login to the gmail account associated with my custom domain
string sendEmailsFrom = "emailAddress@mydomain.com";
string sendEmailsFromPassword = "password";
NetworkCredential cred = new NetworkCredential(sendEmailsFrom, sendEmailsFromPassword);
SmtpClient mailClient = new SmtpClient("smtp.gmail.com", 587);
mailClient.EnableSsl = true;
mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
mailClient.UseDefaultCredentials = false;
mailClient.Timeout = 20000;
mailClient.Credentials = cred;
mailClient.Send(mailMessage);
Quando o método de envio é alcançado, é lançada uma exceção que afirma:
"O servidor SMTP requer uma conexão segura ou o cliente não foi autenticado. A resposta do servidor foi: 5.5.1 Autenticação necessária."
Como envio e -mails através do meu domínio personalizado via Google?
Obrigado!
Solução
Não há necessidade de codificar todas as configurações SMTP em seu código. Coloque -os em web.config. Dessa forma, você pode criptografar essas configurações, se necessário, e alterá -las em tempo real sem recompilar seu aplicativo.
<configuration>
<system.net>
<mailSettings>
<smtp from="example@domain.com" deliveryMethod="Network">
<network host="smtp.gmail.com" port="587"
userName="example@domain.com" password="password"/>
</smtp>
</mailSettings>
</system.net>
</configuration>
Termine quando você envia e -mail, basta ativar o SSL no seu SMTPClient:
var message = new MailMessage("navin@php.net");
// here is an important part:
message.From = new MailAddress("example@domain.com", "Mailer");
// it's superfluous part here since from address is defined in .config file
// in my example. But since you don't use .config file, you will need it.
var client = new SmtpClient();
client.EnableSsl = true;
client.Send(message);
Certifique -se de enviar e -mail do mesmo endereço de e -mail com o qual você está tentando se autenticar no Gmail.
Observação: Começando com o .NET 4.0, você pode inserir enablessl = "true" no web.config, em vez de configurá -lo no código.
Outras dicas
Isso é o que eu uso no WPF 4
SmtpClient client = new SmtpClient();
client.Credentials = new NetworkCredential("sender_email@domain.tld", "P@$$w0rD");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
try {
MailAddress
maFrom = new MailAddress("sender_email@domain.tld", "Sender's Name", Encoding.UTF8),
maTo = new MailAddress("recipient_email@domain2.tld", "Recipient's Name", Encoding.UTF8);
MailMessage mmsg = new MailMessage(maFrom.Address, maTo.Address);
mmsg.Body = "<html><body><h1>Some HTML Text for Test as BODY</h1></body></html>";
mmsg.BodyEncoding = Encoding.UTF8;
mmsg.IsBodyHtml = true;
mmsg.Subject = "Some Other Text as Subject";
mmsg.SubjectEncoding = Encoding.UTF8;
client.Send(mmsg);
MessageBox.Show("Done");
} catch (Exception ex) {
MessageBox.Show(ex.ToString(), ex.Message);
//throw;
}
Preste atenção a firewalls e antivírus. Essas coisas assustadoras tendem a bloquear os aplicativos enviando email. Eu uso a McAfee Enterprise e tenho que adicionar o nome executável (como o Bazar.* Para Bazar.exe e Bazar.vshost.exe) para poder enviar e -mails ...
Altere a porta para 465
Não há necessidade de fazer nada. Basta fazer login na sua conta corrente pela primeira vez e seguir as instruções.
Seu problema será resolvido. Ocorre porque você criou a conta no Google Apps, mas não fez login. Basta fazer login e seguir as instruções e tentar.
Meu código está se conectando ao smtp.google.com usando o TLS na porta = 587 (SSL deve ser a porta 465), mas ainda precisa de ativação
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.EnableSsl = true;
smtp.UseDefaultCredentials = false;
NetworkCredential credentials = new NetworkCredential();
credentials.UserName = "INSERT EMAIL";
credentials.Password = "INSERT PASSWORD";
smtp.Credentials = credentials;
MailAddress addressFrom = new MailAddress(credentials.UserName);
MailAddress addressTo = new MailAddress("INSERT RECIPIENT");
MailMessage msg = new MailMessage(addressFrom, addressTo);
msg.Subject = "SUBJECT"
msg.Body = "BODY";
smtp.Send(msg);
Observe esses pré -requisitos importantes em sua conta G Suite
- Certifique -se de que o nome de usuário que você usa tenha liberado o teste de verificação de palavras do Captcha que aparece quando você entra pela primeira vez.
- Verifique se a conta possui uma senha segura - https://support.google.com/accounts/answer/32040
- Verifique se os aplicativos menos seguros estão ativados para a conta desejada- https://support.google.com/a/answer/6260879