UTL_SMTP.Write_Data не отправляет текст, если двоеточие включено - PullRequest
1 голос
/ 04 февраля 2010

Я создал функцию Oracle для отправки электронной почты с использованием пакета UTL_SMTP.

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

Однако, если текст содержит двоеточие, текст не включается в электронное письмо.

Каждый пример этого, который я видел в Интернете, показывает, что это не проблема. Есть идеи, что может быть причиной этого?

Это работает: UTL_SMTP.write_data(l_mail_conn, 'test');

Это не отправляется: UTL_SMTP.write_data(l_mail_conn, 'test:');

и не делает: UTL_SMTP.write_data(l_mail_conn, 'test' || ':');

Ответы [ 3 ]

1 голос
/ 12 ноября 2010

У меня тоже была эта проблема. Я высоко ценю то, что вы перешли на UTL_MAIL - ниже приведены мои выводы для тех, кто предпочел бы или должен остаться с UTL_SMTP.

Если вы убедитесь, что ваше тело SMS не соответствует шаблону 'aaa: ...', то utl_smtp.write_data не будет интерпретировать его как заголовок. Если ваше тело SMS совпадает с этим шаблоном, тогда префикс вашего сообщения с пробелом, или вы можете просто заменить двоеточие точкой с запятой и т. Д ... Ваш выбор.

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

.....
/* 999999999 is just an indicitive integer above and beyond the max length of an sms */
     IF (INSTR(p_message,':') < NVL(INSTR(p_message,' '),999999999)
        AND  INSTR(p_message,':') != 0)
     THEN p_message := ' '||p_message;
     END IF;

utl_smtp.write_data(l_mail_conn, p_message);
.....
1 голос
/ 05 февраля 2010

Может интерпретироваться как заголовок

Вместо того, чтобы писать свой собственный, посмотрите почтовый код, включенный в PLCODEBREW

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

Я не смог заставить работать UTL_SMTP - конечно, похоже, что любые двоеточия в теле UTL_SMTP интерпретировались как заголовок, и я не мог найти способ избежать их.

Мне удалось использовать пакет UTL_MAIL, представленный Oracle в 10g, и он работал очень хорошо. Единственной необходимой конфигурацией была установка переменной smtp_out_server в oracle для почтового сервера (включая номер порта) почтового сервера. Требуется только один вызов метода - гораздо понятнее для реализации в PL / SQL - а также позволяет вам лучше контролировать определенные поля электронной почты (например, «Тема») и также может обрабатывать вложения.

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