Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 кодировка  [new]
ElenaLeont
Member

Откуда: Екатеринбург
Сообщений: 302
Добрый день! У меня такая проблема: настроила отправку sms с помощью dbmail. У двух нужных сотовых операторов нет своего смс-шлюза, поэтому пришлось воспользоваться платным шлюзом websms. Возникла такая проблема: часть sms сообщений (не все) обрезается на шлюзе (в [msdb].[dbo].[sysmail_mailitems] текст сообщения полный), связалась с техподдержкой шлюза, они говорят типа отправляйте тексты в 1251, а не в utf-8. select serverproperty ('collation')=Cyrillic_General_CI_AS, это ведь вроде и есть 1251, ничего не понимаю почему к ним приходит utf-8.
Подскажите, плиз, как принудительно в селекте сделать строку в 1251?
6 авг 09, 10:20    [7503984]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
CONVERT(<выражение> as varchar())
6 авг 09, 10:24    [7504032]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
ElenaLeont
Member

Откуда: Екатеринбург
Сообщений: 302
спасибо за ответ, но поле в таблице итак nvarchar
6 авг 09, 11:13    [7504441]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3208
ElenaLeont
спасибо за ответ, но поле в таблице итак nvarchar
А вам нужен просто varchar, без "n".
6 авг 09, 11:15    [7504454]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
Glory
Member

Откуда:
Сообщений: 104760
ElenaLeont
спасибо за ответ, но поле в таблице итак nvarchar

И мы увидим скрипт, которым вы отправляете данные вашему платному шлюзу ?
6 авг 09, 11:16    [7504467]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
ElenaLeont
спасибо за ответ, но поле в таблице итак nvarchar
Внимательно мой пост читайте...
6 авг 09, 11:16    [7504469]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
ElenaLeont
Member

Откуда: Екатеринбург
Сообщений: 302
перевод в varchar не помог, на телефон все равно пришло обрезанное, может кто еще что подскажет? а как отправляю вот:


BEGIN TRY

declare @df nvarchar(max)
declare @us nvarchar(10)
declare @pass nvarchar(10)
declare @tel nvarchar(10)
declare @Mess varchar(255)


set @Mess = (select accompany from dbo.SendSMS where vib<>0 and kto=@kto)
set @us=(select [user] from SMSWeb WHERE id=1)
set @pass=(select [pass] from SMSWeb WHERE id=1)
set @tel=(select [fromPhone] from SMSWeb WHERE id=1)

declare @dm nvarchar (max)
declare @sms nvarchar (max)
set @dm=''

DECLARE rst Cursor For (SELECT sms
FROM SMSDate WHERE vibor<>0 AND sms Not Like '%@%' and kto=@kto) For Read Only

Open rst
Set Nocount On
While 1>0
--1
BEGIN

FETCH rst INTO @sms
IF @@Fetch_Status<>0 break

If @dm =''
begin
set @dm = @sms
end
Else
begin
set @dm = @dm + ',' + @sms
End


END
CLOSE rst DEALLOCATE rst



set @df = 'user=' + @us + Char(13) + Char(10) + 'pass=' + @pass + Char(13) + Char(10)
+ 'fromPhone=' + @tel + Char(13) + Char(10)+ 'tels=' + @dm + Char(13) + Char(10) + 'mess='+ @Mess


DECLARE @email as nvarchar(255)
DECLARE @accompany as varchar(MAX)


set @email='post@websms.ru'
set @accompany= @df

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'SMSSend',
@recipients = @email,
@body = @accompany,
@body_format=text;


END TRY

адрес сайта разработчиков шлюза http://www.websms.ru/
6 авг 09, 12:02    [7504878]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
а вы с ними связывались? может у них так работает, что обрезает?

для спящего время бодрствования равносильно сну
6 авг 09, 12:04    [7504913]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
ElenaLeont
Member

Откуда: Екатеринбург
Сообщений: 302
посмотрела , что параметр тела сообщения в sp_send_dbmail
@body = ] 'body'
Текст сообщения электронной почты. Аргумент message имеет тип nvarchar(max) и значение по умолчанию NULL. Может его нужно как-то перевести в varchar?
6 авг 09, 12:07    [7504936]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
ElenaLeont
Member

Откуда: Екатеринбург
Сообщений: 302
конечно связывалась, они ответили типа отправляйте в кодировке 1251, а не в utf-8 и проблем не будет
6 авг 09, 12:09    [7504955]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
ElenaLeont
Member

