【发布时间】:2011-09-08 20:05:47
【问题描述】:
我们正在测试新的 Office 365 测试版,我在 Exchange Online 服务上有一个邮件帐户。现在我正在尝试连接一个可以从我的测试帐户发送 smtp 电子邮件的 LOB 应用程序。
但是,Exchange 365 平台要求对端口 587 进行 TLS 加密,并且 System.Net.Mail 的“功能”不允许隐式 SSL 加密。
有没有人设法让 C# 通过这个平台发送邮件?
我有以下应该发送邮件的基本代码 - 任何建议都将不胜感激。
SmtpClient server = new SmtpClient("ServerAddress");
server.Port = 587;
server.EnableSsl = true;
server.Credentials = new System.Net.NetworkCredential("username@mydomain.com", "password");
server.Timeout = 5000;
server.UseDefaultCredentials = false;
MailMessage mail = new MailMessage();
mail.From = new MailAddress("recipent@anyaddress");
mail.To.Add("username@mydomain.com");
mail.Subject = "test out message sending";
mail.Body = "this is my message body";
mail.IsBodyHtml = true;
server.Send(mail);
【问题讨论】:
-
是的,你得到一个超时 - 这显然是默认失败
-
所以我开始怀疑这是否可能使用 C# 以及 System.Net.Mail 命名空间对 SSL 设置的限制。似乎 Exchange 在 Office 365 上公开了它的 web 服务,并且很多文章都在谈论利用它来处理邮箱等。但是我真的不想将整个邮箱公开给我的 LOB 应用程序。 SMTP 中的“S”代表“简单”——我简直不敢相信微软安装的微软邮件服务器不能使用微软的编程语言。请有人告诉我我在这里遗漏了一些东西!
-
我希望我有一台服务器可以试一试。所以,它的超时,这是一个问题。由于您的测试邮件是纯文本,如果您不说正文是HTML,它是否有效?
-
我把上面的代码改成了 mail.IsBodyHtml = false;但我仍然得到超时。我很感激这个建议——在这个时候我愿意尝试任何事情来让它发挥作用!
-
在这一点上,我会指责 MS 并说交易所不公平。邮件是否已发送并且它以某种方式期望您关闭连接?如果您将几条消息(例如 1 给自己)排成一行,这是否有效 - 交换人员是否能够看到任何显示的日志文件,例如连接,这可能是一个中继问题,因为您不允许这样做,但它需要连接并挂起(我的反垃圾邮件可以做到这一点)..?
标签: c# exchange-server office365 sendmail system.net.mail