我正在尝试通过我们公司的交换服务器发送来自c#代码的电子邮件。
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("exchangebox1.mycompany.com");
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage("Me@myCompany.com",
"Them@mycompany.com",
"title here",
"body here");
client.Send(msg);
当我运行这个时,我得到SmptException,说“服务不可用,关闭传输通道。服务器响应是4.3.2服务不可用,关闭传输通道”。
我正在解释这意味着我们的交换机上没有启用SMTP,并且我需要使用本机Exchange Server命令来发送邮件。这是对的,还是SMTP应该始终有效?
此外,是否可以将Exchange服务器配置为仅允许某些计算机/用户通过SMTP发送主服务器?
如何在不使用SMTP的情况下通过Exchange Server发送邮件?
感谢。
答案 0 :(得分:7)
您可以使用WCF Exchange Server Mail Transport 一个如何实施的例子是Here
特别是关于发送消息的说法
当应用程序发送消息时, 它调用了Send方法 当前的输出通道,必须是 打开。输出通道序列化 消息到字符串并创建 “草稿”文件夹中的消息。它 在中设置适当的值 电子邮件字段。当消息有 已被创建,它被移入了 发件箱。这通过CEMAPI发生 设备或通过Exchange Web 桌面上的服务。在 设备,发件箱中的消息是 与其他传出同步 消息,由ActiveSync定义。
答案 1 :(得分:4)
您可以使用新的Exchange Web服务托管API 1.0。它似乎是最好的解决方案。 继承人的链接。
<击> http://msdn.microsoft.com/en-us/library/dd637749(v=exchg.80).aspx 击>
https://blogs.technet.com/b/exchange/archive/2009/04/21/3407328.aspx
接受也将接受分发列表。
API的2.0版本 http://msdn.microsoft.com/en-us/library/office/dd633709.aspx
答案 2 :(得分:3)
尝试在发送之前添加这两行:
client.UseDefaultCredentials = true;
client.EnableSsl = true;
这很可能是没有凭据的问题,所以我会从谷歌中稍作弊... From dailycode.net
答案 3 :(得分:0)
我知道这是一个旧线程,但为了完整起见,您应该考虑 Microsoft Exchange WebServices nuget包:
https://www.nuget.org/packages/Microsoft.Exchange.WebServices
ExchangeService service = new ExchangeService();
service.AutodiscoverUrl("youremailaddress@yourdomain.com");
EmailMessage message = new EmailMessage(service);
message.Subject = "my subject";
message.Body = "my body";
message.ToRecipients.Add("my_target@example.com");
message.Save();
message.SendAndSaveCopy();