Задержка отправки писем в C # - PullRequest
9 голосов
/ 17 февраля 2009

Мы пишем функцию для отправки напоминания по электронной почте клиентам в течение x дней, и нам просто интересно, можно ли отложить отправку электронных писем, как это можно сделать в Outlook («Новая почта»> «Параметры»> «Не доставить до) в C #.

Кто-нибудь знает способ сделать это?

Ответы [ 4 ]

9 голосов
/ 17 февраля 2009

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

Вот что я бы сделал:

  1. Запланируйте электронную почту в вашей системе, сделав запись в таблице.
  2. Включите столбец «SendDate» в таблицу, где вы можете установить дату в будущем
  3. Напишите службу Windows, которая активируется раз в 15 минут (например) и отправляет электронные письма в эту таблицу, где SendDate
3 голосов
/ 17 февраля 2009

номер

Способ сделать это состоит в том, чтобы ваше приложение записывало электронную почту в очередь (это может быть база данных, файл, MSMQ и т. Д.), А затем создавало отдельный процесс, который позднее считывает почту из этой очереди и отправляет его.

Насколько я знаю, протокол SMTP не имеет какой-либо функции "отложенной отправки". Кроме того, функция, на которую вы ссылаетесь в Outlook, на самом деле просто хранит ее в папке «Исходящие» вашего клиента до указанной даты, поэтому это функция на стороне клиента, а не функция на стороне сервера.

3 голосов
/ 17 февраля 2009

Одной из возможностей является создание службы, выполняющей запланированную задачу, обрабатывающую «ожидающую» почту. Вы можете хранить ожидающую почту в базе данных SQL. (Дейв детализирует это)

Эта статья выглядит многообещающе, если вы хотите избежать «реального» сервиса

http://www.codeproject.com/KB/aspnet/ASPNETService.aspx

1 голос
/ 17 февраля 2009

SmtpClient - довольно тупой клиент, который не поддерживает это - отправка происходит мгновенно, независимо от того, являются ли они синхронными или асинхронными. Вы можете сделать это с помощью интеграции с Exchange. Я не уверен, какие API выставлены для Exchange, хотя. Простейшим способом было бы сохранить сообщение в таблице базы данных вместе со временем отправки и иметь автономный процесс, который регулярно сканирует эту таблицу и ищет сообщения, значение времени отправки которых прошло и не помечено как отправлено.

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