Автоматически проверьте возвращенные электронные письма через POP3?

Элемент, который вы пытались найти, не был в DOM , когда ваш скрипт работал.

Позиция вашего DOM-зависимого скрипта может оказать глубокое влияние на его поведение. Браузеры анализируют HTML-документы сверху донизу. Элементы добавляются в DOM, и сценарии выполняются (как правило), когда они встречаются. Это означает, что порядок имеет значение. Как правило, скрипты не могут найти элементы, которые появляются позже в разметке, потому что эти элементы еще не добавлены в DOM.

Рассмотрим следующую разметку; сценарий # 1 не находит

, а сценарий # 2 преуспевает:


test div

Итак, что вы должны делать? У вас есть несколько вариантов:


Вариант 1: Переместите свой скрипт

Переместите свой скрипт дальше по странице, перед закрывающим тегом тела. Организованный таким образом остальная часть документа анализируется до того, как будет выполнен ваш скрипт:


  
  

Примечание: размещение скриптов внизу как правило, считается лучшей практикой .


Вариант 2: jQuery's ready()

Отмените свой сценарий до тех пор, пока DOM не будет полностью проанализирован, используя ready() :



Примечание. Вы можете просто привязать к DOMContentLoaded или window.onload, но у каждого есть свои оговорки. jQuery ready() предоставляет гибридное решение.


Вариант 3: Делегирование событий

Делегированные события имеют преимущество в том, что они могут обрабатывать события из элементов-потомков, которые будут добавлены в документ позже.

blockquote>

Когда элемент вызывает событие (при условии, что это bubbling g6], и ничто не останавливает его распространение), каждый родитель в родословной этого элемента также получает событие. Это позволяет нам привязать обработчик к существующему элементу и примерным событиям, когда они пузырятся от его потомков ... даже те, которые добавлены после присоединения обработчика. Все, что нам нужно сделать, это проверить событие, чтобы узнать, был ли он поднят нужным элементом и, если да, запустите наш код.

jQuery on() выполняет эту логику для нас. Мы просто предоставляем имя события, селектор для желаемого потомка и обработчик событий:



Примечание: Обычно этот шаблон зарезервированы для элементов, которые не существовали во время загрузки или , чтобы избежать прикрепления большого количества обработчиков. Также стоит отметить, что, пока я прикреплял обработчик к document (для демонстрационных целей), вы должны выбрать ближайшего надежного предка.


Вариант 4: Атрибут defer

Используйте атрибут defer в

Для справки, вот код из этого внешнего скрипта :

document.getElementById("test").addEventListener("click", function(e){
   console.log("clicked: %o", this); 
});

Примечание: атрибут defer, безусловно, кажется , как волшебная пуля , но важно знать об оговорках ... 1. defer может использоваться только для внешних скриптов, т. е. для тех, у кого есть атрибут src. 2. знать о поддержке браузера , то есть: ошибка реализации в IE & lt; 10

11
задан Henry 26 November 2012 в 19:48
поделиться

5 ответов

Я сделал большую работу, обрабатывающую электронные письма возврата и там различные типы. Если Вы хотите быть абсолютно уверенными, что электронная почта, Ваш взгляд на является действительно возвратом определенного вида, который я настоятельно рекомендую получению хорошего фильтра. Я работал с Инструментами Буги-вуги, и это работало очень хорошо. Это сообщает, какой возврат это, Твердо, Мягко, Переходное или если даже кто-то пытающийся отказываться от подписки. Это имеет muliple API включая .NET, и мне было легко вполне получить работу.

6
ответ дан 3 December 2019 в 10:05
поделиться

Спасибо за ответ, большой! Я провел некоторое исследование сам и нашел ListNanny - также супер простой использовать и говорю Вам тип возврата. Будет писать некоторое подтверждение концепции и видеть, какой я люблю лучше...

0
ответ дан 3 December 2019 в 10:05
поделиться

Довольно легко сделать с TcpClient. Откройте сервер:

TcpClient tcpClient = new TcpClient();
tcpClient.Connect(POP3Server, POP3Port);
NetworkStream stream = tcpClient.GetStream();

Прочитайте желанное сообщение:

int read = stream.Read(inBuffer, 0, inBuffer.Length);
string response = Encoding.ASCII.GetString(inBuffer, 0, read);
if (response.IndexOf("+OK") != 0) throw new ...;

Запишите обратно к серверу:

byte[] outBuffer = Encoding.ASCII.GetBytes("USER " + account + "\r\n");
stream.Write(outBuffer, 0, outBuffer.Length);

Это отправляет команду USER. Необходимо войти в систему, и затем можно начать захватывать сообщения - посмотрите POP3 RFC для полного списка команд. Если Вы не обращаетесь к выезду самокрутки эта статья CodeProject.

2
ответ дан 3 December 2019 в 10:05
поделиться

как abfo говорит, протокол POP3 супер прост, получение сообщений не является никаким brainer. Парсинг сообщений для получения отказов более труден, и надежно анализирующий, какая электронная почта вызвала отказ и почему это перестало работать, действительно твердо. Проблема состоит в том, что возвращенные сообщения не имеют стандартного формата, формы по умолчанию варьируются от MTA до MTA. Затем причину отказа может настроить администратор сайта, мешающий распознать, и администратор сайта мог изменить шаблон сообщения об отказе, который заставляет ее чинить почти невозможный.

Посмотрите, можно ли найти менеджер почтовой рассылки.NET и если можно повторно иметь целью код обработки возврата. Сбой этого, посмотрите, можно ли изменить инструмент, это отправляет сообщения для отправки каждого электронного письма от уникального (и обратимый) enveloper отправитель (VERP, я думаю, что это называют?). Тем путем Вы не должны сканировать тело электронной почты, можно сказать который получатель, отказавший путем исследования адреса получателя сообщения об отказе.

2
ответ дан 3 December 2019 в 10:05
поделиться

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

Я озирался некоторое время, и я обосновался на свободном и менеджере по новостной рассылке PHPlist с открытым исходным кодом.

Они описывают подробно свои настройки для обработки возвратов, и у них действительно есть экспериментальная усовершенствованная функция обработки возврата, которая позволит Вам настраивать возврат, обрабатывающий точно способ, которым Вы хотите.

Evem, если Вы решаете не использовать PHPlist, читая, как они делают это, будет полезной информацией для Вас.

0
ответ дан 3 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: