C # Windows служба отправки почты - клиент не прошел проверку подлинности - PullRequest
0 голосов
/ 11 февраля 2010

У меня есть служба Windows, которая отправляет почту пользователям.Код, который используется, является основным способом отправки почты.

SmtpClient client = new SmtpClient("servername");
MailMessage msg = new Mailmsg(); ...// configuration
client.send(msg);

Если я установлю учетные данные от клиента, я смогу отправлять почту через сервер Exchange (2007).Сервер обмена настроен так, чтобы разрешать отправку электронной почты без аутентификации (анонимно).

Поэтому, если я не предоставляю учетные данные с usedefaultcredentials на false, это работает в моем консольном приложении, но не в моей службе Windows.

Я получаю сообщение "SMTP-серверу требуется безопасное соединение или клиент не прошел проверку подлинности".У любого есть идея, почему я получаю это, когда я использую службу Windows вместо консольного приложения (идентичный код)

Ответы [ 5 ]

0 голосов
/ 11 февраля 2010

Просто мысль, но; Ваша служба обмена полагается на безопасную связь с использованием сертификатов? Если это так, вы можете дважды проверить, есть ли у вашей службы доступ к хранилищу сертификатов, которое фактически содержит нужный сертификат (на основе учетных данных пользователя службы)

0 голосов
/ 11 февраля 2010

Я бы создал файл журнала SMTP-сессий, просто чтобы убедиться, что вы на самом деле подключаетесь к тому серверу, который вам кажется. Затем вы также можете визуально проверить файл журнала и увидеть фактические ответы, возвращаемые с SMTP-сервера.

Чтобы создать файл журнала сеанса SMTP, вам необходимо включить переключатели регистрации в вашем файле .config.

Следующий пример переключателей трассировки приведет к записи сеанса SMTP в файл с именем «System.Net.trace.log».

<configuration>
  <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="System.Net.trace.log"                />
    </sharedListeners>

    <switches>
      <add name="System.Net" value="Verbose" />
      <add name="System.Net.Sockets" value="Verbose" />
    </switches>
 </configuration>

У меня есть больше информации здесь: http://systemnetmail.com/faq/4.10.aspx

0 голосов
/ 11 февраля 2010

Возможно, пользователь, под которым работает служба, может не иметь разрешения на отправку электронной почты. Щелкните правой кнопкой мыши службу и на вкладке «Вход» вы увидите, под каким пользователем запущена служба. Вы можете установить пользователя там.

0 голосов
/ 11 февраля 2010

Вам необходимо запустить службу под учетной записью, у которой есть права доступа к серверу обмена. В свойствах сервиса установите учетную запись:

альтернативный текст http://www.adobe.com/devnet/contribute/articles/cps_autodeploy/fig06.gif

0 голосов
/ 11 февраля 2010

У вашей учетной записи Windows, используемой для запуска службы, недостаточно прав. Пожалуйста, проверьте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...