自己写的一个发送邮件的程序,主要代码如下:
                SmtpClient smtpClient = new SmtpClient();
                smtpClient.UseDefaultCredentials = true;
                smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;                     //指定电子邮件发送方式                smtpClient.Credentials = new System.Net.NetworkCredential(userName, pwd);   //用户名和密码
                smtpClient.Host = smtpserver; ;                                             //指定SMTP服务器
                MailMessage mailMessage;
                if (strTo.Trim().IndexOf(";") <= 0)
                {
                    mailMessage = new MailMessage(strfrom, strTo);
                }
                else
                {                    mailMessage = new MailMessage();
                    mailMessage.From = new MailAddress(strfrom);
                    for (int i = 0; i < to.Length; i++)
                    {
                        if (to[i].Trim() == "")
                        {
                            Log("发送人:" + FromUserName + "接收人邮箱:" + strTo + "  时间:" + DateTime.Now);
                        }
                        else
                        {
                            mailMessage.To.Add(to[i]);
                        }
                    }                }                mailMessage.Subject = subj;
                string html = "<table ><tr><td width='80px'> 发件人:</td><td>" + FromUserName + "&nbsp;&nbsp;" + FromEmail;
                html += "</td></tr><tr><td width='80px'>提交时间:</td><td>" + AddTime;
                html += "</td></tr><tr><td width='80px'>抄送人:</td><td>" + ToNameList;
                html += "</td></tr><tr><td width='80px' valign=top>内容:</td><td>" + bodys;
                html+="</td</tr></table>";
                mailMessage.Body = html;
                mailMessage.BodyEncoding = System.Text.Encoding.Default;                    //正文编码
                mailMessage.IsBodyHtml = true;                                              //设置为HTML格式
                mailMessage.Priority = MailPriority.High;                                   //优先级
                smtpClient.Send(mailMessage);
发送邮件的邮箱是一个企业邮箱(不是免费的),格式为*****@***.com.cn,接收邮件的邮箱和发送邮件的邮箱是同一域的,但
是发送的过程中总是出错,错误日志信息如下:
错误信息:Mailbox name not allowed. The server response was: 5.7.1 <***@*****.com.cn>: Sender address rejected: not logged in 发送人:***接收人邮箱:****@****.com.cn  时间:2010-5-10 9:13:25;然后我把发送邮件的邮箱换成另外一个不是这个邮件域内的又可以发送出去,真不知道是怎么回事?麻烦高手帮忙看看,万分感谢!

