2009-04-16 2 views
62

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

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

Когда Отправить метод достигается, создается исключение, что государства:

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

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

Спасибо!

+0

Имеет ли порт 465 работы лучше может быть? – Lucero

+0

В чем проблема с кодом выше? – Marko

+1

Я получаю проблему с тайм-аутом, но, глядя на все смазку кода, мне кажется, что мой код и настройки верны. –

ответ

90

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

+1

полный webconfig находится под и должен быть

+0

Вы также можете поместить enableSsl в конфигурацию. –

+1

@Shay - как вы можете включитьSSL в config? –

7

Это то, что я использую в 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), чтобы иметь возможность отправлять электронные письма ...

+0

Спасибо за то, что вы указали, как это сделать только в коде :-) –

+0

Я хочу создать страницу «Связаться с нами», чтобы пользователи отправляли электронные письма на сайт-админ. Есть ли способ установить «От» на свой адрес электронной почты? – Shimmy

+0

Вы можете обмануть адрес отправителя; но есть хороший риск получить ваш адрес электронной почты, помеченный как спам. Я предлагаю вам отправить электронное письмо от [email protected] как администратору, так и человеку, который пытается связаться с вами. Тогда ваш администратор может отправить ответ всем. – Achilles

3

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

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

+0

Учитывая, что код OP кажется прекрасным, на самом деле это может быть проблемой. – Dermot

0

Мой код подключается к smtp.google.com с использованием TLS на порт = 587 (SSL должен быть порт 465), но по-прежнему нуждается в EnableSsl = истинный

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 счета-
Смежные вопросы