Wyślij e-mail przez C# poprzez konto Google Apps

Mam standardowe konto Google Apps. Skonfigurowałem niestandardową domenę za pośrednictwem Google Apps. Jestem w stanie wysyłać i odbierać wiadomości e-mail z powodzeniem za pośrednictwem Google Apps, gdy używam interfejsu Gmail. Chcę jednak wysłać e-mail kodem. Aby to zrobić, wypróbowałem następujący kod:

MailMessage mailMessage = new MailMessage();
mailMessage.To.Add("[email protected]");
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 = "[email protected]";             
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); 

Gdy zostanie osiągnięta metoda Send, zostanie wyrzucony wyjątek o następującej treści:

" serwer SMTP wymaga bezpiecznego połączenie lub klient nie był uwierzytelnione. Odpowiedź serwera było: 5.5.1 Wymagane uwierzytelnienie."

Jak mogę wysyłać e-maile za pośrednictwem mojej niestandardowej domeny przez Google?

Dzięki!
Author: Alex Bolotov, 2009-04-17

5 answers

Nie ma potrzeby twardego kodowania wszystkich ustawień smtp w kodzie. Umieść je w sieci.zamiast tego config. W ten sposób możesz zaszyfrować te ustawienia w razie potrzeby i zmieniać je w locie bez ponownej kompilacji aplikacji.

<configuration>
  <system.net>
    <mailSettings>
      <smtp from="[email protected]" deliveryMethod="Network">
          <network host="smtp.gmail.com" port="587"
              userName="[email protected]" password="password"/>
      </smtp>
    </mailSettings>
  </system.net>
</configuration>

Koniec po wysłaniu e-maila wystarczy włączyć SSL Na SmtpClient:

var message = new MailMessage("[email protected]");
// here is an important part:
message.From = new MailAddress("[email protected]", "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);

Upewnij się, że wysyłasz wiadomość e-mail z tego samego adresu e-mail, za pomocą którego próbujesz uwierzytelnić w Gmailu.

Uwaga: począwszy od. NET 4.0 można wstawić enableSsl = "true" do web.config w przeciwieństwie do ustawiania go w kodzie.

 90
Author: Konstantin Tarkus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-15 15:32:37

Tego używam w WPF 4

SmtpClient client = new SmtpClient();
client.Credentials = new NetworkCredential("[email protected]", "P@$$w0rD");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;

try {
    MailAddress
        maFrom = new MailAddress("[email protected]", "Sender's Name", Encoding.UTF8),
        maTo = new MailAddress("[email protected]", "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;
}

Uważaj na firewalle i antywirusy. Te straszne rzeczy mają tendencję do blokowania aplikacji wysyłających wiadomości e-mail. Używam McAfee Enterprise i muszę dodać nazwę pliku wykonywalnego (jak Bazar.* dla obu Bazar.exe i Bazar.vshost.exe), aby móc wysyłać e-maile...

 7
Author: Achilles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-01 14:47:41

Zmień port na 465

 3
Author: sf.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-12 17:04:10

Nie trzeba nic robić. Po prostu zaloguj się na swoje obecne konto za pierwszym razem i postępuj zgodnie z instrukcjami.

Twój problem się rozwiąże. Dzieje się tak, ponieważ utworzyłeś konto w google apps, ale nie zalogowałeś się. Po prostu zaloguj się i postępuj zgodnie z instrukcjami i spróbuj.

 3
Author: Jeevan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-20 07:47:56

Mój kod łączy się z smtp.google.com używanie TLS na Port=587 (SSL powinno być portem 465), ale nadal wymaga EnableSsl = true

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);

Zwróć uwagę na te ważne warunki wstępne na koncie G SUITE

 0
Author: Christian Ernst Rysgaard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-16 15:54:39