解决方案 »

  1.   

    错误提示:寄件人地址被拒绝:没有登录 //邮箱帐号的登录名 
                string username = uname;
                //邮件发送者 
                MailAddress from = new MailAddress(Email);
                //邮件接收者 
                MailAddress to = new MailAddress(Umail);
                MailMessage mailobj = new MailMessage(from, to);
                //添加发送和抄送 
                // mailobj.To.Add(""); // mailobj.CC.Add(""); 
                //邮件标题 
                mailobj.Subject = title;
                //邮件内容 
                mailobj.Body = Message;
                //邮件不是html格式 
                mailobj.IsBodyHtml =true;
                //邮件编码格式 
                mailobj.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");
                //邮件优先级 
                mailobj.Priority = MailPriority.Normal; 
                //邮箱服务器
                SmtpClient smtp = new SmtpClient(EmailServers);
                //或者用: 
                //SmtpClient smtp = new SmtpClient(); 
                //smtp.Host = mailServer; 
                //不使用默认凭据访问服务器 
                smtp.UseDefaultCredentials = false; 
                smtp.Credentials = new NetworkCredential(username,pwd);
                //使用network发送到smtp服务器 
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                //开始发送邮件 
                smtp.Send(mailobj);看看是不是你哪里写错了
      

  2.   

    smtpClient.Credentials = new System.Net.NetworkCredential(userName, pwd); //用户名和密码应该是此处的问题
      

  3.   

    第二句smtpClient.UseDefaultCredentials = false;
      

  4.   

    userName 可能是完整的E-mail格式:****@***.com.cn 或者 ****如果使用SSL的话
    smtpClient.EnableSsl = true;
      

  5.   

    //一:用自己的服务器作为邮件服务器时:
    //如出现:邮箱不可用。 服务器响应为: 5.7.1 Unable to relay for ***@gmail.com
    //解决办法如下:在IIS中,右击“默认SMTP虚拟服务器”,选择“属性”,切换到“访问”页,点击“中继”按钮,在弹出框中选择“仅以下列表除外”,确定。
    //二:用其它的邮件服务器发送,经测试大多数免费邮箱都不提供SMTP服务,用qq邮箱的就可以,方法:进入qq邮箱-->设置-->帐户-->开通POP3/IMAP/SMTP服务,即可用smtp.qq.com作为邮件服务器了,可用它来发送邮件using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Net.Mail;public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {    }    public void SendSMTPEMail(string strSmtpServer, string strFrom, string strFromPass, string strto, string strSubject, string strBody)
        {
            System.Net.Mail.SmtpClient client = new SmtpClient(strSmtpServer);
            client.UseDefaultCredentials = false;
            client.Credentials = new System.Net.NetworkCredential(strFrom, strFromPass);
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            System.Net.Mail.MailMessage message = new MailMessage(strFrom, strto, strSubject, strBody);
            message.BodyEncoding = System.Text.Encoding.UTF8;
            message.IsBodyHtml = true;
            client.Send(message);
        }
        //第一个参数是邮箱服务器
        //第二个参数发件人的帐号
        //第三个参数发件人密码
        //第四个参数收件人帐号
        //第五个参数主题
        //第六个参数内容.
        protected void Button1_Click(object sender, EventArgs e)
        {//发送邮件
            try
            {
                //SendSMTPEMail("nz.oicp.net", "[email protected]", "123", "[email protected]", "123", "用asp.net发送邮件,用自己的邮件服务器,测试成功");
                SendSMTPEMail("smtp.qq.com", "[email protected]", "123xxxxxxx", "[email protected]", "123", "用asp.net发送邮件,用qq的smtp.qq.com服务器,测试成功");        }
            catch (Exception er)
            {
                Label1.Text = er.Message;
            }
        }
    }
      

  6.   

    一楼,三楼:
    我修改了:smtpClient.UseDefaultCredentials = false;
    可还是同样的错误;
    二楼:
    我也觉得问题出在smtpClient.Credentials = new System.Net.NetworkCredential(userName, pwd); //用户名和密码
    这个地方,好像是没有和邮件服务器连接上,但是就是不知道原因是什么
    四楼:
    如果发件箱只要***@**.com.cn前面的部分‘***’的话,程序报错:邮箱格式不正确,所以还是要用完整的邮箱
    这个发件箱使用的是35互联的企业邮箱;大家再帮忙分析一下是什么问题!
      

  7.   

    楼上说的是在IIS里面自己搭建邮件发送的服务器吗?
      

  8.   

    第一种方法:我是用WIN2003系统的,在本机安装POP3、SMTP邮件服务,进行测试成功的
    第二种方法:是用qq的SMTP邮件服务器测试成功的
      

  9.   

    我的也是win2003的系统,这个程序刚开始的时候也是可以发送出去的,现在这个程序已经用了1年多了,而且设置的是每5分钟发送一次,每次发送20封,发送程序总是在不停的发送邮件,所以一天会发送出5000多封邮件,刚开始的时候是没有问题的,现在时不时的总会出现我刚开始的时候说的那个错误
      

  10.   

    邮箱是付费的;在web页面里面都可以成功发送出邮件的,但是通过我的程序发送的时候却发布出去;邮箱的限制是一分钟不能超过30封,我的设置没有问题,真是头痛啊!
      

  11.   

    我觉得问题还是在  smtpClient.Credentials = new System.Net.NetworkCredential(userName, pwd); 这个地方,错误提示一直是:邮箱没有登陆,那就是验证用户名和密码的时候出现问题,但是又不知道微软的这个验证机制是什么原理,它是怎么和我的那个邮箱服务器连接来进行验证的,有哪些限制?
      

  12.   

    smtpClient.EnableSsl = true;
    试试