我正在运行一项网络服务,该服务目前通过gmail smtp服务器向新用户发送确认电子邮件。由于我每天只收到一些新用户,所以这不是问题。
我最近在webapp中添加了新功能,这些功能需要每天向每个用户发送自定义消息。可以认为这与LinkedIn发出的常规消息类似,可以为您提供有关网络活动的状态报告。每个用户的消息都会有所不同。拥有数千名用户,这意味着每天都会发送数千条独特的消息。
编辑:我发现这些类型的电子邮件被称为“交易或关系消息”。 Spamtacular有一个很好的article on differentiating between marketing and transactional email。
我认为使用gmail的smtp服务器不会再削减它了,但我肯定不知道。我不知道每个帐户的gmail最大外发邮件数是多少(可能是100 /天),但它们会将邮件限制为每封邮件500个收件人。我不会向500个收件人发送一条消息,但我将发送1000个自定义消息,每个收件人每天收到一封。
我有兴趣学习这方面的任何最佳实践(特别是对于基于Java的webapps)。以下是我对它的一些看法和关注:
任何建议表示赞赏。我也对开源工具或网络服务非常感兴趣,这些工具可以帮助我尽快提升。
谢谢!
答案 0 :(得分:4)
关于您的第一个问题,是的,您应该设置自己的邮件服务器。使用gmail执行此操作可能会有一段时间,但是当他们看到此类活动时,他们可能会在短时间内关闭您。您可以注册一个企业帐户并使用应用引擎发送消息。这是link,其中包含有关该服务的邮件配额的信息。
关于你的第二个和第三个问题,让网络应用排队的消息由集中服务发送而不是让应用自己发送消息是个好主意。
通常我只使用数据库表作为队列 - Web应用程序为每个要发送的消息插入行。服务/预定任务应用程序将从表中获取新消息并将其发送出去。如果您希望稍后切换邮件服务器,如果邮件服务器关闭则更好的可靠性,如果收件人无法获取邮件时更容易诊断,以及重新发送邮件的能力,这将为您提供很大的灵活性。至于使用JMS / MQ来做到这一点 - 可能没有必要。 IMO用作队列的数据库表将比基于JMS的实际队列系统更灵活。
至于选择退出,是的 - 您应该让人们选择退出。我不认为您需要将邮件标记为批量邮件。
答案 1 :(得分:4)
在体系结构方面,我肯定会考虑通过某种形式的异步消息队列(或使用数据库作为中介的传真)来解耦从主服务发送电子邮件。这种方法的另一个好处是,如果SMPT服务器\网络关闭,您可以构建重试语义,另外为了将来的可扩展性,您可以实现从同一队列读取的多个邮件发件人或实现发送限制或调度(即每小时发送n个消息) )等等。