C# 如何在基于windows窗体构建的电子邮件应用程序中验证密码?
昨天,我的前辈分配给我一项任务,在.net中构建一个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() {
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";
}