Использование SMTP-сервера Gmail для электронной почты на веб-сайте asp.net в IIS 6.0 - PullRequest
2 голосов
/ 03 июня 2011

Я загрузил свой веб-сайт asp.net на IIS 6.0, и в настоящее время он работает, за исключением отправки электронной почты. На моем тестовом сервере asp.net я смог использовать gmail в качестве сервера smtp для исходящей электронной почты из моей учетной записи gmail.

В версии сервера IIS live, когда я нажимаю кнопку управления, которая должна отправлять сообщение, полоса загрузки браузера достигает только 25%, а затем останавливается, без ошибок или сообщений.

Ниже приведен мой код для события нажатия кнопки, которое отправляет электронное письмо.

    private void sendUsername() 
    {
    /**
     * Sends user's username to 
     * their listed e-mail address.
     * 
     */
    string username = Session["retrievedUsername"].ToString();

    string usernameSent = "usernameSent";

    string from = "mandizi84@gmail.com";

    string to = enterEmailTextBoxTwo.Text;

    System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();

    mail.To.Add(to);
    mail.From = new MailAddress(from, "The All-Star R.E.C. Center", System.Text.Encoding.UTF8);
    mail.Subject = "ASRC password retrieval.";
    mail.SubjectEncoding = System.Text.Encoding.UTF8;

    string htmlBody = "Hi " + username + "," + "<br /><br />";
    htmlBody += "Your username is " + "'" + username + "'" + "." + "<br /><br />";
    htmlBody += "If you don't remember your password, return to the Credential Recovery section to get a new password." + "<br /><br />";
    htmlBody += "Your membership is much appreciated." + "<br /><br />";
    htmlBody += "Thank you," + "<br /><br/>";
    htmlBody += "The All-Star R.E.C. Center";

    mail.Body = htmlBody;

    mail.BodyEncoding = System.Text.Encoding.UTF8;
    mail.IsBodyHtml = true;
    mail.Priority = MailPriority.Normal;

    SmtpClient client = new SmtpClient();

    client.Credentials = new System.Net.NetworkCredential(from, "password");

    client.Port = 587;
    client.Host = "smtp.gmail.com";
    client.EnableSsl = true;

    try
    {
        client.Send(mail);

        Session["usernameSent"] = usernameSent;

        Response.Redirect("~/Email Confirmation.aspx", false);
    }
    catch (Exception ex)
    {
        Exception ex2 = ex;
        while (ex2 != null)
        {
            errorLabel.Text = "Mail could not be sent. ";
            errorLabel.Text += ex2.ToString();
        }
    }
}

Я провел некоторое исследование и в нескольких местах прочитал, что настройка роли почтового сервера не нужна, если я использую учетную запись gmail, но в других местах я это сделал.

Итак, мой вопрос в IIS. Нужно ли мне настраивать роль почтового сервера, а затем добавить SMTP для Gmail, чтобы использовать эту службу SMTP на моем действующем веб-сайте на IIS 6.0?

Спасибо

Обновление: я только что удалил цикл while из моего блока catch и получил следующую ошибку:

Почта не может быть отправлена. System.Net.Mail.SmtpException: сбой отправки почты. ---> System.Net.WebException: невозможно подключиться к удаленному серверу ---> System.Net.Sockets.SocketException: не удалось установить соединение, поскольку целевая машина активно отказала ему в 74.125.95.109:587 в System.Net Файл - Конец внутренней трассировки стека исключений --- в System.Net.ServicePoint.GetConnection (PooledStream PooledStream, владелец объекта, логический асинхронный, IP-адрес и адрес, Socket & abortSocket, Socket & abortSocket6, Int32 timeout) в System.Net.PooledStream.Activate ( Объект owningObject, логический асинхронный, тайм-аут Int32, GeneralAsyncDelegate asyncCallback) в System.Net.PooledStream.Activate (объект owningObject, GeneralAsyncDelegate asyncCallback) в System.Net.ConnectionPool.GetConnection (Objec) t владениеObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout) в System.Net.Mail.SmtpConnection.GetConnection (ServicePoint servicePoint) в System.Net.Mail.SmtpTransport.GetConnection (ServicePoint servicePoint) в System.Net.Mail.SmtpnectionG) System.Net.Mail.SmtpClient.Send (сообщение MailMessage) --- конец трассировки стека внутренних исключений --- в System.Net.Mail.SmtpClient.Send (сообщение MailMessage) в Credential_Recovery.sendUsername () в e: \ Senior Дизайн \ Вторая версия \ ASRC \ Credential Recovery.aspx.cs: строка 619

строка 619 в моем коде "client.Send (mail)"

1 Ответ

1 голос
/ 03 июня 2011

Не думаете ли вы, что цикл While в вашем блоке Catch входит в бесконечный цикл, не показывая вам фактическую ошибку? Если существует исключение, ex2 никогда не будет нулевым. это как while(1) заявление !!

...