以AD群发送电子邮件

时间:2013-11-06 04:00:28

标签: c# .net email active-directory smtp

在.NET中,我可以使用我拥有的AD群组的身份发送电子邮件吗?

我目前的代码:

        using (var smtp = new SmtpClient("smtp.somecompany.com"))
        {
            smtp.Credentials = CredentialCache.DefaultNetworkCredentials;
            var mail = new MailMessage("mygroup@somecompany.com", recipients)
            {
                ...
            };

            smtp.Send(mail);
        }

我正在接受

  

System.Net.Mail.SmtpException:邮箱不可用。服务器响应为:5.7.1客户端无权作为此发件人发送

我知道我可以使用

以不同的用户身份发送
smtp.Credentials = new NetworkCredential(...)

并传递名称/密码对。

但是,AD组没有密码,我认为组别名甚至不算作用户名。

那么可以根据群组发送电子邮件吗?

4 个答案:

答案 0 :(得分:1)

AD群组是安全对象,与电子邮件没有直接关系。例如,如果您有一个开发组,并且您希望开发组中的任何人访问该邮箱,则可以通过交换设置AD组中的任何人都可以访问的共享邮箱。也可以将该邮箱的发送地址设置为dev@yourdomain.com。

使用示例中的代码创建共享邮箱可以正常工作。

答案 1 :(得分:1)

如果您可以在内部(组织用户)发送包含单用户电子邮件ID的电子邮件,但不能使用组电子邮件ID发送电子邮件,请检查您是否使用了组电子邮件ID的正确SMTP地址(请检查此电子邮件的属性)外表)。

如前面的答案所述,AD群组与电子邮件没有直接关系。您可以创建通讯录(电子邮件ID但没有邮箱)和用户(带邮箱的电子邮件ID)。

在java中我正在使用:

        String SMTP_HOST_NAME = "exchange_server";
        String SMTP_AUTH_USER = "mygroup@mydomain.com";
        String SMTP_AUTH_PWD  = "";

        Properties props = new Properties();
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.host", SMTP_HOST_NAME);
        props.put("mail.smtp.auth", "false");

注意:请检查SMTP_AUTH_PWD是否为空,mail.smtp.auth也为false。

另外,检查专门针对外部域邮件的邮件中继选项:

邮件中继选项:请与您的MS交换团队联系,为您的服务器启用此选项。

帮助链接:  https://confluence.atlassian.com/display/CONFKB/550+5.7.1+Unable+to+Relay+Mail+From+Exchange+Server

启用此选项后,可能是所有用户都无法向外部域发送电子邮件,这取决于您的公司政策。因此,在从您的应用程序发送到MS-Exchange的成功邮件之后,它可以在邮件安全设备(如cisco ironport)中被阻止。希望这会有所帮助。

答案 2 :(得分:0)

在.NET中,我可以使用我拥有的AD群组的身份发送电子邮件吗?

好吧。您必须在AD中创建/选择用户,然后将该用户分配给启用邮件的通用安全组。确保为该组分配电子邮件地址。然后在.net代码中,您必须作为其中一个用户进行身份验证,但将mail.from更改为已启用邮件的通用安全组电子邮件地址。现在,如果有人回复该电子邮件,该邮件将转到已启用邮件的通用安全组,并将转发给该组内的所有用户。 Exchange需要身份验证,因此您可以选择已启用邮件的安全组中的任何人作为身份验证器。

http://technet.microsoft.com/en-us/library/bb123805(v=exchg.141).aspx

答案 3 :(得分:-1)

MailMessage mail = new MailMessage();
mail.From = new System.Net.Mail.MailAddress("mygroup@somecompany.com");

// The important part -- configuring the SMTP client
SmtpClient smtp = new SmtpClient();
smtp.Port = 587;   // [1] You can try with 465 also, I always used 587 and got success
smtp.EnableSsl = true;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network; // [2] Added this
smtp.UseDefaultCredentials = false; // [3] Changed this
smtp.Credentials = new NetworkCredential(mail.From,  "password_here");  // [4] Added this. Note, first parameter is NOT string.
smtp.Host = "smtp.somecompany.com";            

//recipient address
mail.To.Add(new MailAddress("yyyy@xxxx.com"));

//Formatted mail body
mail.IsBodyHtml = true;


mail.Body = st;
smtp.Send(mail);

请尝试一下,并提供您的问题的端口号

How to send email in ASP.NET C#

毕竟检查此链接..