>通过填写表单并提交帐户注册账户.
>收到一封确认代码链接的电子邮件
>单击链接以确认新帐户并登录
当您从网络应用程序发送电子邮件时,通常(通常)持久层将会有一些变化.例如:
>新用户注册您网站上的帐户 – 新用户在数据库中创建,电子邮件将通过确认链接发送给他们
>用户向其他人分配错误或问题 – 更新问题并发送电子邮件通知.
如何发送这些电子邮件对您的应用程序的成功至关重要.如何发送它们取决于收件人收到邮件的重要性.
使用示例1,我们将介绍与邮件服务器关闭的情况相关的以下四种策略.
交易&同步
发送电子邮件失败,用户显示一条错误消息,表示无法创建其帐户.当应用程序等待连接超时时,应用程序将显得缓慢而无响应.因为事务被回滚,所以不会在数据库中创建该帐户.
交易&异步
这里的事务定义是指将电子邮件发送到JMS队列或将其保存在数据库表中以供另一个后台进程接收和发送.
用户帐户是在数据库中创建的,电子邮件将发送到JMS队列以供稍后处理.交易成功并承诺.用户显示一条消息,指出他们的帐户是创建的,并检查他们的电子邮件确认链接.在这种情况下,由于某些其他错误,电子邮件永远不会发送,但是用户被告知该电子邮件已发送给他们.如果必须调用应用程序支持来诊断电子邮件问题,则可能会有一些延迟将电子邮件发送给用户.
非交易性同步
用户在数据库中创建,但是当尝试使用确认链接发送电子邮件时,应用程序会收到超时错误.用户显示一条错误消息,指出有错误.应用程序缓慢而无响应,因为它等待连接超时
当邮件服务器恢复生效并且用户尝试重新注册时,他们被告知他们的帐户已经存在但尚未被确认,并且可以选择重新发送电子邮件.
非交易性异步
这与交易与交易之间的唯一区别异步的是,如果发送电子邮件到JMS队列或将其保存在数据库中存在错误,则仍然创建用户帐户,但是电子邮件永远不会发送,直到用户再次尝试注册为止.
我想知道的是其他人在这里做什么?你可以推荐除上述4之外的任何其他解决方案吗?接近这个问题的合理方法是什么?我不想过度设计一个处理我的邮件服务器的(希望)罕见情况的系统!
解决方法
>一旦您有用户注册,如果发送电子邮件失败,则不要退回注册.出于简单的商业原因:如果第一次尝试不起作用,他们可能不会回来或重新注册.而是容忍一个不完整的注册,并让用户尽快确认他们的电子邮件地址.
>在大多数情况下,发送电子邮件发生错误,您的应用程序将无法立即获得反馈 – 有效服务器上的不存在的电子邮件地址会以一定的延迟发回“无法投递”的消息;如果邮件被垃圾邮件过滤器吃掉,您根本不会收到任何反馈;在其他情况下,可能需要几分钟(灰名单)几天(邮件服务器暂时关闭)才能发送电子邮件.因此,等待邮递的同步方法注定是IMO.即使是立即失败(因为用户输入了一个明显的假地址)不应该导致注册回滚.
我会做的是,使帐户创建尽可能容易,允许用户在确认帐户之前访问帐户,然后将其从他们身上确认他们的电子邮件(如有必要,限制访问某些区域,直到确认).尽管如此,我会阻止创建具有相同电子邮件的第二个帐户,以防止混乱.