it-roy-ru.com

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

У меня есть стандартная учетная запись Google Apps. Я настроил собственный домен через Google Apps. Я могу отправлять и получать электронные письма успешно через Службы Google, когда я использую интерфейс 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?

Спасибо!

63
user70192

Нет необходимости жестко кодировать все настройки 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, а не устанавливать его в коде.

91
Konstantin Tarkus

Это то, что я использую в WPF 4

SmtpClient client = new SmtpClient();
client.Credentials = new NetworkCredential("[email protected]", "[email protected]$$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;
}

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

7
Achilles

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

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

3
Jeevan

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

3
sf.

Мой код подключается к smtp.google.com с использованием TLS на порт = 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 Word, который появляется при первом входе в систему.
  • Убедитесь, что в учетной записи есть безопасный пароль - https://support.google.com/accounts/answer/32040
  • Убедитесь, что менее безопасные приложения включены для нужной учетной записи- https://support.google.com/a/answer/6260879
0
Christian Ernst Rysgaard