Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在基于windows窗体构建的电子邮件应用程序中验证密码?_C#_.net_Winforms_Visual Studio 2008 - Fatal编程技术网

C# 如何在基于windows窗体构建的电子邮件应用程序中验证密码?

C# 如何在基于windows窗体构建的电子邮件应用程序中验证密码?,c#,.net,winforms,visual-studio-2008,C#,.net,Winforms,Visual Studio 2008,昨天,我的前辈分配给我一项任务,在.net中构建一个windows窗体应用程序,它看起来像我附加的图像。我做了所有关于电子邮件应用程序发送过程的事情,但我只停留在一个地方,我不知道如何验证电子邮件表单中的密码。密码必须与“发件人:”字段中提供的电子邮件相同 这是我表格后面的代码 public partial class Form1 : Form { MailMessage message; SmtpClient smtp; public Form1() {

昨天,我的前辈分配给我一项任务,在.net中构建一个windows窗体应用程序,它看起来像我附加的图像。我做了所有关于电子邮件应用程序发送过程的事情,但我只停留在一个地方,我不知道如何验证电子邮件表单中的密码。密码必须与“发件人:”字段中提供的电子邮件相同

这是我表格后面的代码

 public partial class Form1 : Form
{
    MailMessage message;
    SmtpClient smtp;
    public Form1()
    {

        InitializeComponent();
        lbl_Error.Visible = false;
    }

    private void chk_Show_Password_CheckedChanged(object sender, EventArgs e)
    {

        if (chk_Show_Password.Checked == true)
            txt_Password.PasswordChar= '\0';
        else
            txt_Password.PasswordChar='*';



    }

    private void btn_Send_Click(object sender, EventArgs e)
    {
        btn_Send.Enabled = false;
        txt_Password.Text = "";


        try
        {
            message = new MailMessage();
            if(isValidEmail(txt_From.Text))
            {
                message.From = new MailAddress(txt_From.Text);
            }

            if (isValidEmail(txt_To.Text))
            {
                message.To.Add(txt_To.Text);
            }

            message.Body = txt_Details.Text;

            //attributes for smtp
            smtp = new SmtpClient("smtp.gmail.com");
            smtp.Port = 587;
            smtp.EnableSsl = true;
            smtp.UseDefaultCredentials = false;
            smtp.Credentials = new NetworkCredential("imad.majid90@gmail.com", "mypassword");
            smtp.Send(message);

        }

        catch(Exception ex)
        {
            btn_Send.Enabled = true;
            MessageBox.Show(ex.Message);

        }
    }

    public bool isValidEmail(string email)
    {
        bool flagFalse = false; ;
        if (!email.Contains('@'))
        {
            lbl_Error.Visible = true;
            lbl_Error.ForeColor = System.Drawing.Color.Red;
            lbl_Error.Text = "Email address must contain @";
            return flagFalse;
        }

        return true;
    }

}

假设您使用的是Gmail,就像您发布的屏幕截图所显示的那样,您无法在不发送电子邮件的情况下检查密码

我的建议是尝试发送电子邮件,如果失败,则捕获异常。然后,您可以显示出现错误的一些指示,如表单上的MessageBox或标签

有关详细信息,请参阅文档。如果身份验证失败,
Send
方法将抛出
SmtpException

编辑:


在看到您发布的其他代码后,您已经在处理抛出的任何异常,包括身份验证失败。如果密码不正确,用户将看到一个消息框。

假设您使用的是Gmail,如您发布的屏幕截图所示,您无法在不发送电子邮件的情况下检查密码

我的建议是尝试发送电子邮件,如果失败,则捕获异常。然后,您可以显示出现错误的一些指示,如表单上的MessageBox或标签

有关详细信息,请参阅文档。如果身份验证失败,
Send
方法将抛出
SmtpException

编辑:


在看到您发布的其他代码后,您已经在处理抛出的任何异常,包括身份验证失败。如果密码不正确,用户将看到一个消息框。

尝试捕获
SmtpException
,并向未经身份验证的用户显示信息

看起来您正在使用Windows身份验证。从
Active Directory
获取用户的电子邮件可能比提示输入凭据更容易


SmtpException
执行一次尝试捕获,并向未经身份验证的用户显示信息

看起来您正在使用Windows身份验证。从
Active Directory
获取用户的电子邮件可能比提示输入凭据更容易


我不太明白。。。您需要验证其发送电子邮件的密码是否正确?为什么不尝试发送电子邮件并捕获失败的异常?然后我会在设计上添加另一个标签,并在代码隐藏文件中捕获错误并在标签中显示。这就是你给我的建议-@JEBAR8有关更多详细信息,请参阅我的答案。感谢您的回答,我意识到了这个错误,在密码凭据中,我必须在密码文本框中输入值,而不是硬编码密码。非常感谢杰巴:-)我不太明白。。。您需要验证其发送电子邮件的密码是否正确?为什么不尝试发送电子邮件并捕获失败的异常?然后我会在设计上添加另一个标签,并在代码隐藏文件中捕获错误并在标签中显示。这就是你给我的建议-@JEBAR8有关更多详细信息,请参阅我的答案。感谢您的回答,我意识到了这个错误,在密码凭据中,我必须在密码文本框中输入值,而不是硬编码密码。非常感谢jebar:-)非常感谢Kye,我现在得到了解决方案,意识到了我愚蠢的错误:-)非常感谢Kye,我现在得到了解决方案,意识到了我愚蠢的错误:-)
 catch(Exception ex)
    {
        btn_Send.Enabled = true;
       // MessageBox.Show(ex.Message);
         lbl_Error.Text = "Invalid Username/Password";

    }