1

昨日、添付した画像のような Windows フォーム アプリケーションを .net で作成するタスクが先輩から割り当てられました。メール アプリケーションの送信プロセスに関するすべての作業を行いましたが、1 か所で行き詰まりました。メール フォームでパスワードを認証する方法がわかりませんでした。パスワードは、「From :」フィールドに入力したものと同じ電子メールのものである必要があります。この画像は私がデザインしたフォームを表示しています

これが私のフォームの背後にあるコードです。

 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;
    }

}
4

3 に答える 3

1

投稿したスクリーンショットのように Gmail を使用していると仮定すると、メールを送信しないとパスワードを確認できません。

私のアドバイスは、メールを送信して、失敗した場合は例外をキャッチすることです。次に、フォームの MessageBox や Label など、エラーが発生したことを示す兆候を示すことができます。

のドキュメントを参照してくださいSmtpClient。メソッドは、認証が失敗しSendた場合にスローします。SmtpException

編集:

投稿した追加のコードを確認した後、スローされた例外 (認証の失敗を含む) を既に処理しています。パスワードが正しくない場合、ユーザーには MessageBox が表示されます。

于 2013-03-07T05:14:53.933 に答える
0

キャッチしてみSmtpExceptionて、認証されていないユーザーに情報を表示してください。

http://msdn.microsoft.com/en-us/library/h1s04he7.aspx

クレデンシャルの入力を求めるよりWindows Authentication.も、ユーザーの電子メールを取得する方が簡単な場合があります。Active Directory

ウィンドウ認証でメールアドレスを取得する方法

于 2013-03-07T05:21:30.857 に答える
0
 catch(Exception ex)
    {
        btn_Send.Enabled = true;
       // MessageBox.Show(ex.Message);
         lbl_Error.Text = "Invalid Username/Password";

    }
于 2013-03-07T05:43:40.220 に答える