Я написал хранимую процедуру в MSSQL Server 2008 R2, которая отправляет электронные письма, когда мое приложение регистрирует ошибки. Он отлично работает на серверах в нашем офисе, но когда я запустил его на наших удаленных серверах, я получил
must issue a starttls command first
Так что, возможно, где-то есть настройка, которая отличается между двумя серверами, и поэтому она работает на одном, а не на другом. Как настроить сервер так, чтобы он выдавал команду starttls первым?
Я считаю, что ваше сообщение об ошибке «сначала необходимо выполнить команду starttls» поступает с почтового сервера, на который вы отправляете свою электронную почту. Его можно настроить на прием только зашифрованных соединений для передачи сообщений. Вы можете проверить это, попытавшись подключиться к почтовому серверу по telnet и имитируя обмен по протоколу SMTP, который может выглядеть примерно так:
замазка -telnet mail.example.com 25
> 220 mail.example.com Microsoft ESMTP MAIL Service ready at Wed, 29 Jun 2011 11:57:31 +0200
< helo test
> 500 5.3.3 Unrecognized command
< helo test
> 250 mail.example.com Hello [123.45.67.89]
< mail from:<test@test.com>
> 250 2.1.0 Sender OK
< rcpt to:<testuser@example.com>
> 250 2.1.5 Recipient OK
< data
> 354 Start mail input; end with <CRLF>.<CRLF>
В этом примере строки, начинающиеся с «>», представляют собой ответы почтового сервера, а строки, начинающиеся с «<», - это то, что вам нужно ввести, чтобы получить ответы. Замените mail.example.com на используемый вами почтовый сервер. Если в любом месте обмена вы увидите «сначала необходимо выпустить starttls», значит, это все.
Если вы используете Мастер настройки почты базы данных SQL Server 2008, чтобы определить параметры учетной записи почтового сервера вместе с хранимой процедурой sp_send_dbmail для отправки почты, вам просто нужно будет убедиться, что в свойствах учетной записи установлен флажок «этому серверу требуется безопасное соединение (SSL)».