编写一个SMTP的邮件发送小程序,其它都做好,只有在最后的放送里返回一个异常SmtpStatusCode.MailboxNameNotAllowed,目标邮箱语言错误.我用的163的邮件服务器,stmp.163.com.发件人和收件人都是163的注册邮箱.下面是发送邮件的方法
        string[] e_mail:保存收件人邮箱的数组.
        private void SendMail(string smtpserver,string sende_mail,string[] e_mail,string subject,MailPriority property)
        {
            SmtpClient myclient = new SmtpClient(smtpserver);//设置邮件服务器
            try
            {
                //create a new MailMessage
                MailAddress from = new MailAddress(sende_mail);
                MailAddress to = new MailAddress(e_mail[0]);                MailMessage mymail = new MailMessage(from,to);                mymail.BodyEncoding = Encoding.UTF8;
                mymail.Body = subject;
                mymail.Priority = MailPriority.Normal;                AddAttachment(mymail);//add attachments                //for (int i = 1; i < e_mail.Length;i++)//create copys
                    //mymail.CC.Add(new MailAddress(e_mail[i]));                myclient.Credentials = CredentialCache.DefaultNetworkCredentials;//身份认证
                myclient.Send(mymail);
            }catch (ArgumentNullException setmailexc){
                MessageBox.Show("参数不能为空\n" + setmailexc.ToString(), "错误");
                return;
            }catch (ArgumentOutOfRangeException toexc){
                MessageBox.Show("没有收件人\n"+toexc.ToString(), "错误");
                return;
            }catch (SmtpException sendexc){
                Setstatus("发送失败");
                JudgeStatusCode(sendexc);//根据返回的smtpexception的smtpstatuscode显示错误信息
            }catch (InvalidOperationException sendexc){
                MessageBox.Show("正在发送\n"+sendexc.ToString(), "错误");
                return;
            }
        }

是不是163的邮件服务器有什么特别的?为什么会出现目标邮箱语法错误的提示?

解决方案 »

  1.   

    我这两天也在做这个东西,我没有看到你的用户名和密码之类的语句?
    sc = new SmtpClient("smtp.163.com", 25);
    sc.Credentials = new NetworkCredential(用户名, 密码);//设置用户发送邮件的凭据
    一个最简单的较完整的Smtp发送邮件代码
            private void Send_Click(object sender, EventArgs e)
            {
                try
                {
                    mm = new MailMessage("####@163.com", tbmailTo.Text.Trim(), tbmailSubject.Text, sendMessage.Text);
                    //mm.BodyEncoding = Encoding.GetEncoding("gb2312");
                    sc = new SmtpClient("smtp.163.com", 25);
                    sc.Credentials = new NetworkCredential("hwj383", "huangjie");//设置用户发送邮件的凭据
                    //sc.DeliveryMethod = SmtpDeliveryMethod.Network;//处理未发送邮件
                    //sc.EnableSsl = true;//使用SSL安全连接
                    Thread send = new Thread(new ThreadStart(send_Mail));
                    send.Start();
                    sendStatus.Text = "请稍后,正在发送邮件...";
                    this.Send.Enabled = false;
                }
                catch//(Exception exp)
                {
                    //MessageBox.Show(exp.Message);
                    MessageBox.Show("请检查收件人地址是否正确!");
                }
            }        private void send_Mail()
            {
                try
                {
                    sc.Send(mm);
                    this.BeginInvoke(new update(updateUI),0);
                }
                catch(Exception exp)
                {
                    MessageBox.Show(exp.Message);
                    this.BeginInvoke(new update(updateUI), 1);
                }
            }
      

  2.   

    如果要用Scoket发送邮件的话,您需要至少要了解Smtp服务原语,和Base:64编码
      

  3.   

    用socket的话只知道一些发送邮件的指令,而且对于附件怎么处理不懂.谢谢HWJ383.
      

  4.   

    标记下,之前自己是用vs2003引入cdo来实现的。回家再仔细看lz的帖子。