Передача входящей электронной почты в скрипт на Windows IIS SMTP? - PullRequest
10 голосов
/ 29 мая 2009

У меня есть веб-приложение, работающее на Windows IIS. Это приложение имеет базу данных, в которой каждый элемент имеет уникальный ключ (1, 2, 3 ...) и список адресов электронной почты (среди прочего).

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

item-75@myserver.example.com

Тогда сервер получит электронное письмо и передаст его сценарию. Сценарий запросит в базе данных элемент 75 для получения списка адресов электронной почты, а затем повторно отправит электронное письмо.

Я мог бы легко это сделать в Unix-системе, использующей sendmail, но я понятия не имею, можно ли выполнить аналогичную настройку в системе Windows (или потребуется дополнительное программное обеспечение).

Ответы [ 3 ]

9 голосов
/ 30 мая 2009

(Похоже, вы хотите реализовать такую ​​функцию, как craigslist).

Служба IIS SMTP может отправлять электронную почту, а также принимать электронную почту.

Вот что вы хотите сделать.

Настройте службу IIS SMTP на прием электронной почты для домена (это можно настроить в свойствах службы IIS SMTP в разделе «Домены»). Скажите доменное имя "myserver.example.com"

Затем на вашем DNS-сервере настройте запись MX, которая указывает на «myserver.example.com».

Теперь, когда электронная почта отправляется на ваш SMTP-сервер IIS, она фактически помещается в вашу папку mailroot / drop (вы также можете изменить эту папку в свойствах службы IIS SMTP).

Теперь, когда вы принимаете электронную почту, следующий шаг - написать скрипт, который будет:

1) Разбор писем.

2) Измените их соответствующим образом (вы просто хотите изменить адрес «на»?).

3) Если вы хотите переслать электронные письма, вам необходимо соответствующим образом изменить их. Вам нужно будет добавить один заголовок X-Sender, который используется для идентификации адреса электронной почты, отправляющего письмо, и заголовок X-Receiver для каждого получателя, который примет письмо. Вот пример электронного письма, которое было изменено:

X-Sender: me@mywebsite.com
X-Receiver: recip1@theirdomain.com
X-Receiver: recip2@theirdomain.com
From: "jim bob" <jim@example.com>
To: <item-75@myserver.example.com>
Subject: test
MIME-Version: 1.0
Content-Type: text/plain;
Message-ID: <024f01c9e130$b3eca500$0401a8c0@local>


test

Как только у вас будет этот измененный контент, вы захотите записать его в файл в каталоге mailroot / pickup. Обязательно используйте уникальное имя.

Служба IIS SMTP приходит, забирает электронную почту и ретранслирует ее, отправляя электронную почту с использованием X-Sender в качестве адреса MAIL FROM и отправляя ее на каждый адрес электронной почты, указанный в каждом заголовке X-Receiver.

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

5) Другим вариантом для всего этого является реализация SMTP Event Sink, но я думаю, что это излишне для того, что вы хотите сделать, и может создать больше головной боли, чем решит. Я бы пошел по пути погружения, если бы мне нравилась боль.

Надеюсь, я не сделал это примерно таким же чистым, как грязь.

2 голосов
/ 04 июля 2009

Мойки для событий совсем не сложны! На самом деле, существует около десятка примеров, написанных на VBS (который работает на Win-сервере с использованием WSH), которые выполняют именно то, что вы хотите сделать. Приемник событий OnArrival выполняется в РЕАЛЬНОМ ВРЕМЕНИ, используя любую учетную запись пользователя компьютера, которую вы пожелаете, без какой-либо угрозы безопасности, поскольку сообщение является асинхронным и не сообщает.

Это на самом деле очень легко сделать - один из самых простых. После настройки он никогда не ломается. На одном сервере я работал более 9 лет, обрабатывая несколько тысяч входящих сообщений в день! Я настроил около дюжины таких вещей - если это займет у вас больше пары часов, вы делаете это очень неправильно. Если бы это было проще, чем это в UNIX, моя бабушка могла бы быть программистом UNIX, поэтому я бы не стал хвастаться, что это проще сделать на сервере UNIX.

http://msdn.microsoft.com/en-us/library/ms528023.aspx

http://support.microsoft.com/kb/894286

http://msdn.microsoft.com/en-us/library/ms526206.aspx

http://msdn.microsoft.com/en-us/library/ms526620.aspx

0 голосов
/ 29 мая 2009

Вы можете читать по электронной почте через POP3 или IMAP, используя синхронизированный скрипт. Я также UNIXer, поэтому я изо всех сил пытаюсь понять, как что-то подобное так сложно, но у вас это есть. Вот что, я считаю, тебе следует сделать.

  • Сделайте сценарий на любом языке, который вам нравится. Пока он может читать из POP3 или IMAP.

  • Windows запускает скрипт каждые 5 минут

  • Сценарий должен получить доступ к почтовому ящику и выполнять любые необходимые ему электронные письма.

Мое личное предпочтение было бы установить Python, но если вы ограничены ... я не знаю. ASPNET неплох, но я никогда не использовал его для грязных скриптов.

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