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

Откуда:
Сообщений: 382
Доброго времени суток!

использую Utl_Smtp для посылки писем. Но если в Send_Header('To', '<' || 'Уведомление' || '>');
испльзую русский - то приходят '?????????'. Нельзяли в теле процедуры посылки явно указать nls_lang, при этом не спользуя alter session и не меняя настройки на серваке?
29 июн 09, 22:46    [7356455]     Ответить | Цитировать Сообщить модератору
 Re: Русский в теле письма  [new]
wildwind
Member

Откуда: Москва
Сообщений: 1296
lari,

См. convert
29 июн 09, 22:52    [7356469]     Ответить | Цитировать Сообщить модератору
 Re: Русский в теле письма  [new]
lari
Member

Откуда:
Сообщений: 382
а какую комбинацию convert стоит использовать?
29 июн 09, 23:01    [7356491]     Ответить | Цитировать Сообщить модератору
 Re: Русский в теле письма  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
lari,

полагаю, что convert('Ваш текст', 'CL8MSWIN1251')...
30 июн 09, 00:36    [7356766]     Ответить | Цитировать Сообщить модератору
 Re: Русский в теле письма  [new]
analitik
Member

Откуда: Сами мы не местные
Сообщений: 94
DECLARE
	subject VARCHAR2(30) := '<заголовок>'; -- Заголовок письма
	message VARCHAR2(30) := '<Содержимое>'; -- Содержимое письма
	mailhost VARCHAR2(30) := '000.000.000.000';   -- сервер почты
	sender VARCHAR2(30) := 'on@mail.ru'; -- отправитель
	recipient VARCHAR2(255) :='tu@mail.ru'; -- получатель
	mail_conn utl_smtp.connection;
BEGIN
	mail_conn := utl_smtp.open_connection(mailhost, 25);
	utl_smtp.helo(mail_conn, mailhost);
	utl_smtp.mail(mail_conn, sender);
	utl_smtp.rcpt(mail_conn, recipient);
	utl_smtp.open_data(mail_conn );
	utl_smtp.write_data(mail_conn,'Date: ' || to_char(sysdate,'dd Mon yy hh24:mi:ss','NLS_DATE_LANGUAGE = AMERICAN')||CHR(13)||CHR(10));
	utl_smtp.write_data(mail_conn,'From: ' || sender||CHR(13)||CHR(10));
	utl_smtp.write_raw_data(mail_conn, utl_raw.cast_to_raw('Subject: '||NVL(subject,'(no subject)')||CHR(13)||CHR(10)));
	utl_smtp.write_data(mail_conn,'MIME-Version: 1.0' ||CHR(13)||CHR(10));
	utl_smtp.write_data(mail_conn,'Content-Type: text/plain; charset="windows-1251"' ||CHR(13)||CHR(10));
	utl_smtp.write_data(mail_conn,'Content-Transfer-Encoding: 8bit' ||CHR(13)||CHR(10));
	utl_smtp.write_data(mail_conn,'To: '||recipient||CHR(13)||CHR(10));
	utl_smtp.write_raw_data(mail_conn,utl_raw.cast_to_raw(CHR(13)||CHR(10)|| message));
	utl_smtp.close_data(mail_conn );
	utl_smtp.quit(mail_conn);
EXCEPTION
WHEN OTHERS THEN
	utl_smtp.quit(mail_conn);
END;

Практика - путь к совершенству.
Practice makes excellence.
30 июн 09, 09:38    [7357258]     Ответить | Цитировать Сообщить модератору
 Re: Русский в теле письма  [new]
lari
Member

Откуда:
Сообщений: 382
спасибо! только заголовок "отправителя" ни как не получается "русифицировать"((( convert не помогает...
30 июн 09, 11:30    [7357875]     Ответить | Цитировать Сообщить модератору
 Re: Русский в теле письма  [new]
lari
Member

Откуда:
Сообщений: 382
полный код выглядит так:

DECLARE
  subject   VARCHAR2(255) := convert('Тема', 'CL8MSWIN1251'); -- Заголовок письма
  message   VARCHAR2(255) := convert('Тело', 'CL8MSWIN1251'); -- Содержимое письма
  mailhost  VARCHAR2(255) := '000.000.000.000'; -- сервер почты
  send_head VARCHAR2(255) := convert('Отправитель', 'CL8MSWIN1251');
  sender    VARCHAR2(255) := 'Aasdfii@mail.ru'; -- отправитель
  recipient VARCHAR2(255) := 'Sgsdf@mail.ru'; -- получатель
  mail_conn utl_smtp.connection;
BEGIN
  mail_conn := utl_smtp.open_connection(mailhost, 25);
  utl_smtp.helo(mail_conn, mailhost);
  utl_smtp.mail(mail_conn, sender);
  utl_smtp.rcpt(mail_conn, recipient);
  utl_smtp.open_data(mail_conn);
  utl_smtp.write_data(mail_conn, 'MIME-Version: 1.0' || CHR(13) || CHR(10));
  utl_smtp.write_data(mail_conn,'Content-Type: text/plain; charset="windows-1251"' || CHR(13) || CHR(10));
  utl_smtp.write_data(mail_conn,'Content-Transfer-Encoding: 32bit' || CHR(13) ||CHR(10));
  utl_smtp.write_data(mail_conn,'Date: ' ||to_char(sysdate,'dd Mon yy hh24:mi:ss','NLS_DATE_LANGUAGE = AMERICAN') || CHR(13) ||CHR(10));                        
  utl_smtp.write_data(mail_conn, 'From: ' || send_head || CHR(13) || CHR(10));  
  utl_smtp.write_raw_data(mail_conn,utl_raw.cast_to_raw('Subject: ' || NVL(subject, '(no subject)') ||CHR(13) || CHR(10)));
  utl_smtp.write_data(mail_conn, 'To: ' || recipient || CHR(13) || CHR(10));
  utl_smtp.write_raw_data(mail_conn, utl_raw.cast_to_raw(CHR(13) || CHR(10) || message));
  utl_smtp.close_data(mail_conn);
  utl_smtp.quit(mail_conn);
EXCEPTION
  WHEN OTHERS THEN
    utl_smtp.quit(mail_conn);
END;
30 июн 09, 11:41    [7357971]     Ответить | Цитировать Сообщить модератору
 Re: Русский в теле письма  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
От имеет ввиду Вася Пупкин <pupkin@mail.ru>
Для этого используется специальное кодирование
В DBMS_MAIL (10g) это вроде уже есть
30 июн 09, 11:44    [7357994]     Ответить | Цитировать Сообщить модератору
 Re: Русский в теле письма  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Точнее UTL_ENCODE
Здесь были примеры
30 июн 09, 11:45    [7358013]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить