2013-02-19 7 views
2

Я занимаюсь разработкой веб-сайта ASP .Net.
Одна из моих страниц ASPX содержит кнопку.
Когда эта кнопка нажата, я хочу отправить электронное письмо с помощью SMTP-сервера Gmail.
Я хочу использовать учетную запись Gmail в качестве учетных данных.Отправка электронной почты с помощью ASP .Net и Gmail SMTP

Вот баттона обработчик события нажатия:

protected void m_myButton_Click(object p_sender, EventArgs p_args) 
{ 
    string l_subject = "My subject"; 

    StringBuilder l_builder = new StringBuilder(); 
    // ... 
    string l_body = l_builder.ToString(); 

    string l_host = ConfigurationManager.AppSettings["SmtpHost"]; 
    int l_port = int.Parse(ConfigurationManager.AppSettings["SmtpPort"]); 

    NameValueCollection l_smtpAccount = (NameValueCollection)ConfigurationManager.GetSection("smtpAccount"); 
    string l_address = l_smtpAccount["SmtpAddress"]; 
    string l_password = l_smtpAccount["SmtpPassword"]; 

    MailMessage l_mail = new MailMessage(); 
    l_mail.From = new MailAddress(l_address); 
    l_mail.To.Add(l_address); 
    l_mail.Subject = l_subject; 
    l_mail.Body = l_body; 

    SmtpClient l_smtp = new SmtpClient(); 
    l_smtp.Host = l_host; // l_host = "smtp.gmail.com" 
    l_smtp.Port = l_port; // l_port = 587 
    l_smtp.EnableSsl = true; 
    l_smtp.UseDefaultCredentials = false; 
    l_smtp.Credentials = new NetworkCredential(l_address, l_password); 

    l_smtp.Send(l_mail); 
} 

Командная строка l_smtp.Send (l_mail) терпит неудачу.
SMTP возбуждается исключение, а свойство InnerException сообщает мне, что (в переводе с французского языка на английский): Нет соединения было etablished, потому что целевой компьютер отказался его 173.194.67.108:587

Мой код основан на коде найден на этой странице: http://www.codeproject.com/Questions/254743/sending-email-in-asp-net-using-smtp-gmail-server

Любая помощь будет высоко оценен

+0

Можете ли вы подключиться к этому серверу и порту с вашего компьютера вне вашего кода ASP.NET? например 'telnet smtp.gmail.com 587' или используйте [PuTTY] (http://www.chiark.greenend.org.uk/~sgtatham/putty/)' putty -raw smtp.gmail.com 587'. Это работает для меня отсюда (хотя я не пытаюсь SSL) – Rup

+0

1. Учетные данные - вы должны использовать не свою электронную почту в качестве логина. Я имею в виду, если ваша электронная почта «[email protected]» - ваш логин для Credentails должен быть «mymail», а не «[email protected]». 2. l_mail.To.Add (новый MailAddress (l_address)) –

+0

@Rup I попытались подключиться к smtp.gmail.com с помощью telnet, но у меня есть сообщение об ошибке: Connection отказано. Я указал 587 как номер порта и raw как протокол. Я не пытался подключиться с помощью telnet, потому что он не сообщает об успешном или неудачном соединении. – user1139666

ответ

0

Я поворачивал мою антивирусную программу от по совету Руп, и я не получил каких-либо исключений.
Я создаю собственное правило в своей антивирусной программе, чтобы разрешить связь между моим ASP.NET-сайтом и SMTP-сервером Gmail.

0

Попробуйте это ...

protected void Button1_Click(object sender, EventArgs e) 
{ 
MailMessage mail = new MailMessage(); 
mail.To.Add("Email ID where email is to be send"); 
mail.To.Add("Another Email ID where you wanna send same email"); 
mail.From = new MailAddress("[email protected]"); 
mail.Subject = "Email using Gmail"; 

string Body = "Hi, this mail is to test sending mail"+ 
      "using Gmail in ASP.NET"; 
mail.Body = Body; 

    mail.IsBodyHtml = true; 
SmtpClient smtp = new SmtpClient(); 
smtp.Host = "smtp.gmail.com"; //Or Your SMTP Server Address 
smtp.Credentials = new System.Net.NetworkCredential 
    ("[email protected]","YourGmailPassword"); 
//Or your Smtp Email ID and Password 
smtp.EnableSsl = true; 
smtp.Send(mail); 
} 
+0

Номер порта не указан. Это нормально? – user1139666

+0

s если u хочет u может включить номер порта как smtp.port = 587; – coder

+0

Я попробовал порт 465, затем 587. Сначала дал тайм-аут. Вторая дала ошибку учетных данных. Но используя 25, поскольку порт работал отлично! Также пришлось вынуть smtp.UseDefaultCredentials = false; – dreamerkumar

0

нет соединения не было ETAB ликовано, поскольку целевой компьютер отказался его 73.194.67.108:587

Попробуйте другой SMTP порт: 465

+0

Я столкнулся с другим исключением, информирующим меня о тайм-ауте – user1139666