Принудительно запускать почтовый спул через код - PullRequest
3 голосов
/ 10 октября 2011

G'day Есть ли способ заставить почтовый диспетчер работать, а не ждать периода задержки, установленного в CFAdmin?

Я посмотрел через API администратора и ничего не увидел, поэтому я подозреваю, что ответ может быть "нет", но я подумал, что, возможно, кто-то знает, как вызвать базовый процесс?

Причина, по которой вы хотите это сделать, - это некий крайний случай. На нашем тестовом сервере у нас установлен спулер каждые 15 секунд, что, в большинстве случаев, нормально. Однако у нас растет число модульных тестов (которые выполняются на этом же тестовом сервере), которые проверяют содержимое сообщений электронной почты, отправленных на различные элементы, которые нам необходимы для проверки целостности. В настоящее время тесты проверяют каталог Undelivr и, если соответствующее почтовое сообщение не найдено, ждет 2 секунды и повторяет попытку, ожидая в общей сложности 20 секунд, прежде чем решить, что тест необходимо прервать (20 секунд - произвольная величина; 15 секунд между интервалами буферизации какая-то "комната для маневра"). Это работает нормально, но это означает, что пакет модульных тестов работает медленнее, чем нужно, потому что в этих тестах для проверки электронной почты есть пауза «до 20 секунд».

Это не конец света, но я бы хотел иметь дело с этим, если это возможно.

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

В любом случае, все мои вафли в стороне, короткая версия вопроса: «есть ли способ заставить почтовую папку работать через код?».

Приветствие.

Ответы [ 3 ]

1 голос
/ 13 октября 2011

Хорошо, у меня есть официальная строка от одного из инженеров Adobe по этому поводу: в основном то, что я пытаюсь сделать, не может быть сделано, как оно в настоящее время стоит.

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

Да ладно.

Приветствую всех, кто смотрел на меня и предлагал свои предложения.

1 голос
/ 10 октября 2011
<cfobject action="CREATE"
   type="JAVA"
   class="coldfusion.server.ServiceFactory"
   name="factory">

<cfset MailSpoolService = factory.getMailSpoolService()> 
<cfset MailSpoolService.restart()>
0 голосов
/ 14 октября 2011

Существует метод для повторного запуска почтовой спулинга, но он является приватным для службы почтовой спулинга.

Как я уже упоминал в комментариях, вы можете вызвать приватный метод, установивего доступность до true.Не то, что вы хотите сделать "волей-неволей", но, вероятно, хорошо для модульного теста.

Отказ от ответственности: я бы не стал клясться, что это правильные методы.Но, похоже, это положило начало обработке почты в моих кратких тестах.

<cfscript>
    // Tested with CF 9.0.1
    factory = createObject("java", "coldfusion.server.ServiceFactory");
    spoolService = factory.getMailSpoolService();
    spoolClass = spoolService.getClass();

    methodToCall = spoolClass.getDeclaredMethod("refreshSpoolFiles", []);
    methodToCall.setAccessible(true);
    methodToCall.invoke(spoolService,  []);

    methodToCall = spoolClass.getDeclaredMethod("deliverStandard", []);
    methodToCall.setAccessible(true);
    methodToCall.invoke(spoolService,  []);
</cfscript>
...