У нас есть система, которая отправляет электронные письма из таблицы очередей электронной почты на Sql Server. Он читает набор неотправленных записей из очереди, отправляет их, а затем обновляет их все с отправленной датой.
У нас есть пользователи, которые жалуются на то, что они не получают электронные письма (хотя большинство пользователей получают их просто отлично). Тем не менее, записи отправили даты, установленные на них, что указывает на то, что процесс успешно отправил все электронные письма, прежде чем пометить их как отправленные. Если бы он обнаружил какие-либо ошибки, то записи не отправили бы заполненные даты, так как это последнее, что делается в процессе.
Тем не менее, мне все время отсылают, что "программа не работает!" Поэтому я хочу доказать, что определенные электронные письма вышли. Я включил System.Net
и System.Net.Sockets
трассировку для .NET Framework. Я отправил тестовое электронное письмо через систему и увидел, что оно зарегистрировано в файле трассировки. Однако в трассировке я не вижу ничего, что фактически показывало бы, ПОЧЕМУ электронное письмо было для него, ничего об адресе получателя, или теле или чем-либо, что я мог видеть
Я надеялся на что-то вроде журнала SMTP, показывающего Message X to recipient Y was successfully handed off to, and accepted by the server on such-and-such date/time.
, чтобы доказать Да, ваша электронная почта успешно покинула наш сервер; если вы его не получаете, проблема где-то вниз по течению от нас. Но я не вижу этой информации в журнале трассировки.
Есть ли какие-либо переключатели, которые я могу включить для трассировки, которая дала бы этот уровень информации? Или каким-то другим способом я могу пойти по этому поводу?
Сообщения отправляются через клиентскую учетную запись Office 365 с использованием класса .NET SmtpClient.
Вот текущие настройки трассировки, которые у меня есть ...
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.Net" >
<listeners>
<add name="MyTraceFile"/>
</listeners>
</source>
<source name="System.Net.Sockets">
<listeners>
<add name="MyTraceFile"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add
name="MyTraceFile"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="F:\Trace\System.Net.trace.log" />
</sharedListeners>
<switches>
<add name="System.Net" value="Verbose" />
<add name="System.Net.Sockets" value="Verbose" />
</switches>
</system.diagnostics>