zoukankan      html  css  js  c++  java
  • 关于TFS2012无法发送警报邮件的问题

    前几天把公司的TFS从2010升级到2012,整个过程经历了3个小时,过程比较顺利。升级完成后眼馋各种新功能,感叹知识真是待到用时方恨少呐,只得一个一个去摸索了。其中有一个“警报”的功能让我印象深刻(其实以前的版本也有,只是经理没给咱们用。现在经理离职了。。。)。“警报”介绍就不多说了,有兴趣的朋友点这里查看官方介绍。

    1.首先需要在TFS管理控制台中开启“电子邮件通知”(也可以使用TFSConfig命令行工具配置)。

    2.配置警报规则,例如指派给我工作项时触发,或是我的工作项发生更改时触发等等。

    经过以上简单配置以后一直收不到通知邮件。翻看系统日志时发现错误消息:

    TF53010: Team Foundation 组件或扩展中发生了以下错误: 日期(UTC): 2014/6/7 6:01:45 计算机: TEAMLONG-TFS 应用程序域: TfsJobAgent.exe 程序集: Microsoft.TeamFoundation.Framework.Server, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a; v4.0.30319 服务主机: 进程详细信息:   进程名称: TFSJobAgent   进程 ID: 2608   线程 ID: 6732   帐户名称: NT AUTHORITYLOCAL SERVICE

    详细消息: TF271001: 尝试将电子邮件通知发送到以下地址时出错: test@ms.com。可能无法记录随后五分钟内发生的更多电子邮件通知错误。请在 Team Foundation 管理控制台中验证电子邮件通知设置是否正确。 异常消息: 操作已超时。 (类型 SmtpException) 异常堆栈跟踪:    在 System.Net.Mail.SmtpClient.Send(MailMessage message)    在 Microsoft.TeamFoundation.JobService.Extensions.Core.NotificationJobExtension.SendEmail(TeamFoundationRequestContext requestContext, TeamFoundationNotification notification, TeamFoundationIdentity subscriber)

    提出错误消息中的关键信息:

    1.出现异常的函数为System.Net.Mail.SmtpClient.Send(MailMessage message)。

    2.异常为操作已超时。

    为了便于调试,在本地创建一个简单的控制台程序。

        class Program
        {
            static void Main(string[] args)
            {
                SmtpClient client = new SmtpClient();
                client.Port = 465;
                client.Host = "smtp.exmail.qq.com";
                client.EnableSsl = true;
                client.Timeout = 10000;
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                client.UseDefaultCredentials = false;
                client.Credentials = new System.Net.NetworkCredential("test@ms.com", "1234567890");
                MailMessage mm = new MailMessage("test@ms.com", "user1@ms.com", "test", "test");
                mm.BodyEncoding = UTF8Encoding.UTF8;
                mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
                client.Send(mm);
            }
        }

    问题出现在TFS使用的是System.Net.Mail下的SmtpClient来发送邮件,而System.Net.Mail only仅支持Explicit SSL。这样一来就好办了,不使用SSL就行了嘛,修改测试源码,测试通过。

        class Program
        {
            static void Main(string[] args)
            {
                SmtpClient client = new SmtpClient();
                client.Host = "smtp.exmail.qq.com";
                client.Port = 25;
                client.Port = 465;
                client.EnableSsl = true;
                client.Timeout = 10000;
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                client.UseDefaultCredentials = false;
                client.Credentials = new System.Net.NetworkCredential("test@ms.com", "1234567890");
                MailMessage mm = new MailMessage("test@ms.com", "user1@ms.com", "test", "test");
                mm.BodyEncoding = UTF8Encoding.UTF8;
                mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
                client.Send(mm);
            }
        }

    最后在配置TFS邮件通知设置的时候端口改用25,不选择SSL,顺利解决问题。

    SmtpClient发送邮件超时的异常参考:

    http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx

  • 相关阅读:
    IfcBuildingStorey
    IfcBuilding
    IfcSpatialStructureElement (空间结构元素)
    IfcSpatialElement
    IfcProduct
    IfcPropertyDefinition
    IfcObject
    IfcObjectDefinition
    IfcRoot
    IfcTaskTime
  • 原文地址:https://www.cnblogs.com/chengjie/p/3774799.html
Copyright © 2011-2022 走看看