2010-02-17 110 views
4

我正在运行一个Web服务,该服务当前通过gmail smtp服务器向新用户发送确认电子邮件。由于我每天只有几个新用户,这不成问题。从网络服务发送自动每日电子邮件的最佳做法

我最近为webapp添加了新功能,需要每天向每个用户发送定制消息。可以认为这与LinkedIn发送的常规消息类似,可以为您提供关于网络活动的状态报告。每个用户的消息都会有所不同。有了成千上万的用户,这意味着每天都会发送数千条独特的消息。

编辑:我后来发现这些类型的电子邮件被称为“交易或关系消息”。 Spamtacular有一个很好的article on differentiating between marketing and transactional email

我不认为使用gmail的smtp服务器会削减它,但我不知道这一点。我不知道每个帐户的Gmail最大传出邮件数量是多少(可能是100 /天),但是它们将每封邮件的传出邮件限制为500个收件人。我没有向500位收件人发送单个邮件,但是我将向每位收件人发送1000封自定义邮件,每天收到一封邮件。

我有兴趣了解这样做的任何最佳实践(特别是对于基于Java的webapps)。这里是我的一些想法和关注它:

  • 我应该建立我自己的传出邮件服务器?如果我这样做,看起来我会遇到各种其他问题,比如防止滥用邮件服务器,监控反弹,允许选择退出电子邮件等等。是否有任何工具或服务可以帮助您有了这个?也许像OpenEMM或MailChimp这样的服务?但那些似乎更多地关注电子邮件营销活动。
  • 我不认为我应该让webapp自己处理发送电子邮件,因为它目前是用于新用户注册。我想我应该设置一个单独的消息服务器,它可以访问与web应用程序相同的后端/数据存储。对此有何想法?
  • 我应该考虑设置某种消息队列服务来帮助解决这个问题,比如JMS,RabbitMQ,ActiveMQ等?
  • 我需要为用户提供一种退出方式吗?我是否需要将这些标记为批量消息?我没有真正考虑这些电子邮件营销信息,但我不确定什么被认为是适当的或适当的网络礼仪。

任何意见表示赞赏。我也对开源工具或Web服务非常感兴趣,这些工具或Web服务可以简化事情,并可以帮助我尽快提高速度。

谢谢!

+0

1000个邮件给一个收件人?我在那里!当然,这是一个错字,或者我错过了一些东西。 – 2010-02-17 21:32:43

+0

我有一个应用程序发送每日更新给我和我的一个朋友(都在Gmail上)。在它开始发送这些邮件后不久,应用程序被标记为垃圾邮件,我必须转到我的垃圾邮件框并在它开始回到我的收件箱之前多次将其标记为非垃圾邮件。我会去让别人为你处理。 – 2010-02-17 21:44:00

+0

@不退款不退货:我认为你应该把它看作是“成千上万的邮件,每个邮件都是不同的地址” – 2010-02-17 21:47:45

回答

4

关于你的第一个问题,是的,你应该建立你自己的邮件服务器。使用gmail来做这件事可能会有一段时间,但他们很可能会在他们看到这种活动时以短时间关闭你。您可以注册一个商业帐户并使用应用引擎发送消息。以下是link,其中包含有关该服务的邮件配额的信息。

关于你的第二和第三个问题,将消息放在Web应用程序中排队并由集中服务发送出去,而不是让应用程序自己发送消息是个好主意。

通常我只是使用数据库表作为队列 - Web应用程序为每个要发送的消息插入行。服务/计划任务应用程序会从表中获取新消息并将其发送出去。如果您希望稍后切换邮件服务器,可以提供很大的灵活性,如果邮件服务器关闭,则可靠性更高,如果收件人没有收到邮件时出现问题,则可以更轻松地进行诊断,并且可以重新发送邮件。至于使用JMS/MQ来做到这一点 - 可能没有必要。一个用作队列的IMO数据库表会比实际的基于JMS的队列系统给你更多的灵活性。

至于退出,是的 - 你应该给人一种退出的方式。我不认为你需要将邮件标记为批量。

+0

谢谢,这绝对证实了我的想法。 – Tauren 2010-02-18 22:52:41

4

在架构方面,我肯定会考虑通过某种形式的异步消息队列(或使用数据库作为中介的传真)来解除从主服务发送的电子邮件。这种方法的另一个好处是,如果SMPT服务器\网络关闭,您可以构建重试语义,另外为了将来的可伸缩性,您可以实现从同一队列中读取多个邮件发件人或实现发送限制或调度(即每小时发送n封邮件)等等等等

+0

关于更容易安排和节流的好处。如果我使用GAE发送邮件,我肯定需要加以限制。谢谢。 – Tauren 2010-02-18 22:53:33