Откуда: Екатеринбург
Сообщений: 302
Аууу, ну помогите кто-нибудь!!!
6 авг 09, 12:43    [7505174]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62917
На длину SMS сообщения есть ограничение, вроде бы всего 144 символа.
Кроме того, по твоим словам на телефон приходит, значит перекодируется из UTF-8, но возможно у оператора ошибка и обрабатывается только N символов, до преобразования.

--
http://www.podgoretsky.com
6 авг 09, 13:07    [7505360]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
ElenaLeont
посмотрела , что параметр тела сообщения в sp_send_dbmail
@body = ] 'body'
Текст сообщения электронной почты. Аргумент message имеет тип nvarchar(max) и значение по умолчанию NULL. Может его нужно как-то перевести в varchar?

ну так посмотрите текст процедуры. создайте такуюже, но параметр varchar(max).
6 авг 09, 13:27    [7505528]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62917
varchar(144).

--
http://www.podgoretsky.com
6 авг 09, 14:06    [7505874]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
ElenaLeont
Member

Откуда: Екатеринбург
Сообщений: 302
в компоненте dbmail сменила тип @body на varchar, не помогло
6 авг 09, 14:10    [7505908]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
Glory
Member

Откуда:
Сообщений: 104760
ElenaLeont
в компоненте dbmail сменила тип @body на varchar, не помогло

Вы сами то видели в какой кодировке приходит почтовое сообщение ?
6 авг 09, 14:14    [7505939]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
ElenaLeont
Member

Откуда: Екатеринбург
Сообщений: 302
отправила себе на mail.ru читается только utf. Как научить dbmail отправлять в 1251?
6 авг 09, 14:37    [7506145]     Ответить | Цитировать Сообщить модератору
 Re: кодировка  [new]
Сергей Мишин
Member

Откуда:
Сообщений: 376
ElenaLeont
в компоненте dbmail сменила тип @body на varchar, не помогло


там похоже не только у параметра менять тип, по коду @body в таблицу sysmail_mailitems пишется и т.д.

Можно попробывать отправить почту например через CDO. Что то типа этого:

DECLARE @objectID int, @hResult int
EXEC 	@hResult = sp_OACreate 'CDO.Message', @objectID OUT
IF @hResult <> 0 goto destroy
EXEC @hResult = sp_OASetProperty @objectID , 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value' , '2'
IF @hResult <> 0 goto destroy
EXEC @hResult = sp_OASetProperty @objectID , 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value' , 'адрес вашего smtp сервера' --изменить
IF @hResult <> 0 goto destroy
EXEC @hResult = sp_OASetProperty @objectID , 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/languagecode").Value' , 'ru'
IF @hResult <> 0 goto destroy
EXEC @hResult = sp_OASetProperty @objectID , 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusersername").Value' , 'ваш логин к ящику' --изменить
IF @hResult <> 0 goto destroy
EXEC @hResult = sp_OASetProperty @objectID , 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value' , 'пароль к ящику' --изменить
IF @hResult <> 0 goto destroy
EXEC @hResult = sp_OASetProperty @objectID , 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/urn:schemas:mailheader:content-language").Value' , 'windows-1251'
IF @hResult <> 0 goto destroy
EXEC @hResult = sp_OAMethod @objectID , 'Configuration.Fields.Update', null
IF @hResult <> 0 goto destroy
EXEC @hResult = sp_OASetProperty @objectID , 'Bodypart.Charset' , 'windows-1251'
IF @hResult <> 0 goto destroy
EXEC @hResult = sp_OASetProperty @objectID , 'From' , 'ваш адрес'--изменить
IF @hResult <> 0 goto destroy
EXEC @hResult = sp_OASetProperty @objectID , 'To' , 'куда отправить'--изменить
IF @hResult <> 0 goto destroy
EXEC @hResult = sp_OASetProperty @objectID , 'Subject' , 'test subject.'--изменить
IF @hResult <> 0 goto destroy
EXEC @hResult = sp_OASetProperty @objectID , 'TextBody' , 'test body'--изменить
IF @hResult <> 0 goto destroy
EXEC @hResult = sp_OAMethod @objectID , 'Send', null
IF @hResult <> 0 goto destroy
destroy:
	exec sp_OADestroy @objectID
6 авг 09, 15:43    [7506669]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить