0

I have this code which was working just fine a while ago but now not able to send generated password,

this is what am getting "An error occured while sending you the credentials.Please contact the ICT office administrator"

any thoughts?

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class staff_Forgot_Password : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void BtnLogin_Click(object sender, EventArgs e)
    {
        string email = string.Empty;
        string userno = TxtUsername.Text.Trim().Replace("'", "");

        if (string.IsNullOrEmpty(userno))
        {
            LblError.Text = "Username should not be empty";
            return;
        }

        #region generate random password

        Random rand = new Random();
        Random randAlpha = new Random();
        int newpassint = rand.Next(10000, 99999);

        int alphabetPosition = randAlpha.Next(1, 26);
        bool isCap = (alphabetPosition % 2 == 0 ? true : false);
        string theAlphabet = GetTheAlphabet(alphabetPosition, isCap);

        alphabetPosition = randAlpha.Next(1, 26);
        isCap = (alphabetPosition % 2 == 0 ? true : false);
        theAlphabet += GetTheAlphabet(alphabetPosition, isCap);

        alphabetPosition = randAlpha.Next(1, 26);
        isCap = (alphabetPosition % 2 == 0 ? true : false);
        theAlphabet += GetTheAlphabet(alphabetPosition, isCap);

        alphabetPosition = randAlpha.Next(1, 26);
        isCap = (alphabetPosition % 2 == 0 ? true : false);
        theAlphabet += GetTheAlphabet(alphabetPosition, isCap);

        //string newpass = theAlphabet + "#" + newpassint.ToString() + "?" + alphabetPosition.ToString() + "@";
        string newpass = theAlphabet + "#" + newpassint.ToString() + "@" + alphabetPosition.ToString();

        #endregion generate random password

        email = GetStaffEmail(userno);
        bool ok = ResetPassword(userno, newpass);
        if (ok)
        {
            const string subject = "STAFF SELF SERVICE PORTAL CREDENTIALS";
            string msg = "Staff portal credentials reset:<br>New password is <b>" + newpass + "</b>";
            if (SendEmailAlert(msg, email, subject))
            {
                Message("A new password has been generated and sent to your Email.");
                return;
            }
            else
            {
                Message("An error occured while sending you the credentials.Please contact the ICT office administrator.");
            }
        }
        else
        {
            LblError.Text = "Password reset failed, please recheck your staff number and/or consult your administrator";
        }
    }

    protected string GetStaffEmail(string username)
    {
        string rval = string.Empty;
        SqlConnection connToNAV = null;
        try
        {
            using (connToNAV = new SqlConnection(MyComponents.ConnectionString))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    string sqlStmt = "SELECT [Company E-Mail] FROM [" + MyComponents.Company_Name +
                                     " $Staff-table] WHERE [No_] = @username";
                    cmd.CommandText = sqlStmt;
                    cmd.Connection = connToNAV;
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("@username", username.Trim());

                    if (connToNAV.State != ConnectionState.Open)
                    {
                        connToNAV.Open();
                    }
                    using (SqlDataReader cmdReader = cmd.ExecuteReader())
                    {
                        if (cmdReader.HasRows == true)
                        {
                            cmdReader.Read();
                            rval = cmdReader["Company E-Mail"].ToString();
                        }
                        else
                        {
                            LblError.Text = "Warning!, password reset failed! contact your administrator!";
                        }
                        cmdReader.Close();
                    }
                }
            }
        }
        catch (Exception ex)
        {
            ex.Data.Clear();
        }
        finally
        {
            connToNAV.Close();
        }

        return rval;
    }


    private string GetTheAlphabet(int alphabetPosition, bool isCap)
    {
        string rval = string.Empty;
        switch (alphabetPosition)
        {
            case 1: rval = "A"; break;
            case 2: rval = "B"; break;
            case 3: rval = "C"; break;
            case 4: rval = "D"; break;
            case 5: rval = "E"; break;
            case 6: rval = "F"; break;
            case 7: rval = "G"; break;
            case 8: rval = "H"; break;
            case 9: rval = "I"; break;
            case 10: rval = "J"; break;
            case 11: rval = "K"; break;
            case 12: rval = "L"; break;
            case 13: rval = "M"; break;
            case 14: rval = "N"; break;
            case 15: rval = "O"; break;
            case 16: rval = "P"; break;
            case 17: rval = "Q"; break;
            case 18: rval = "R"; break;
            case 19: rval = "S"; break;
            case 20: rval = "T"; break;
            case 21: rval = "U"; break;
            case 22: rval = "V"; break;
            case 23: rval = "W"; break;
            case 24: rval = "X"; break;
            case 25: rval = "Y"; break;
            default: rval = "Z"; break;
        }
        return isCap ? rval : rval.ToLower();
    }

    public static bool SendEmailAlert(string body, string recepient, string subject)
    {
        Boolean x = false;

        string a = "";
        try
        {

            string SMTPHost = "smtp.gmail.com";
            string fromAddress = "myemail@domain.com";
            string toAddress = recepient;
            System.Net.Mail.MailMessage mail_ = new System.Net.Mail.MailMessage();
            mail_.To.Add(toAddress);
            mail_.Subject = subject;
            mail_.From = new System.Net.Mail.MailAddress(fromAddress);
            mail_.Body = body;
            mail_.IsBodyHtml = true;

            var smtp = new SmtpClient("smtp.gmail.com", 465)
            {
                Credentials = new NetworkCredential("myemail@domain.com", "mypassword"),
                EnableSsl = true
            };
            smtp.Send(mail_);

            x = true;
            a = "Sent";

        }
        catch (Exception ex2)
        {
            a = ex2.ToString();
            ex2.Data.Clear();
        }
        return x;
    }


    private bool ResetPassword(string userno, string newpass)
    {
        bool rval = false;
        SqlConnection connToNAV = null;
        try
        {
            using (connToNAV = new SqlConnection(MyComponents.ConnectionString))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    string sqlStmt = "UPDATE [" + MyComponents.Company_Name + " $Staff-table] ";
                    sqlStmt += "SET [Portal Password] = @Portal_Password,[Changed Password] = 1 ";
                    sqlStmt += "WHERE (1=1) AND ([No_] = @StaffNo) ";

                    if (connToNAV.State != ConnectionState.Open)
                    {
                        connToNAV.Open();
                    }
                    cmd.CommandText = sqlStmt;
                    cmd.Connection = connToNAV;
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("@Portal_Password", newpass);
                    cmd.Parameters.AddWithValue("@StaffNo", userno);
                    int rst = cmd.ExecuteNonQuery();
                    if (rst == 1)
                    {
                        rval = true;
                    }
                }
            }
        }
        catch (Exception ex)
        {
            ex.Data.Clear();
        }
        finally
        {
            connToNAV.Close();
        }
        return rval;
    }

    public void Message(string strMsg)
    {
        string strScript = null;
        strScript = "<script>";
        strScript = strScript + "alert('" + strMsg + "');";
        strScript = strScript + "</script>";
        Page.RegisterStartupScript("ClientScript", strScript.ToString());
    }

}using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class staff_Forgot_Password : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void BtnLogin_Click(object sender, EventArgs e)
    {
        string email = string.Empty;
        string userno = TxtUsername.Text.Trim().Replace("'", "");

        if (string.IsNullOrEmpty(userno))
        {
            LblError.Text = "Username should not be empty";
            return;
        }

        #region generate random password

        Random rand = new Random();
        Random randAlpha = new Random();
        int newpassint = rand.Next(10000, 99999);

        int alphabetPosition = randAlpha.Next(1, 26);
        bool isCap = (alphabetPosition % 2 == 0 ? true : false);
        string theAlphabet = GetTheAlphabet(alphabetPosition, isCap);

        alphabetPosition = randAlpha.Next(1, 26);
        isCap = (alphabetPosition % 2 == 0 ? true : false);
        theAlphabet += GetTheAlphabet(alphabetPosition, isCap);

        alphabetPosition = randAlpha.Next(1, 26);
        isCap = (alphabetPosition % 2 == 0 ? true : false);
        theAlphabet += GetTheAlphabet(alphabetPosition, isCap);

        alphabetPosition = randAlpha.Next(1, 26);
        isCap = (alphabetPosition % 2 == 0 ? true : false);
        theAlphabet += GetTheAlphabet(alphabetPosition, isCap);

        //string newpass = theAlphabet + "#" + newpassint.ToString() + "?" + alphabetPosition.ToString() + "@";
        string newpass = theAlphabet + "#" + newpassint.ToString() + "@" + alphabetPosition.ToString();

        #endregion generate random password

        email = GetStaffEmail(userno);
        bool ok = ResetPassword(userno, newpass);
        if (ok)
        {
            const string subject = "STAFF SELF SERVICE PORTAL CREDENTIALS";
            string msg = "Staff portal credentials reset:<br>New password is <b>" + newpass + "</b>";
            if (SendEmailAlert(msg, email, subject))
            {
                Message("A new password has been generated and sent to your Email.");
                return;
            }
            else
            {
                Message("An error occured while sending you the credentials.Please contact the ICT office administrator.");
            }
        }
        else
        {
            LblError.Text = "Password reset failed, please recheck your staff number and/or consult your administrator";
        }
    }

    protected string GetStaffEmail(string username)
    {
        string rval = string.Empty;
        SqlConnection connToNAV = null;
        try
        {
            using (connToNAV = new SqlConnection(MyComponents.ConnectionString))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    string sqlStmt = "SELECT [Company E-Mail] FROM [" + MyComponents.Company_Name +
                                     " $Staff-table] WHERE [No_] = @username";
                    cmd.CommandText = sqlStmt;
                    cmd.Connection = connToNAV;
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("@username", username.Trim());

                    if (connToNAV.State != ConnectionState.Open)
                    {
                        connToNAV.Open();
                    }
                    using (SqlDataReader cmdReader = cmd.ExecuteReader())
                    {
                        if (cmdReader.HasRows == true)
                        {
                            cmdReader.Read();
                            rval = cmdReader["Company E-Mail"].ToString();
                        }
                        else
                        {
                            LblError.Text = "Warning!, password reset failed! contact your administrator!";
                        }
                        cmdReader.Close();
                    }
                }
            }
        }
        catch (Exception ex)
        {
            ex.Data.Clear();
        }
        finally
        {
            connToNAV.Close();
        }

        return rval;
    }


    private string GetTheAlphabet(int alphabetPosition, bool isCap)
    {
        string rval = string.Empty;
        switch (alphabetPosition)
        {
            case 1: rval = "A"; break;
            case 2: rval = "B"; break;
            case 3: rval = "C"; break;
            case 4: rval = "D"; break;
            case 5: rval = "E"; break;
            case 6: rval = "F"; break;
            case 7: rval = "G"; break;
            case 8: rval = "H"; break;
            case 9: rval = "I"; break;
            case 10: rval = "J"; break;
            case 11: rval = "K"; break;
            case 12: rval = "L"; break;
            case 13: rval = "M"; break;
            case 14: rval = "N"; break;
            case 15: rval = "O"; break;
            case 16: rval = "P"; break;
            case 17: rval = "Q"; break;
            case 18: rval = "R"; break;
            case 19: rval = "S"; break;
            case 20: rval = "T"; break;
            case 21: rval = "U"; break;
            case 22: rval = "V"; break;
            case 23: rval = "W"; break;
            case 24: rval = "X"; break;
            case 25: rval = "Y"; break;
            default: rval = "Z"; break;
        }
        return isCap ? rval : rval.ToLower();
    }

    public static bool SendEmailAlert(string body, string recepient, string subject)
    {
        Boolean x = false;

        string a = "";
        try
        {

            string SMTPHost = "smtp.gmail.com";
            string fromAddress = "myemail@domain.com";
            string toAddress = recepient;
            System.Net.Mail.MailMessage mail_ = new System.Net.Mail.MailMessage();
            mail_.To.Add(toAddress);
            mail_.Subject = subject;
            mail_.From = new System.Net.Mail.MailAddress(fromAddress);
            mail_.Body = body;
            mail_.IsBodyHtml = true;

            var smtp = new SmtpClient("smtp.gmail.com", 465)
            {
                Credentials = new NetworkCredential("myemail@domain.com", "mypassword"),
                EnableSsl = true
            };
            smtp.Send(mail_);

            x = true;
            a = "Sent";

        }
        catch (Exception ex2)
        {
            a = ex2.ToString();
            ex2.Data.Clear();
        }
        return x;
    }


    private bool ResetPassword(string userno, string newpass)
    {
        bool rval = false;
        SqlConnection connToNAV = null;
        try
        {
            using (connToNAV = new SqlConnection(MyComponents.ConnectionString))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    string sqlStmt = "UPDATE [" + MyComponents.Company_Name + " $Staff-table] ";
                    sqlStmt += "SET [Portal Password] = @Portal_Password,[Changed Password] = 1 ";
                    sqlStmt += "WHERE (1=1) AND ([No_] = @StaffNo) ";

                    if (connToNAV.State != ConnectionState.Open)
                    {
                        connToNAV.Open();
                    }
                    cmd.CommandText = sqlStmt;
                    cmd.Connection = connToNAV;
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("@Portal_Password", newpass);
                    cmd.Parameters.AddWithValue("@StaffNo", userno);
                    int rst = cmd.ExecuteNonQuery();
                    if (rst == 1)
                    {
                        rval = true;
                    }
                }
            }
        }
        catch (Exception ex)
        {
            ex.Data.Clear();
        }
        finally
        {
            connToNAV.Close();
        }
        return rval;
    }

    public void Message(string strMsg)
    {
        string strScript = null;
        strScript = "<script>";
        strScript = strScript + "alert('" + strMsg + "');";
        strScript = strScript + "</script>";
        Page.RegisterStartupScript("ClientScript", strScript.ToString());
    }

}
VDWWD
  • 35,079
  • 22
  • 62
  • 79
Alfred Kimotho
  • 99
  • 3
  • 17
  • The `catch` block in `SendEmailAlert` is swallowing the error. You need to log it somewhere so you can get more information. – John Wu Jan 17 '17 at 10:11
  • Possible duplicate of [Sending email in .NET through Gmail](http://stackoverflow.com/questions/32260/sending-email-in-net-through-gmail) – VDWWD Jan 17 '17 at 11:14
  • Reason could be you did not put `UseDefaultCredentials=false`. Make sure it is set before you assign network credential – a-man Jan 17 '17 at 12:13

1 Answers1

0

SMTPHost some times not work smtp.gmail.com so you can try

string SMTPHost = "yourdomainname.com";
var smtp = new SmtpClient("yourdomainname.com", 587) // Offline
var smtp = new SmtpClient("yourdomainname.com", 25) // Online
Genish Parvadia
  • 1,437
  • 3
  • 17
  • 30