none
使用HttpUtility.SendEMail,无法收到邮件 RRS feed

  • 问题

  • 在本地的一台Server 2008 R2服务器上安装了SharePoint 2010,该服务器同时作为域控制器,并按照MSDN上的说明配置了传出电子邮件,

    http://technet.microsoft.com/zh-cn/library/cc263462.aspx

    安装SMTP Service,配置自动启动、匿名访问等等,SMTP Server配置为本机:moss2010.xxx.com

    发送邮件至QQ邮箱、Gmail邮箱都能够发送并且接收到,但是Microsoft的邮箱是接收不到的。

    客户机是内网的一台服务器,操作系统同样是Server 2008 R2,但不是域控制器,其他配置同样按照MSDN说明配置。

    SMTP Server配置为本机,能够发送成功,HttpUtility.SendEMail返回true,但是始终无法收到邮件。

    不大明白其中的原理,以及问题出在哪儿,请高手帮忙解答下,谢谢了!

     

     

    2012年1月11日 15:35

答案

  • 除了保存到配置文件(比如web.config)里,还可以保存到PropertyBag中

    SPFarm、SPWebApplication、SPWeb等等的Properties属性都可以用来保存这些自定义信息

    优点是可以很方便的通过代码、PowerShell去设置和读取;缺点就是没有界面

     

    自己发自己的有两种方式

    1、配置Kerberos认证,把用户的身份从前端直接带过去

    2、使用SSO(MOSS 2007)或者SSS(SharePoint 2010)保存当前用户的密码

    • 已标记为答案 BruceZhao 2012年2月1日 5:53
    2012年1月17日 5:45

全部回复

  • 你好 Brucezhao:

    根据你的描述,发送邮件至QQ邮箱、Gmail邮箱都能够发送并且接收到,但是Microsoft的邮箱是接收不到。还有HttpUtility.SendEMail返回true,所以你的邮件是发送出去了,只是没有接收到。而是被阻止了或者拦截了。在 exchange 2007 server 默认的 “Anonymous users” 是 disabled. 但是在 Exchange 2003 “Anonymous users” 默认是 enabled 的. 所以在一些版本较高的上面,匿名类型的邮件是被阻止的。

    这里有一篇文章(英文的)你可以参考一下。

    http://blogs.technet.com/b/neerajr/archive/2009/08/28/how-to-enable-anonymous-access-in-exchange-2007-if-sharepoint-server-does-not-sent-an-email-to-exchange-server.aspx 

     

    Thanks,

    Jack

    2012年1月13日 2:00
    版主
  • Jack,谢谢您的回复,非常感谢!

    Microsoft的邮箱,匿名是不被允许的。我打算用SmtpClient来发邮件。

    邮箱、密码只能配置到配置文件中吗?有别的好办法吗?

    能不能跟Outlook集成呢?用户自己发自己的啊!

    静候您的回复!

    2012年1月17日 3:15
  • 除了保存到配置文件(比如web.config)里,还可以保存到PropertyBag中

    SPFarm、SPWebApplication、SPWeb等等的Properties属性都可以用来保存这些自定义信息

    优点是可以很方便的通过代码、PowerShell去设置和读取;缺点就是没有界面

     

    自己发自己的有两种方式

    1、配置Kerberos认证,把用户的身份从前端直接带过去

    2、使用SSO(MOSS 2007)或者SSS(SharePoint 2010)保存当前用户的密码

    • 已标记为答案 BruceZhao 2012年2月1日 5:53
    2012年1月17日 5:45
  • Hi Bruce,

    邮箱,密码,邮件服务器的地址等等 可以配置在资源文件中,从资源文件中读取。就可以了 .下面是我曾经写的发送邮件的一个类。你可以比较一下。

    public class Common
        {
            private string userName;
            private string password;
            private string mailServer;
            private string sendMail;
            private string ccMail;

            public Common()
            {
                userName = RSBLL.GetString("MailUser");//MailUser等都是配置在资源文件中,你可以先死。直接用字符串就行了。
                password = RSBLL.GetString("MailPassword");
                mailServer = RSBLL.GetString("MailServer");
                sendMail = RSBLL.GetString("MailSender");
                ccMail = RSBLL.GetString("MailCC");
            }
            /// <summary>
            /// Public Send mail function
            /// </summary>
            /// <param name="receiveMail">Send address</param>
            /// <param name="cc">cc addresss,can bu null</param>
            /// <param name="subject">Subject</param>
            /// <param name="body">Content</param>
            /// <param name="attachmentsFilePath">Attachments</param>
            public void SendMail(string receiveMail,string cc,string subject,string body,string[] attachmentsFilePath)
            {
                //object
                    SmtpClient client = new SmtpClient();
                    MailMessage message = new MailMessage();
                try
                {
                   
                    //login to server
                    client.Credentials = new NetworkCredential(userName, password);
                    client.Host = mailServer;
                    //address
                    message.From = new MailAddress(sendMail);
                    message.To.Add(receiveMail);

                    string mailCC = String.Join(",", new string[] { ccMail, cc });
                    string[] mailCCs = mailCC.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries);
                    Regex reg = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
                    foreach (string mail in mailCCs)
                    {
                        if(reg.IsMatch(mail) && mail.ToLower().Contains("cadence"))
                        {
                            message.CC.Add(mail);
                        }
                    }
                   
                    //subject
                    message.Subject = subject;
                    //body
                    message.Body = body;
                    message.IsBodyHtml = false;
                    message.BodyEncoding = Encoding.UTF8;
                    //attachments
                    if (attachmentsFilePath != null)
                    {
                        foreach (string attFile in attachmentsFilePath)
                        {
                            message.Attachments.Add(new Attachment(attFile));
                        }
                    }
                    //send
                    client.Send(message);
                }
                catch (Exception ex){
                    throw ex;
                }
                finally{
                //clear
                message.To.Clear();
                message.CC.Clear();
                message.Attachments.Clear();
                message.Subject = String.Empty;
                message.Body = String.Empty;
                }
            }

            }

     

     

    Thanks,

    Jack

    2012年1月17日 8:29
    版主