3

プログラムを使用して同僚に電子メールを送信しようとしています。このプログラムは自分のデスクトップでは正常に動作していますが、エラーが発生しています

コマンドの順序が正しくありません。サーバーの応答は次のとおりです。最初に認証する必要があります (#5.5.1)

遠隔地にあるサーバーの1つ。認証行の位置を変更しようとしたエラーを誰かが指摘できますか。そして、エラーから多くを推測することはできません。両方の場所で同じユーザー名とパスワードが使用されています。

public static Boolean sendemail(String strFrom, string strTo, string strCC, string strBCC, string strReplyTO, string strSubject, string strBody, string strAttachmentPath, bool IsBodyHTML)
    {
        //Array arrToArray;
        //char[] splitter = { ';' };
        //arrToArray = strTo.Split(splitter);
        MailMessage mm = new MailMessage();
        bool flag = isEmailsString(strFrom);
        if (flag)
        {
            mm.From = new MailAddress(strFrom);
        }
        flag = isEmailsString(strTo);
        if (flag)
        {
            mm.To.Add(strTo);
        }
        flag = isEmailsString(strCC);
        if (flag)
        {
            mm.CC.Add(strCC);
        }
        flag = isEmailsString(strBCC);
        if (flag)
        {
            mm.Bcc.Add(strBCC);
        }

        flag = Regex.IsMatch(strReplyTO.Trim(), @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
        if (strReplyTO != null)
        {
            if (flag)
            {
                mm.ReplyTo = new MailAddress(strReplyTO);
            }
        }

        if (strSubject != null)
        {
            mm.Subject = strSubject;
        }
        mm.IsBodyHtml = IsBodyHTML;
        if (!string.IsNullOrEmpty(strAttachmentPath))
        {
            Array attachmentArray;
            char[] attachSplitter = { ',' };
            attachmentArray = strAttachmentPath.Split(attachSplitter);
            foreach (string s in attachmentArray)
            {
                string st = s.Trim();
                if (!string.IsNullOrEmpty(st))
                {
                    Attachment attach = new Attachment(st);
                    // Add the file attachment to this e-mail message.
                    mm.Attachments.Add(attach);
                    //strBodyFinal.Append(Environment.NewLine+"Go to the following link for more information"+Environment.NewLine);
                    //strBodyFinal.Append(st);
                }
            }
        }
        if (strBody != null)
        {
            mm.Body = strBody;
        }
        //foreach (string s in arrToArray)
        // {
        //     mm.To.Add(new MailAddress(s));
        // }
        SmtpClient smtp = new SmtpClient();
        try
        {
            System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
            NetworkCred.UserName = "my user name";
            NetworkCred.Password = "my password";
            smtp.Credentials = NetworkCred;
            smtp.Host = "my company mail site";//host of your mail account
            //smtp.EnableSsl = true;

            smtp.UseDefaultCredentials = false;
            smtp.Port = 2525;//port no of your mail account 
            smtp.Timeout = 500000;
            smtp.Send(mm);
            return true;

        }
        catch (Exception ex)
        {
            mm.Dispose();
            smtp = null;
            Console.WriteLine(ex.Message, ex.StackTrace);
            return false;
        }

    }
4

5 に答える 5

7

私はこの問題について多くのことを検索し、次のようなエラー メッセージのさまざまな解釈を見つけまし。しかし、実際には、上記のコードを次のように変更すると、問題はソートされました

SmtpClient smtp = new SmtpClient();
smtp.UseDefaultCredentials = false; // <<<you need THIS
System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
NetworkCred.UserName = "my user name";
NetworkCred.Password = "my password";
smtp.Credentials = NetworkCred;
smtp.Host = "my company mail site";//host of your mail account
smtp.Port = 2525;//port no of your mail account 
smtp.Timeout = 500000;
smtp.Send(mm);

新しい認証情報が割り当てられる前にUseDefaultCredentialsが設定されていることに注意してください。デフォルトを設定するシーケンスのこの変更は、私にとって魔法のように機能しました。falseCredentialsfalse

于 2013-02-15T12:22:14.430 に答える
0

記録として、ネットワーク ソリューション SMTP には小文字のユーザー名が必要なようです。 なんで?だって、だから。

それが役立つことを願っています..それを理解するのに非常に長い時間がかかりました..

パット NH アメリカ

于 2016-02-12T15:53:31.890 に答える
-1
System.Net.Mail.SmtpClient mailClient = new System.Net.Mail.SmtpClient(System.Configuration.ConfigurationSettings.AppSettings["smtp"]);                

//code by cv 8july2014
mailClient.UseDefaultCredentials = false; // <<<you need THIS
System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
NetworkCred.UserName = "username";
NetworkCred.Password = "Pasword";
mailClient.Credentials = NetworkCred;
//   mailClient.Host = "my company mail site";//host of your mail account
mailClient.Port = 2525;

// mailMsg = null;
//SmtpMail.SmtpServer = System.Configuration.ConfigurationSettings.AppSettings["smtp"];

while (counter < 3)
{
    try
    {
        mailClient.Send(mailMsg);        
        Thread.Sleep(2000);
        counter = 3;
        mailMsg = null;
    }
    catch (Exception ex)
    {
        counter = counter + 1;
        if (counter == 2)
        {
            throw ex;
            counter = 0;
        }
    }
}
于 2014-07-08T08:36:10.607 に答える