c# - SMTP 错误的命令序列。服务器响应是 : You must authenticate first (#5. 5.1)

标签 c# smtp email

我正在尝试使用某个程序向我的一些同事发送电子邮件。该程序在我自己的桌面上运行良好,但出现错误

错误的命令序列。服务器响应是:您必须先进行身份验证 (#5.5.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;
        }

    }

最佳答案

我搜索了很多有关该问题的信息,并找到了对错误消息的不同解释,例如:在 BDAT 命令之后发出 MAIL 命令,所以它说命令序列错误。但实际上,当我将上面的代码更改为

时,问题就解决了
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);

请注意,在为 Credentials 分配新凭据之前,UseDefaultCredentials 设置为 false。这种将默认设置顺序更改为 false 对我来说神奇地起作用了。

关于c# - SMTP 错误的命令序列。服务器响应是 : You must authenticate first (#5. 5.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13678533/

相关文章:

c# - 组合框在使用触摸界面访问时会导致应用程序崩溃,但可以使用鼠标

c# - 不安装 SMTP 服务器发送邮件

android - 在android : javax. mail.messagingexception could not connect to smtp host异常中使用smtp从我们自己的域发送邮件

python - python/django 中的电子邮件白名单/黑名单

c# - Specified cast is not valid 错误使用 C#

c# - 如何分配 UIPopoverPresentationControllerDelegate

c# - 在 Windows 服务上设置恢复选项

smtp - 调试 SMTP 连接

sockets - 电子邮件中的倒计时器图像 GIF

java - 使用 Android 服务发送电子邮件