如果答案就在这里我很抱歉,我很抱歉。无论如何,我会尽可能多地提供有关我的问题的信息。
我有一台运行在RHEL 6.6上的Railo CF服务器,它托管一个应用程序,通过电子邮件发送通知和警报。电子邮件使用cfmail从应用程序发送到我们的内部Exchange服务器群集。为了整洁和其他一些原因,所有电子邮件都是通过BCC发送的。
该应用程序的实施是为了标准化重要信息发送给我公司数千名员工的方式。为此,应用程序使用多个表单字段,要求最终用户在每个字段中输入特定信息。提交后,应用程序会根据表单字段的内容将其格式化为不同的模板。最终用户还可以发送文件附件。
该应用程序运行良好,直到电子邮件地址列表变得太大。由于cfexchange标签目前无法直接从Exchange提取电子邮件分发,因此用户必须从预先填充的下拉列表中选择电子邮件列表,或者以CSV格式输入单个电子邮件地址到另一个表单字段。这大部分都可以,因为最常用的发行版已经在下拉列表中。不幸的是,应用程序发送的一些通知必须以CSV格式发送,其中可以包含数千个。当发生这种情况时,我收到此错误:
nested exception is:
class com.sun.mail.smtp.SMTPAddressFailedException: 452 #4.5.3 Too many recipients.
(如果有人知道是否通过管理员或配置文件对此进行了修复,这可能会解决我的问题,而无需进一步阅读。)
因此,我开始寻找更好的方法。我首先发现了这个:need to slow mass email sending in coldfusion 4.5但是,电子邮件需要快速出去并设置cfschedule来检查服务器上的压力。我在SO上找不到任何其他相关内容。
我的谷歌搜索没有带来任何好处。我发现了一个使用cffile写入应用程序服务器上的qmail或postfix的假脱机目录的建议。这种方法对我来说似乎效率低下且不可靠。 (但是,如果有人认为这可行,请告知。)
我有一个想法;而不是立即通过cfmail发送所有这些电子邮件,首先将整个列表插入本地MySQL数据库,然后编写CF代码以查询该数据库,并以某种方式cfloop cfmail标记。如果不使用cfschedule或强制用户等到进程完成(我可能需要相当长的时间,特别是因为电子邮件必须转发到我们的Exchange服务器),我无法提供任何代码来执行此操作。
所以,对这个问题的任何帮助都是最受欢迎的。谢谢!
修改
响应只是循环播放电子邮件:这是我考虑的事情。我知道如何遍历项目列表,但我担心的是,每个发送的电子邮件都需要通过cfmail标记登录到Exchange,因为应用程序服务器不会直接登录到我们的Windows域。我无法找到一种合理的方法来测试它,因为它需要发送批量电子邮件。
microsoft.com上的Exchange文档充其量是模糊的。除非我错过了它,否则在452错误代码弹出之前,它似乎没有一个明确的答案可以接收多少封电子邮件。我无法找到这是从Exchange服务器管理面板中设置的内容。我不管理Exchange服务器,所以我必须联系我们公司的团队查找。
编辑#2
添加代码示例以供审核。但是,我认为如果一次传递超过1封电子邮件,则isValid()部分将失败。想法?
<cfloop index="bcc" list="#FORM.email_bcc#" delimiters = ", ">
<cfif isValid("email", bcc)>
<cfmail bcc="#bcc#"
from="#email_from#"
subject="#FORM.pre_email_subject# #Trim(FORM.subject)#"
type="html"
to="email@example.com">
Message goes here.
</cfmail>
<cfelse>
<cfmail
from="#email_from#"
failto="#fail_to#"
subject="FAILED #Trim(FORM.subject)#"
type="html"
to="#fail_to#">
</cfmail>
</cfif>
</cfloop>