Отправка электронной почты через C # через учетную запись Google Apps

У меня стандартная учетная запись Google Apps. Я установил личный домен через Google Apps. Я могу успешно отправлять и получать электронные письма через Google Apps, когда использую интерфейс Gmail. Однако я хочу отправить электронное письмо с помощью кода. Чтобы попробовать это, я пробовал следующий код:

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

Когда достигается метод Send, выдается исключение, в котором говорится:

«SMTP-серверу требуется безопасное соединение, или клиент не был аутентифицирован. Ответ сервера был: 5.5.1 Требуется аутентификация».

Как отправлять электронные письма через мой личный домен через Google?

Спасибо!


person user70192    schedule 16.04.2009    source источник
comment
Может порт 465 лучше работает?   -  person Lucero    schedule 17.04.2009
comment
В чем проблема с кодом выше?   -  person Marko    schedule 19.02.2011
comment
У меня проблема с тайм-аутом, но, глядя на все фрагменты кода, мне кажется, что мой код и настройки верны.   -  person Dan Csharpster    schedule 12.07.2014
comment
Позднее добавление: Google требует, чтобы вы включили менее безопасные приложения, чтобы это работало: поддержка. google.com/accounts/answer/6010255?hl=en   -  person L_7337    schedule 08.09.2015


Ответы (5)


Нет необходимости жестко кодировать все настройки smtp в вашем коде. Вместо этого поместите их в web.config. Таким образом, вы можете зашифровать эти настройки, если это необходимо, и изменить их на лету без перекомпиляции вашего приложения.

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

Закончите, когда вы отправите электронное письмо, просто включите SSL на своем 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);

Убедитесь, что вы отправляете электронную почту с того же адреса электронной почты, с которым вы пытаетесь пройти аутентификацию в Gmail.

Примечание. Начиная с .NET 4.0, вы можете вставить enableSsl = "true" в web.config вместо того, чтобы устанавливать его в коде.

person Konstantin Tarkus    schedule 16.04.2009
comment
полный webconfig находится в ‹configuration› и должен иметь вид ‹system.net› ‹mailSettings› ‹smtp [email protected] deliveryMethod = Network› ‹network host = smtp.gmail.com port = 587 userName = example @ domain. com пароль = пароль / ›‹/smtp› ‹/mailSettings›‹ /system.net › - person Simon_Weaver; 10.10.2009
comment
вы также можете поместить enableSsl в config. - person Shay Erlichmen; 06.03.2010
comment
@Shay - как можно в конфиге включить SSL? - person Rinat Abdullin; 23.05.2010
comment
@Rinat его новый с .NET 4.0, просто поместите enableSsl в ‹smtp› - person Shay Erlichmen; 23.05.2010
comment
Спасибо. Добавлен +1. К сожалению, 90% производственных приложений по-прежнему .NET 3.5 и ниже. Esp. те, что на Лазурном. - person Rinat Abdullin; 24.05.2010
comment
Почему этот номер порта не указан в инструкциях google, я не знаю! - person Stokedout; 13.12.2012
comment
Вы можете включить SSL, добавив enableSsl в сетевой элемент в web.config: ‹network enableSsl = true ...› - person Pedro; 22.01.2015
comment
В Go, папа, это не работает :( Любая идея? - person Nithin Paul; 09.02.2021

Это то, что я использую в 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),
    MailAddress maTo = new MailAddress("[email protected]", "Recipient's Name", Encoding.UTF8);
    MailMessage mmsg = new MailMessage(maFrom, maTo);
    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;
}

Следите за межсетевыми экранами и антивирусами. Эти жуткие вещи, как правило, блокируют отправку электронной почты приложениями. Я использую McAfee Enterprise, и мне нужно добавить имя исполняемого файла (например, Bazar. * Для Bazar.exe и Bazar.vshost.exe), чтобы иметь возможность отправлять электронные письма ...

person Achilles    schedule 02.01.2011
comment
Я хочу создать страницу контактов, чтобы пользователи отправляли электронные письма администратору сайта. Есть ли способ установить From на их адрес электронной почты? - person Shimmy Weitzhandler; 23.12.2012
comment
Вы можете подделать адрес отправителя; но есть хороший риск, что ваше письмо будет помечено как спам. Я предлагаю вам отправить письмо с адреса [email protected] как администратору, так и человеку, который пытается с вами связаться. Тогда ваш админ сможет отправить ответ всем. - person Achilles; 23.12.2012
comment
Здесь есть небольшая ошибка, из-за которой отображаемые имена выбрасываются. Конструкция MailMessage должна выглядеть так: MailMessage mmsg = new MailMessage (maFrom, maTo); - person Kevin Meboe; 08.07.2020

измените порт на 465

person sf.    schedule 12.12.2009

Здесь ничего делать не нужно. Просто войдите в свою текущую учетную запись в первый раз и следуйте инструкциям.

Ваша проблема решится. Это произошло из-за того, что вы создали учетную запись в приложениях Google, но не вошли в систему. Просто войдите в систему, следуйте инструкциям и попробуйте.

person Jeevan    schedule 20.02.2012
comment
Учитывая, что код OP кажется прекрасным, возможно, это действительно была проблема. - person Dermot; 11.07.2012

Мой код подключается к smtp.google.com с использованием TLS на Port = 587 (SSL должен быть порт 465), но по-прежнему требуется 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);

Обратите внимание на эти важные условия в вашей учетной записи G SUITE.

  • Убедитесь, что используемое вами имя пользователя прошло проверку проверки слова CAPTCHA, которая появляется при первом входе в систему.
  • Убедитесь, что для учетной записи установлен надежный пароль - https://support.google.com/accounts/answer/32040
  • Убедитесь, что для нужной учетной записи включены менее безопасные приложения: https://support.google.com/a/answer/6260879
person Christian Ernst Rysgaard    schedule 16.12.2017