使用C#调用Outlook Office365发邮件失败,求正确服务URL
解决Office 365 Outlook邮件发送的EWS URL问题
嘿,针对你用ExchangeService发送Office 365邮件失败的问题,首先明确:正确的EWS(Exchange Web Services)URL是https://outlook.office365.com/EWS/Exchange.asmx,这是Microsoft 365(原Office 365)统一的EWS端点。
另外看了你的代码,还有几个关键问题可能导致发送失败,顺便帮你修正一下:
- Exchange版本太老:你用的
ExchangeVersion.Exchange2010_SP1已经不被Microsoft 365支持了,换成ExchangeVersion.Exchange2013_SP1或者更高版本(比如Exchange2016)才能保证兼容性。 - 变量大小写错误:代码里
new EmailMessage(myservice)的myservice应该是myService(首字母大写),否则会编译报错,这也是常见的小坑。 - 异常捕获不对:EWS API抛出的不是
SmtpException,而是ServiceRequestException(属于Microsoft.Exchange.WebServices.Data命名空间),捕获这个异常才能拿到真正的EWS错误信息,帮你排查问题。
修正后的完整代码如下:
using Microsoft.Exchange.WebServices.Data; ExchangeService myService = new ExchangeService(ExchangeVersion.Exchange2013_SP1); myService.Credentials = new WebCredentials(sender_mailId, sender_password); try { string serviceUrl = "https://outlook.office365.com/EWS/Exchange.asmx"; myService.Url = new Uri(serviceUrl); EmailMessage emailMessage = new EmailMessage(myService); emailMessage.Subject = "Subject test "; emailMessage.Body = new MessageBody("Testing Exchange Web Service API"); emailMessage.ToRecipients.Add(to_email_id); emailMessage.Send(); } catch (ServiceRequestException exception) { string msg = $"Mail cannot be sent (EWS Service Error): {exception.Message}"; // 可选:打印内部异常获取更详细信息 if (exception.InnerException != null) { msg += $"\nInner Details: {exception.InnerException.Message}"; } throw new Exception(msg); } catch (Exception ex) { // 兜底捕获其他意外异常 throw new Exception($"Unexpected error when sending mail: {ex.Message}", ex); }
最后补充个重要提醒:如果你的Microsoft 365租户启用了现代安全策略,基本认证(用户名密码)可能已经被禁用,这种情况下建议改用OAuth 2.0认证来发送邮件,避免后续出现认证失败的问题。
内容的提问来源于stack exchange,提问作者Amaresh Hiremath
相关产品推荐
相关产品推荐

