C# · 12月 21, 2021

[c#]exchange回复,全部回复,转发所遇到的问题

摘要<p style="margin-left: 30px;">场景:

<p style="margin-left: 30px;">用户B向A用户发送了一封邮件。

<p style="margin-left: 30px;">用户A答复邮件时,会默认将B作为接收人。

<p style="margin-left: 30px;">问题:

<p style="margin-left: 30px;">在用exchange的回复,全部回复,转发(Reply和Foward方法)邮件的时候,需求是用户可以删除用户B(转发除外),可以自定义接收人。但提供的Reply方法,发现用户B仍会收到答复的邮件。

解决办法<p style="margin-left: 30px;">通过反编译查看了Reply和Forward的方法:

<p style="margin-left: 30px;">

<p style="margin-left: 30px;">通过上面的图可以看到,这两个方法是通过ResponseMessage对象实现发送和添加额外的接收人的。

<p style="margin-left: 30px;">所以我们可以通过ResponseMessage对象来实现回复和转发,修改接收人信息。代码片段如下:

ExchangeService _exchangeService = ExchangeService(ExchangeVersion.Exchange2010_SP2); Reply_Forword(Email email,UserInfoBase user, (userInfo == ArgumentNullException(= = EmailMessage message = EmailMessage.Bind(_exchangeService,[] strTos = email.Mail_to.Split(= (type == = message.CreateReply( (type == = message.CreateReply( (type == = (responseMessage != ( item email.Mail_to.Split( ( item email.Mail_cc.Split(= = } </span><span style=”color: #0000ff;”&gt;catch</span><span style=”color: #000000;”&gt; (Exception ex) { </span><span style=”color: #0000ff;”&gt;throw</span> <span style=”color: #0000ff;”&gt;new</span> Exception(<span style=”color: #800000;”&gt;”</span><span style=”color: #800000;”&gt;<a href=”https://www.jb51.cc/tag/fasongyoujian/” target=”_blank” class=”keywords”>发送邮件</a>出错,</span><span style=”color: #800000;”&gt;”</span> + ex.Message + <span style=”color: #800000;”&gt;”</span><span style=”color: #800000;”&gt;:</span><span style=”color: #800000;”&gt;”</span> +<span style=”color: #000000;”&gt; ex.StackTrace); } }</span></pre>总结<p style="margin-left: 30px;">在查找解决办法的时候,反编译了回复和转发方法的实现方式,发现内部是通过ResponseMessage对象来实现的,就没再去尝试。但通过同事帮忙,找到了MSDN一篇文章

<p style="margin-left: 30px;">

<p style="margin-left: 30px;">在这篇文章中又提到了ResponseMessage对象。

<p style="margin-left: 30px;">

<p style="margin-left: 30px;">添加额外的接收人。

<p style="margin-left: 30px;">最后通过这种方式,修改掉了B用户。

<p style="margin-left: 30px;">现在回头看看反编译的图,就明白了,在转发邮件的时候,是会修改掉用户B的,转发邮件并不需要默认的接收人,因为你转发的对象还未知。

<p style="margin-left: 30px;">

<p style="margin-left: 30px;">这也印证了上面为什么ResponseMessage对象可以修改掉用户B的原因。猜测,通过这种方式截获了接收人列表。

<p style="margin-left: 30px;">最近发现,自己有点眼高手低了。这里记录问题的解决过程,警告自己一下。