-3

好的,我一直在寻找解决方案,但我很难过。我正在用 C# 制作一个电子邮件客户端。我可以在 c# 中解决问题,但有时会被语法所困扰。

这是我的问题。我正在尝试根据用户输入的电子邮件分配 smtpclient 设置。我在第 53 行遇到错误(使用未分配的局部变量)。

smtpclient smm = new smtpclient(s, p);

这是我的代码:

        private void Send_Click(object sender, EventArgs e)
    {
        //Set the login info for the email
        NetworkCredential nc = new NetworkCredential(Euser.Text, Epass.Text);
        MailMessage msg = new MailMessage();

        msg.To.Add(Toemail.Text);
        msg.From = new MailAddress(Euser.Text);
        msg.Subject = Subemail.Text;
        msg.Body = body.Text;

        string s;
        int p;

        if (Euser.Text.Contains("@gmail.com") == true)
        {
            s = "smtp.gmail.com";
            p = 587;
        }
        if (Euser.Text.Contains("@yahoo.com") == true)
        {
           s = "smtp.mail.yahoo.com"; 
           p = 995;
        }
        if (Euser.Text.Contains("@live.com") == true)
        {
           s = "smtp.live.com"; 
           p = 587;
        }

        SmtpClient smm = new SmtpClient(s, p);

        smm.Credentials = nc;
        smm.EnableSsl = true;

        try
        {
            smm.Send(msg);
            MessageBox.Show("Emails Sent Successfully");
        }
        catch (Exception ex)
        {
            MessageBox.Show("There was an error sending your emails");
        }

我到底做错了什么?我应该为此创建一个方法吗?任何帮助表示赞赏。

4

2 回答 2

1

你必须在所有情况下给你的变量一个值。现在,如果你的if测试都不是真的,那么s最终p会是什么?他们永远不会被设置为任何事情。

为避免该错误,您可以使用默认值初始化变量:

string s = null;
int p = 0;

或者如果有意义的话,给他们一些更有意义的东西。

另一种方法是使用 anelse来捕获其他所有内容。但是,您必须将if语句重组为else ifs (无论如何这会更好。如果您已经找到匹配项,则不必继续测试进一步的匹配项):

if (test)
{
}
else if (test)
{
}
else if (test)
{
}
else
{
    s = null;
    p = 0;
}
于 2013-05-17T17:27:34.730 回答
0

如果你没有进入任何 IF,你在 s 和 p 中没有值,所以设置一个默认值或放置一个 ELSE

于 2013-05-17T17:28:39.520 回答